0
为什么openssl pkcs12导出添加额外的根锚证书,在Mac OS X上复制服务器证书
[最初发布在Slack Overflow上,但评论主题抱怨不适当的场地。] 我们正在努力从StartCom SSL证书切换到Let's Encrypt,并尝试将其设置为自动使用macOS Server + Apache HTTPD。从命令行工具(security import),macOS Server不接受直接.pem文件 - 您必须为其提供一个.p12文件,从中提取.pem要在Apache中配置的文件。烦人而无意义,但这是我们现在必须要忍受的。 为了创建这个.p12文件,我们必须执行这个命令: openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -in /etc/letsencrypt/live/example.com/cert.pem \ -certfile /etc/letsencrypt/live/example.com/chain.pem \ -out /etc/letsencrypt/live/example.com/example.com.p12 这就是它变得怪异的地方。输出example.com.p12文件有两次example.com证书,然后是Let's Encrypt中间CA证书,然后是不必要的自签名DST根CA X3锚证书(默认情况下所有浏览器都安装在其中),最后是私钥。结果是Apache SSL握手包括服务器证书两次,中间CA证书和根证书(它不应该发送),这会导致Qualys SSL Labs测试人员发出警告。 我们查看了内部cert.pem,它只包含服务器证书(只有一次)。chain.pem仅包含中间CA证书(不是根锚或服务器证书)。privkey.pem仅包含私钥。因此openssl pkcs12 -export,重复服务器证书,然后进入查找根锚证书并添加它的额外步骤。 如果我们在openSUSE Linux上运行相同的命令,则输出.p12文件只有服务器证书(一次),中间CA证书和私钥。没有根锚。 我们尝试了以下变化,并看到输出没有差异: openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -in /etc/letsencrypt/live/example.com/fullchain.pem …