我正在尝试使用自签名证书连接服务器,但我收到错误:
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握手错误。
答案 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)
禁用防病毒解决了我的问题。