如何在Mozilla Firefox中无需添加服务器例外即可使用自签名证书?
我还没找到不用添加服务器例外,就能在Mozilla Firefox里通过自签名SSL证书建立有效SSL/TLS连接的办法。像Microsoft Edge、Google Chrome这类主流浏览器,都允许把自签名证书导入为「受信任根证书颁发机构」,但Firefox好像做不到。
有没有无需添加服务器例外,就能在Firefox里使用自签名SSL证书的方法?
举个例子:访问自签名证书的站点时,在Chrome里只要把证书导入「受信任根证书颁发机构」并重启浏览器,就能避开「连接不安全」的警告,Edge也支持这个操作。但如果尝试在Firefox的「证书管理器」的「颁发机构」中添加该证书,会弹出错误:
This is not a certificate authority certificate, so it can’t be imported into the certificate authority list.(这不是证书颁发机构证书,无法导入到证书颁发机构列表中)
这个错误很合理,因为该站点的SSL证书把Basic Constraint设为了CA:False。我之前试过把这个值改成CA:True,确实能导入到Firefox的「颁发机构」里,但导入后Firefox会报错MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY,最后还是得加服务器例外才能用。
可行方法:用自签名CA签发服务器证书
要在Firefox里无需添加例外就能用自签名证书,正确的思路是绕开直接使用自签名服务器证书,而是创建一个自签名CA证书,再用它签发服务器证书:
- 生成自签名CA证书:必须确保证书的
Basic Constraints字段设为CA:True,同时开启keyCertSign扩展权限(用于签发其他证书)。 - 导入并信任CA证书:把这个CA证书导入Firefox的「证书管理器」→「颁发机构」分类下,在导入过程中勾选「信任该CA来识别网站」等相关信任选项。
- 用CA签发服务器证书:基于这个CA生成服务器证书,服务器证书的
Basic Constraints设为CA:False,并且一定要在Subject Alternative Name(SAN)里包含你要访问的目标域名(这是现代浏览器验证的必填项)。
完成以上步骤后,Firefox会认可这个由受信任CA签发的服务器证书,正常建立SSL连接,不需要添加任何服务器例外。
为什么直接用自签名服务器证书行不通?
- Firefox的证书验证逻辑严格区分CA证书和终端实体证书:自签名的服务器证书属于终端实体证书(标记
CA:False),本身就不符合受信任CA的要求,所以无法导入到CA列表; - 强行修改服务器证书的
CA:True标记后,Firefox会检测到这个本该用作签发的CA证书被当成了终端实体证书使用,触发MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY错误——这是Firefox的安全防护机制,防止CA证书被滥用做终端实体证书。
内容的提问来源于stack exchange,提问作者aloysius72

