Chromium报ERR_SSL_SERVER_CERT_BAD_FORMAT错误的技术求助
这问题我之前排查过,核心原因是你的服务器证书是X.509 Version 1(从输出里的Version: 1 (0x0)能看到),但你给它添加了X509v3扩展字段——这直接违反了X.509标准:v1证书本身不支持扩展字段,Chromium/Chrome对标准的执行比openssl s_client严格得多,所以直接判定证书格式无效,抛出ERR_SSL_SERVER_CERT_BAD_FORMAT。
而openssl s_client对这种"混合格式"的兼容性更宽松,它会忽略版本与扩展的不匹配问题,正常读取扩展并完成证书链验证,所以你用它测试时能顺利通过。
要修复这个问题,你需要重新生成符合标准的X.509 Version 3服务器证书,具体操作如下:
准备OpenSSL配置文件
创建或修改一个openssl.cnf文件,添加v3_cert段来定义你需要的扩展字段,示例内容:[v3_cert] basicConstraints = CA:FALSE subjectAltName = DNS:tseng.l5.ca,DNS:localhost subjectKeyIdentifier = hash重新签署服务器证书
用你的CA证书和密钥,基于之前的CSR(或者重新生成CSR)签署Version 3证书:openssl x509 -req -in your-server.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out new-https-server.crt -days 730 -extensions v3_cert -extfile openssl.cnf(如果没有现成的CSR,先重新生成一个:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out your-server.csr,注意填写正确的Subject信息)验证新证书版本
生成后用命令确认证书版本:openssl x509 -text -in new-https-server.crt你应该看到
Version: 3 (0x2)的输出,同时扩展字段也会正常显示。部署新证书
将新生成的new-https-server.crt和对应的私钥替换到你的HTTPS服务器配置中,重启服务后再用Chromium/Chrome访问测试,应该就能正常加载了。
内容的提问来源于stack exchange,提问作者tzengia

