You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用自签名证书建立WSS连接时出现CERTIFICATE_VERIFY_FAILED: Hostname mismatch错误的安全解决方案咨询

安全解决Flutter中WSS连接的主机名不匹配证书验证错误

你遇到的Hostname mismatch错误核心有两个关键点:一是你的Flutter代码没有正确启用自定义的证书信任配置,二是服务器证书的主机名标识(SAN/CN)和你实际连接的地址不匹配。以下是分步的安全解决方案:

1. 先修复Flutter代码的配置遗漏

你已经定义了MyHttpOverrides类,但没有在应用启动时启用它,导致自定义的CA证书根本没被HttpClient使用。修改你的main函数:

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 必须先初始化资源绑定,否则rootBundle会报错
  ByteData data = await rootBundle.load('assets/data/ca-cert.pem');
  // 启用自定义的HttpOverrides,让所有HttpClient请求使用我们的CA证书
  HttpOverrides.global = MyHttpOverrides(data: data);
  runApp(const App());
}

class MyHttpOverrides extends HttpOverrides {
  final ByteData data;
  MyHttpOverrides({required this.data});

  @override
  HttpClient createHttpClient(SecurityContext? context) {
    final SecurityContext clientContext = SecurityContext()
      ..setTrustedCertificatesBytes(data.buffer.asUint8List());
    return super.createHttpClient(clientContext);
  }
}

2. 验证服务器证书的主机名配置

Hostname mismatch错误本质是服务器证书中没有包含你要连接的主机名/IP地址。现代TLS协议优先校验证书的Subject Alternative Name (SAN)字段,其次才是旧标准的Common Name (CN)。

你可以用OpenSSL命令检查服务器证书的内容:

openssl x509 -in server-cert.pem -text -noout

重点查看两个部分:

  • Subject字段中的CN=值(比如CN=example.com)
  • X509v3 Subject Alternative Name字段(需要包含你实际连接的域名或IP,格式类似DNS:example.com或IP:192.168.1.100)

如果SAN字段缺失或没有匹配的主机标识,你需要重新生成服务器证书,在生成时添加SAN扩展。示例OpenSSL配置文件:

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]
countryName = CN
stateOrProvinceName = YourProvince
localityName = YourCity
organizationName = YourOrg
commonName = example.com

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
IP.1 = 192.168.1.100

3. 额外验证点

如果完成前两步还是有问题,可以检查:

  • 你加载的ca-cert.pem是否真的是签署服务器证书的CA根证书(而非服务器证书本身)
  • 服务器证书是否在CA的信任链中(自签名场景下,服务器证书就是CA直接签署的)

为什么Kotlin代码能正常工作?

Kotlin代码中正确初始化了SSLSocketFactory并绑定了自定义信任的CA证书,同时你的服务器证书的主机名标识是匹配的。而Flutter之前因为没启用HttpOverrides,一直用系统默认的信任链,导致证书验证失败。

内容的提问来源于stack exchange,提问作者wxkly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:04:08