当前位置:  开发笔记 > 后端 > 正文

无法理解SSL证书链验证

如何解决《无法理解SSL证书链验证》经验,为你挑选了2个好方法。

我的应用程序使用SSL与服务器安全通信,并且无法验证证书链.链看起来像这样:

Entrust.net安全服务器认证机构 - > DigiCert Global CA - >*.ourdomain.com

我们正在使用从Mozilla取出的证书商店.它包含Entrust.net证书,但不包含DigiCert Global CA证书.

我的理解是,只要根权限是,但不必信任中间权限,但验证失败:

% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate

那么我需要明确信任DigiCert Global CA才能通过验证吗?这似乎是错的.但是你告诉我!

编辑:我现在明白证书文件需要预先提供给OpenSSL.像这样的东西有效:

% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK

这允许我提供DigiCert CA的副本而不明确说"我相信它",整个链仍然需要验证.

但是,像Firefox这样的浏览器肯定不会附带它所需要的每个证书的副本.总会有新的CA,重点是使用根证书的安全性来确保所有中间CA都有效.对?那么,如何这项工作?它看起来真的很傻吗?



1> David..:

必须在Web服务器上安装中间证书以及您自己域的证书.上周我遇到了同样的问题...... Firefox似乎比其他浏览器更挑剔.


啊啊......好的 感谢David的见解.对于那些来自谷歌的人来说,配置apache的关键词是SSLCertificateChainFile.看到这个(来自DigiCert本身!)http://www.digicert.com/ssl-certificate-installation-apache.htm

2> 小智..:

以下是验证来自Web服务器的证书的正确方法

客户端维护可信CA ROOT证书的列表

Web服务器应返回以下服务器证书 - 必需

中级证书 - 必需的ROOT CA证书 - 不需要/可选

当客户端连接到服务器时,它从服务器获取服务器证书和中间证书.然后,客户端从服务器证书构建信任链,通过中间证书到其信任的CA ROOT证书之一.ROOT证书总是自签名的 - 这就是链条停止的地方.

这是一个使用openssl测试Web服务器证书的简单命令

openssl s_client -CAfile  -quiet -showcerts -connect IP:PORT

在虚拟主机的情况下,在同一IP上提供多个证书:PORT,可以使用服务器名称指示(SNI)-servername .否则,将发送默认证书.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有