Flutter中自签名证书上的SSL握手错误

时间:2017-09-09 22:44:09

标签: android ssl flutter

我正在尝试使用自签名证书连接服务器,但我收到错误:
E / flutter(3781):HandshakeException:客户端中的握手错误(操作系统错误:
E / flutter(3781):CERTIFICATE_VERIFY_FAILED:主机名不匹配(ssl_cert.c:345))
代码,我设置证书:

String path = '/storage/sdcard0/server.crt';
SecurityContext context = new SecurityContext();
context.setTrustedCertificates(path, password: 'hello');
_client = new HttpClient(context: context);

我做错了什么?

如果我没有设置SecurityContext,我会收到SSL握手错误。

4 个答案:

答案 0 :(得分:7)

我使用HttpClient.badCertificateCallback
以下是接受任何证书的代码:

_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;

答案 1 :(得分:2)

在我的情况下,我收到此错误消息,因为在创建自签名证书时,当我要求输入 Common Name 时没有指定主机名(对于简单测试, localhost 是可以的):

$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.pem

Country Name (2 letter code) [AU]:SI
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:

答案 2 :(得分:1)

您可以免费从https://letsencrypt.org/

获取有效的SSL证书

答案 3 :(得分:-1)

禁用防病毒解决了我的问题。