我的情况如下:在我们的公司网络中,使用公司自己颁发的一种特殊 SSL 证书。每次我在 Firefox 中通过 https 打开网站时,都会显示一个警告监视器,显示“sec_error_unknown_issuer”。证书详细信息中显示此特定证书由我的公司颁发,有公司地址和名称等。这非常烦人,因为每次访问 SSL 加密网站时,我都需要为无效证书添加例外。一种可能的解决方案是放弃 SSL 并在可能的情况下使用纯 http(我猜如果网络管理员自己处理证书,SSL 和无 SSL 之间没有区别),但有些网站没有 SSL 就无法运行,例如银行登录页面。所以我认为更好的想法是将证书添加到 Firefox 受信任的颁发机构列表中。为此,我需要有一个颁发机构证书。我尝试使用以下 Openssl 命令获取它,但无济于事:
openssl s_client -connect 主机名:端口
它显示一个证书,但随后就停止了,因为无法验证某些证书,而且证书不正确,因为当我尝试导入证书时,Firefox 显示错误。我现在不记得确切的消息了,但它是“此证书不是有效的授权证书”之类的。
我也尝试过使用Wireshark,但效果不太好,没能抓取到我想要的信息。最后的办法是,在Firefox中禁用SSL证书验证是不可能的。
那么,我怎样才能获取此本地颁发机构证书,并将其导入 Firefox,并不再被错误消息所困扰?
答案1
如果您使用的是公司网络或信任颁发者,则必须将给定的证书导入钥匙串并使其对您的 SSL 连接可信。要使其适用于所有网址,它必须是根证书颁发机构。
在 Chrome 中,您基本上可以单击挂锁图标,然后单击“连接”选项卡,这样您就可以看到证书信息,该信息应包含根(顶部)证书中的 CRT 链接。
下载证书文件后或通过以下命令:
openssl s_client -connect example.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > foo.crt
打开该文件并在受信任的设置中将其设置为信任。
在 OS X 上,您可以双击文件或将其拖放到 Keychain Access 中,这样它就会出现在登录/证书。然后双击导入的证书并将其设置为始终信任 SSL(如下所示)。
现在所有 HTTPS/SSL 网站都应该正常运行。
答案2
添加-showcerts
选项以使 s_client 打印整个链。
答案3
我今天遇到了同样的问题,每次我尝试连接一个网站时,所有 mozilla 产品都会要求添加证书的权限。而且该证书仅适用于指定的网站。
为了将您的公司证书添加到受信任的颁发机构,请转到控制面板 -> Internet 选项 -> 内容 -> 证书 -> 受信任的根证书颁发机构
然后会出现一个列表。找到您的公司证书,然后使用向导的默认选项将其导出到文件。
之后打开 Firefox,选项 -> 高级 -> 查看证书 -> 权限 -> 导入
选择您已导出的文件,并检查所有信任选项。
现在您将能够连接所有网站。
答案4
如果您无法获取公司 Web 代理的证书,请在浏览器和公司代理之间添加您自己的本地代理(例如 Burp Suite 代理),并在浏览器中安装本地代理的证书。配置浏览器以使用本地代理(选项 -> 高级 -> 网络 -> 连接设置)。然后,浏览器只会看到由受信任的本地代理颁发的证书,并且您在浏览器中不会看到任何错误。