java - 带有自签名证书的 Flutter https

标签 java ssl flutter dart https

我正在使用 flutter 通过 https 连接 java java 服务器实现。我首先测试它仅使用 http 即可正常工作。

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

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

Unhandled Exception: HandshakeException: Handshake error in client (OS Error: E/flutter ( 7370): CERTIFICATE_VERIFY_FAILED: self signed certificate(handshake.cc:354))

我假设我需要将我的客户端设置为信任我的服务器自签名证书。我查看了 API 引用资料,但无法弄清楚如何实现这一点...

我的 flutter app 中的 dart 代码如下...

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}');
}

最佳答案

虽然 Pascal 的答案有效,但它仅适用于 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;
  }
}

然后在您的主程序中,将您的类实例化为全局 HttpOverride:

HttpOverrides.global = new DevHttpOverrides();

这应该使所有客户端忽略错误的证书,因此仅在开发中推荐使用。 归功于这个问题:https://github.com/dart-lang/http/issues/458

关于java - 带有自签名证书的 Flutter https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59622087/

相关文章:

java - Spring 3.0 : Unable to locate Spring NamespaceHandler for XML schema namespace

java - UTC 中的字符串正在转换为 EST Instant

使用 HTTPS 连接到 Web 服务时,Android SSL 握手失败

ubuntu - 在 ubuntu ec2 的 couchdb 中设置自签名 ssl 证书时出现问题

dart - Flutter 在执行后台任务时显示 Progress HUD

flutter - 在点击时禁用 FlatButton 声音( flutter )

java - 从 Java 中的 ArrayList 获取唯一值

java - 如何以编程方式将Java中的bean添加到Spring中的app-context.xml中?

.htaccess - 从非 www 重定向到 www 并强制使用 SSL

datetime - Dart -日期差异