一些电脑,但不是大多数,拒绝从我的networking服务器的SSL证书。 问题似乎是一些电脑拒绝CA证书。 这个问题似乎在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.conf
通过stunnel在我的服务器上处理SSL:
cert = $CODEZ/admin/production/proxy/asana.pem CAfile = $CODEZ/admin/production/proxy/sf_bundle.crt pid = client = no [<forwarded port>] accept = 443 connect = 8443
任何想法我可能做错了什么?
CAFile
选项将CAconfiguration为用于客户端身份validation证书; 这不是你想要的。
相反,您希望在cert
选项中创build文件以包含整个适用的证书链。 您需要保存该文件的备份副本,然后创build一个新副本; 基本上结合了这两个文件,格式如下:
-----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-----
这将迫使stunnel向客户展示完整的证书链。
又一个消息 openssl s_client
命令对于testing证书链问题和检查您的服务如何呈现其证书非常有用。
编辑:好吧..证书包的链是三深,但信任链看起来深深。 有什么不对的
顶级证书(“Starfield安全证书颁发机构”)由名为“Starfield Class 2证书颁发机构”的发行机构签署,指纹以ad7e1c28
。但是证书中的第二个证书与第一个证书的签署人完全相同,这应该是完全相同的证书,从363e4734
开始的指纹和10年前的到期date。 然后第三个(根)证书是包含的中间证书的签署者..但这两者都没有任何关系的第一个!
如果没有意义的话,别担心。 总结:马虎的工作,有人认真地丢弃了这个证书包的球。 那么最好的办法就是从浏览器中以base-64格式导出文件,这个浏览器可以成功validation这个链,把它们粘贴成我从那里列出的格式。
由于这是一个混乱的混乱,没有你自己的错误,我猜你的DNS名称,并抓住证书,我认为这应该是你需要的完整链: http : //pastebin.com/Lnr3WHc8
Qualys SSLLabs在更改后检查您的configuration非常方便。
https://www.ssllabs.com/ssldb/analyze.html
检查你有
对于任何其他人面临这个问题,谢恩的职位做了伎俩,但我也不得不包括CAFile。 另外,在创build链时,请确保按照本文中的文件命名说明进行操作
要确定您应该使用的文件名,您可以使用OpenSSL附带的c_hash程序(位于
/usr/local/ssl/misc
目录中):
c_hash some_certificate.pem
a4644b49.0 => some_certificate.pem
所以,在上面的情况下,你
a4644b49.0
文件重命名为a4644b49.0
。
(注意,这是一个零,而不是字母'O',在文件名中的点。)如果您没有
c_hash
程序,则可以运行相应的OpenSSL命令来确定散列值:
openssl x509 -hash -noout -in some_certificate.pem
a4644b49
如果你正面临这个问题,你正在尝试使用android cordova的websockets,一定要手动添加wss到你的cordova-whitelist的东西,因为*只包括http和https。