Firefox报MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA等证书问题求助
问题:自签名SAN证书在Firefox中无法正常工作,出现PKIX错误
初始错误
错误代码:
MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA
错误描述:未作为信任锚的X.509版本1证书被用于签发服务器证书。X.509版本1证书已被弃用,不应再用于签署其他证书。确认CA证书和服务器证书均为v3版本,但Firefox仍报错。
更新:
删除cert9.db后出现新错误:
错误代码:
MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
已重新将CA证书添加到Firefox信任库,但问题依旧。
我的证书生成步骤
生成证书颁发机构(CA):
openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=Proxy CA" openssl genrsa -out cert.key 2048
生成服务器证书:
openssl req -new -sha256 -key cert.key -config config_file -subj "/CN=hostname" -reqexts SAN -out hostname.csr openssl x509 -req -extfile v3.ext -in hostname.csr -days 3650 -signkey cert.key -set_serial random_string -out hostname.crt
config_file内容:
contents of /etc/ssl/openssl.cnf ..... [SAN] subjectAltName=DNS:hostname
v3.ext内容:
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
问题分析与解决方法
错误根源
- 第一个错误:
req -x509命令默认生成v1版本CA证书,即便你认为是v3,实际未添加v3扩展,导致Firefox判定为废弃的v1证书。 - 第二个错误:服务器证书用
-signkey cert.key做了自签名,而非用CA证书签发,所以Firefox识别为自签名证书,不认可你导入的CA信任。
正确生成流程
1. 生成v3版本CA证书
创建ca_v3.ext文件:
basicConstraints = CA:TRUE keyUsage = keyCertSign, cRLSign subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer
重新生成CA证书:
openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=Proxy CA" -extfile ca_v3.ext openssl genrsa -out cert.key 2048
2. 用CA证书签发服务器证书
修改服务器证书签发命令,替换自签名参数为CA签名:
openssl req -new -sha256 -key cert.key -config config_file -subj "/CN=hostname" -reqexts SAN -out hostname.csr openssl x509 -req -extfile v3.ext -in hostname.csr -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -out hostname.crt
注:-CAcreateserial会自动生成序列号文件,比手动指定更可靠。
3. 重新配置Firefox信任
- 关闭所有Firefox窗口
- 删除
cert9.db(路径通常为~/.mozilla/firefox/[你的配置文件夹]/) - 重启Firefox,导入新的
ca.crt,勾选「信任此CA识别网站」
验证证书版本
生成后检查版本,确保均为v3:
# 检查CA证书版本 openssl x509 -in ca.crt -text -noout | grep Version # 检查服务器证书版本 openssl x509 -in hostname.crt -text -noout | grep Version
内容的提问来源于stack exchange,提问作者hussamhussam
相关产品推荐
相关产品推荐

