在Fedora的Apache中创建CA证书并签署localhost证书时遇NET::ERR_CERT_COMMON_NAME_INVALID错误的排查与正确操作方法
在Fedora的Apache中创建CA证书并签署localhost证书时遇NET::ERR_CERT_COMMON_NAME_INVALID错误的排查与正确操作方法
嗨,这个问题我之前也踩过坑!你碰到的NET::ERR_CERT_COMMON_NAME_INVALID错误,核心原因是现在主流浏览器已经不再单纯依赖证书的CN(Common Name)字段验证域名匹配,它们要求证书必须包含SAN(Subject Alternative Name)扩展,明确列出要验证的域名(比如localhost)。你之前生成localhost证书时没添加这个关键扩展,所以浏览器才会报错。
下面给你一步步梳理正确的操作流程:
一、确认CA证书有效性(无需重新生成)
你之前生成CA的命令是没问题的,要是不放心可以运行下面的命令验证CA证书信息:
openssl x509 -in myCA.pem -text -noout
只要能看到完整的证书详情,就继续用之前的myCA.key、myCA.pem和自动生成的myCA.srl文件就行。
二、重新生成带SAN扩展的localhost证书请求
- 先创建一个配置文件(比如命名为
localhost-san.cnf),用来指定SAN扩展规则:
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C = pl CN = localhost [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = localhost DNS.2 = 127.0.0.1 # 如果你需要支持IP访问可以加上,可选
- 用这个配置文件生成证书请求和私钥:
openssl req -new -config localhost-san.cnf -keyout localhost.key -out localhost.csr
三、用CA签署带SAN的证书请求
签署时必须指定扩展配置,确保SAN字段被写入最终证书:
openssl x509 -req -in localhost.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out localhost.crt -days 365 -sha256 -extfile localhost-san.cnf -extensions req_ext
四、验证localhost证书的SAN配置
运行下面的命令检查证书是否包含SAN字段:
openssl x509 -in localhost.crt -text -noout | grep -A 3 "Subject Alternative Name"
如果输出类似DNS:localhost, DNS:127.0.0.1的内容,就说明SAN配置成功了。
五、重新配置Apache并重启服务
把新生成的localhost.key和localhost.crt配置到Apache的SSL虚拟主机中,示例配置如下:
<VirtualHost *:443> ServerName localhost DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /你的证书路径/localhost.crt SSLCertificateKeyFile /你的证书路径/localhost.key </VirtualHost>
然后重启Apache服务:
sudo systemctl restart httpd
六、确保CA证书已被系统和浏览器信任
你之前导入CA证书到系统的步骤是正确的,要是没做过可以再执行一遍:
sudo cp myCA.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust extract
另外注意:部分浏览器(比如Chrome)可能需要手动导入CA证书到浏览器信任存储,即使系统已经信任。你可以在浏览器设置里找到「管理证书」,导入myCA.pem并设置为「信任的根证书颁发机构」。
做完这些步骤后再访问https://localhost,应该就不会再出现那个错误了!
备注:内容来源于stack exchange,提问作者jcubic




