场景如下。
- 服务器:Ubuntu 12.04--postfix 和 dovecot
- 客户端:Ubuntu 13.10--offlineimap和msmtp
我即将完成 Heartbleed 的恢复工作,并想重新颁发自己的服务器证书。由于它是一台私人服务器,我最初创建了一个 CA,然后使用该 CA 签署了服务器证书。CA 证书已正确安装在我的客户端系统上,服务器密钥和证书已安装在服务器上。
现在,我已经创建了一个 CRL,并推测 CRL 不需要放在服务器上(除非我有其他用户,否则会广泛分发),但需要安装在我的台式机上,这样 OpenSSL 就不会接受原始密钥。因此,我将 CRL 文件复制到 /etc/ssl/crl 中。我使用以下命令创建了链接
ln -s mycrl.pem `openssl crl -hash -noout -in mycrl.pem`.0
结果看起来是合理的。
openssl s_client 可以正常连接到服务器。连接中没有出现任何错误消息,但我预计会出现各种错误,甚至可能拒绝连接。因此,我查看了 openssl 配置文件并将 CRL 文件移动到 /etc/ssl/crl.pem。结果相同:
depth=1 C = US, ST = TX, L = Austin, O = SavanniDGerinel, OU = SavanniDGerinel, CN = SavanniDGerinel CA, name = savannidgerinel.com, emailAddress = [email protected]
verify return:1
depth=0 C = US, ST = TX, L = Austin, O = SavanniDGerinel, OU = SavanniDGerinel, CN = apps.savannidgerinel.com, name = savannidgerinel.com, emailAddress = [email protected]
verify return:1
---
Certificate chain
0 s:/C=US/ST=TX/L=Austin/O=SavanniDGerinel/OU=SavanniDGerinel/CN=apps.savannidgerinel.com/name=savannidgerinel.com/[email protected]
i:/C=US/ST=TX/L=Austin/O=SavanniDGerinel/OU=SavanniDGerinel/CN=SavanniDGerinel CA/name=savannidgerinel.com/[email protected]
... tons more stuff ....
SSL-Session:
... tons of sessions stuff ...
Verify return code: 0 (ok)
我如何强制笔记本电脑上的 OpenSSL 系统真正关注撤销文件?而且,鉴于我确信证书会定期被撤销,为什么我的系统上绝对没有其他 CRL 文件?我如何确定我实际连接的是我认为正在连接的东西?
我不想太过纠结,但为什么安装撤销列表会这么困难呢?我觉得这是一件必须要做的事情。琐碎的为那些一无所知的最终用户,以确保网络安全。
答案1
要使用 OpenSSLs_client
进行 CRL 验证,你必须执行各种未记录的操作,这些操作我在https://superuser.com/questions/742231/s-client-not-failing-on-revoked-certifcate/742289#742289。
除此之外,我不知道是否有任何使用 OpenSSL 的应用程序会进行 CRL 检查,因为我认为您必须在 API 中明确启用这些检查,然后将 CRL 放在意想不到的地方。当然,不会自动下载 CRL。
如果您现在认为所有这些 TLS 内容都已损坏,那么您可能是对的,而且这不仅适用于 OpenSSL。