自从我们的电子邮件提供商更改其SSL证书后,基于单声道的POP3客户端拒绝连接到其安全的POP服务器以下载电子邮件。 其他客户没有问题; 例如Thunderbird和Outlook; 大多数能够检查奇数端口的SSL检查站点除外。 我一直在和这两家提供商合作,试图找出问题所在,但最终都与两者都陷入了僵局,因为我对SSL证书不够了解,无法指导提供商了解故障所在。
在调查过程中,我注意到以下两个命令的输出不同(为了便于阅读,我从输出中删除了证书):
echo "" | openssl s_client -showcerts -connect pop.gmail.com:995
连(00000003)
深度= 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
validation错误:num = 20:无法获取本地颁发者证书
validation返回:0
---
证书链
0 s:/ C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com
我:/ C = US / O = Google Inc / CN = Google互联网pipe理局G2
----- BEGIN CERTIFICATE -----
-----结束证书-----
1 s:/ C = US / O = Google Inc / CN = Google互联网pipe理局G2
我:/ C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
----- BEGIN CERTIFICATE -----
-----结束证书-----
2 s:/ C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
i:/ C = US / O = Equifax / OU = Equifax安全证书颁发机构
----- BEGIN CERTIFICATE -----
-----结束证书-----
---
服务器证书
subject = / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com
发行人= / C = US / O = Google公司/ CN = Google互联网pipe理局G2
---
没有发送客户端证书CA名称
---
SSL握手已经读取了3236个字节并写入了435个字节
---
新的TLSv1 / SSLv3,密码是RC4-SHA
服务器公钥是2048位
支持安全重协商
压缩:无
扩展:无
SSL会话:
协议:TLSv1
密码:RC4-SHA
会话ID:745F84194498529B91B7D9194363CBBD23425446CF2BFF3BF5557E3C6606CA06
会话ID-CTX:
主钥匙:DED1AE0A44609F9D6F54626F4370ED96436A561A59F64D66240A277066322DCD2CCB9A6D198C95F4D2B0C7E6781EECD2
Key-Arg:无
开始时间:1397678434
超时:300(秒)
validation返回码:20(无法获得本地签发人证书)
---
+ OK GOP准备好了来自69.3.61.10 c13mb42148040pdj的请求
DONE
echo "" | openssl s_client -showcerts -connect secure.emailsrvr.com:995
连(00000003)
深度= 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
validation错误:num = 19:证书链中的自签名证书
validation返回:0
---
证书链
0 s:/ serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU =请参阅www.rapidssl.com/resources/cps(c)14 / OU =域控制已validation - RapidSSL(R)/CN=secure.emailsrvr.com
我:/ C = US / O = GeoTrust,Inc./CN=RapidSSL CA
----- BEGIN CERTIFICATE -----
-----结束证书-----
1 s:/ C = US / O = GeoTrust,Inc./CN=RapidSSL CA
我:/ C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
----- BEGIN CERTIFICATE -----
-----结束证书-----
2 s:/ C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
我:/ C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
----- BEGIN CERTIFICATE -----
-----结束证书-----
---
服务器证书
subject = / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU =请参阅www.rapidssl.com/resources/cps(c)14 / OU =域控制validation - RapidSSL(R)/CN=secure.emailsrvr.com
issuer = / C = US / O = GeoTrust,Inc./CN=RapidSSL CA
---
没有发送客户端证书CA名称
---
SSL握手已经读取了3876个字节并写入了319个字节
---
新的TLSv1 / SSLv3,密码是DHE-RSA-AES256-SHA
服务器公钥是2048位
支持安全重协商
压缩:无
扩展:无
SSL会话:
协议:TLSv1
密码:DHE-RSA-AES256-SHA
会议ID:3F4EE3992B46727BE2C7C3E76A9A6A8D64D66EE843CB1BB17A76AE2E030C7161
会话ID-CTX:
主密钥:016209E50432EFE2359DB73AB527AF718152BFE6F88215A9CE40604E8FF2E2A3AC97A175F46DF737596866A8BC8E3F7F
Key-Arg:无
开始时间:1397678467
超时:300(秒)
validation返回码:19(证书链中的自签名证书)
---
DONE
我一直试图了解这是否有意义,因为当提供-CApath选项时,命令不会产生任何错误:
openssl s_client -CApath /etc/ssl/certs -showcerts -connect secure.emailsrvr.com:995
CONNECTED(00000003) depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA verify return:1 depth=0 serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD, OU = 4159320284, OU = See www.rapidssl.com/resources/cps (c)14, OU = Domain Control Validated - RapidSSL(R), CN = secure.emailsrvr.com verify return:1 ...
openssl s_client -CApath /etc/ssl/certs -showcerts -connect pop.gmail.com:995
CONNECTED(00000003) depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = pop.gmail.com verify return:1 ...
直接从GeoTrust下载CAfile证书后,我也可以成功使用-CAfile选项。
尽pipe如此,Fog Creek似乎认为问题在于证书,因为他们已经尝试在mono的Trust商店中添加证书而没有成功。 我不同意他们,但(如上所述),而大多数SSL检查器要么不检查端口995或在尝试期间成功,我发现这个页面 ,产生SSL错误7。
我是否正确解释输出意味着证书没有任何问题?
答案(在security.SE中解释过)是你在链中看到的两个GeoTrust Global CA证书实际上不是同一个证书 ,一个是从另一个派生的。
当GeoTrust全球CA证书首次创build并签名时,计算机/浏览器/应用程序不会在其信任存储区中拥有该证书。
通过使另一个 CA(具有预先存在的信誉和分布)签署GeoTrust根CA证书,所得到的证书(被称为“桥”证书)现在可以由第二CAvalidation,而不具有GeoTrust根CA证书明确地被客户信任。
当Google提供GeoTrust根CA证书的交叉签名版本时,不信任原始证书的客户端只能使用Equifax CA证书来validationGeoTrust–所以Equifax是一种“遗留”信任锚。
当我启用ssl检查pop.gmail.com时,有类似的问题与fetchmail。
我下载了Equifax pem文件,但没有按原样运行,只好运行c_rehash ssl/certs ,它创build了一个带有哈希值的符号链接,然后就工作了。
另外,哈希值也可以通过运行来了解…
openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout | sed -n /^[0-9]/p
在生成和configuration证书时,还应该更新openssl.cnf文件(Debian – /etc/ssl/openssl.cnf ),以指明正确的path,证书名称等,然后可以运行命令并检查它们,而不使用-CApath选项。
因此,远程主机也可以在这种情况下正确检查您的证书。
这里是适当的openssl.cnf部分:
#################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = /etc/ssl