Java 带自签名证书的flatter https

Java 带自签名证书的flatter https,java,ssl,flutter,dart,https,Java,Ssl,Flutter,Dart,Https,我正在使用flatter通过https连接java服务器实现。我首先用http测试了它是否正常工作 然后我切换到服务器端的https,并将其指向我使用keytool创建的自签名证书 然后我尝试使用http dart包连接到它。错误导致了以下异常 未处理的异常:握手异常:客户端(OS)中的握手错误 错误:E/flatter(7370):证书验证失败:自签名 证书(握手,抄送:354)) 我假设我需要将客户端设置为信任我的服务器自签名证书。我已经看过APi参考资料,但不知道如何实现这一点 我的飞镖应

我正在使用flatter通过https连接java服务器实现。我首先用http测试了它是否正常工作

然后我切换到服务器端的https,并将其指向我使用keytool创建的自签名证书

然后我尝试使用http dart包连接到它。错误导致了以下异常

未处理的异常:握手异常:客户端(OS)中的握手错误 错误:E/flatter(7370):证书验证失败:自签名 证书(握手,抄送:354))

我假设我需要将客户端设置为信任我的服务器自签名证书。我已经看过APi参考资料,但不知道如何实现这一点

我的飞镖应用程序中的飞镖代码如下

void testMessage() {
    var url = 'https://192.168.100.105:8443';
    var response = await http.post(url, body: "{\"message_name\": \"TestMessage\", \"contents\": { \"field1\":\"blah\", \"field2\":\"blah\" }}");
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
}

在开发过程中,您可以使用HttpClient的
badCertificateCallback
回调,只需返回
true
。这将接受所有坏证书

HttpClient=HttpClient()
…badCertificateCallback=((X509CertificateCert,字符串主机,int端口)=>true);
要接受特定的坏证书,您可以从以下位置尝试此代码:

导入'dart:io';
将“package:http/http.dart”导入为http;
bool_certificateCheck(X509Certificate cert,字符串主机,int端口)=>

主机=='local.domain.ext';// 如果您使用dio库,您可以在Pascal的答案有效时从http向https发出请求,它只适用于
dart:io HttpClient
。 要将
badCertificateCallback
应用于
http
包的
Client
实例,请执行以下操作:

创建一个类,该类通过以下方式重写
HttpOverrides

class DevHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  }
}
然后在main中,将类实例化为全局HttpOverride:

HttpOverrides.global = new DevHttpOverrides();
这将使所有客户机忽略坏证书,因此是唯一的;在开发中推荐了y。
值得赞扬的是这个问题:

这段代码将如何在他的代码中实现?我有一个类似的问题,我希望继续使用http包,而不是dart/io,因为我发现实现更容易阅读、更简单、更简短。请不要只是发布一些工具或库作为答案。至少在答案中说明一下。使用它并没有解决问题的特殊方法,@Yunnosch,仅仅使用这个库就不会有问题。在决定使用哪个库之前,这对我来说是很有帮助的,所以我把它作为一个答案,以防它对其他人有帮助