如何确保 stunnel 发送所有中间 CA 证书?

Jac*_*ahl 13 ssl ssl-certificate stunnel

有几台计算机(但不是大多数)拒绝了来自我的网络服务器的 SSL 证书。问题似乎是某些计算机拒绝了 CA 证书。当 Mac OS X 10.6 未完全更新时,该问题似乎会出现在 Mac OS X 10.6 上。

根据http://www.sslshopper.com/index.php?q=ssl-checker.html#hostname=beta.asana.com - 没有问题。

根据http://certlogik.com/sslchecker/,没有发送中间证书。

我的证书来自 Starfield Technologies,我sf_bundle.crt从这里使用:certs.godaddy.com/anonymous/repository.seam

我正在通过 stunnel 在我的服务器上处理 SSL,如下所示stunnel.conf

cert = $CODEZ/admin/production/proxy/asana.pem
CAfile = $CODEZ/admin/production/proxy/sf_bundle.crt
pid =
client = no

[<forwarded port>]
accept = 443
connect = 8443
Run Code Online (Sandbox Code Playgroud)

任何想法我可能做错了什么?

Sha*_*den 17

CAFile选项将 CA 配置为用于客户端身份验证证书;这不是你想要的。

相反,您希望在cert选项中制作文件以包含整个适用的证书链。您需要保存该文件的备份副本,然后创建一个新副本;基本上结合了两个文件,格式如下:

-----BEGIN CERTIFICATE-----
(certificate from asana.pem file pasted here)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(intermediate certificate here; copy-paste the top chunk from the bundle)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root certificate here; copy-paste the bottom chunk from the bundle)
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

这将强制 stunnel 向客户端呈现完整的证书链。

另一个花絮;该openssl s_client命令对于测试证书链问题和检查您的服务如何呈现其证书非常有用。

编辑: 好的..那个证书包的链是三层深的,但信任链看起来是两层深的。有什么不对的。

顶级证书(“Starfield Secure Certification Authority”)由名为“Starfield Class 2 Certification Authority”的颁发ad7e1c28者签名,指纹以..开头,但捆绑中的第二个证书与第一个证书的签名者命名完全相同,后者应该是完全相同的证书,指纹以 开头363e4734,到期日期早于 10 年。然后第三个(根)证书是包含的中间证书的签名者..但这两个都与第一个没有任何关系!

如果这没有意义,请不要担心。总结:草率的工作,有人认真地放弃了构建这个证书包的球。那么,最好的办法是从成功验证链的浏览器中导出 base-64 格式的文件,并将它们粘贴到我从那里列出的格式中。

由于这不是您自己的错,这是一个令人困惑的混乱,我猜测您的 DNS 名称并获取了证书,我认为这应该是您需要的完整链:http : //pastebin.com/Lnr3WHc8