OpenSSL 0.9.8zc -> 0.9.8zd “破坏”了我的证书。

OpenSSL 0.9.8zc -> 0.9.8zd “破坏”了我的证书。

我在 Mac 上使用 OpenSSL 0.9.8zc 创建了一个自签名证书(和 CA)。我使用该证书来保护与 svn 服务器的连接。随着最新的 OS X 更新,OpenSSL 已更新至 0.9.8zd。现在我无法连接到我的服务器,svn 提示“证书验证失败”。

使用 openssl 验证:

openssl verify -CAfile ~/Desktop/Certificates.pem -check_ss_sig  ~/Downloads/svn.pem

我明白了

~/Downloads/svn.pem: /CN=My Open Directory Certification Authority/O=Me/OU=MACOSX OpenDirectory Root CA/emailAddress=webmaster@me
error 7 at 2 depth lookup:certificate signature failure

看起来我的 CA 签名现在被视为“损坏”。我的问题:

  1. 我该如何进一步调查以查明我的证书到底哪里“损坏”,以免重复这个错误?

  2. 有没有办法解决这个问题,除了重新颁发以 CA 开头的每个证书?

答案1

这似乎是证书助理产生的一个问题,它会产生微妙的格式错误的证书,而 openssl 0.9.8zd 的新严格检查会拒绝这些证书。这来自 openssl.org 上的讨论1

它最后包含一个 python 脚本来修复我成功使用的 .pem 证书,我引用它以防链接坏了......

from pyasn1.codec.der import decoder, encoder   
from pyasn1_modules import pem, rfc2459

cert_der = pem.readPemFromFile(open("RabbitMQ_Test.pem", "r"))
        cert, _ = decoder.decode(cert_der, asn1Spec=rfc2459.Certificate())

cert.setComponentByName("signatureAlgorithm",
                                cert.getComponentByName("tbsCertificate").
                                getComponentByName("signature"))

fixed_cert_pem = open("RabbitMQ_Test_Fixed.pem", "w")
fixed_cert_pem.write("-----BEGIN CERTIFICATE-----\n")
fixed_cert_pem.write(encoder.encode(cert).encode("base64"))
fixed_cert_pem.write("-----END CERTIFICATE-----\n")
fixed_cert_pem.close()

答案2

如果你使用的是 OS X 10.10.3,并且刚刚出现以下情况:

注意:这只是一个临时解决办法,问题似乎出在更上游的地方

我在将 OSX 升级到 10.10.3 后突然出现此错误 - 正如您所说,似乎此错误是由他们所包含的新版本的 OpenSSL (0.9.8zd) 引起的。

在我们彻底解决这个问题之前,我利用了 Homebrew 的 OpenSSL 包来解决这个问题 -

$ brew update
$ brew install openssl
$ brew link openssl --force 

你可能还需要更新过期的证书,使用 rvm 只需运行

$ rvm osx-ssl-certs update all

但听起来你知道你在那里做什么

值得注意的是,Homebrew 建议反对链接 openssl,因此一旦上游解决了这个问题,您可能需要运行它来清理我们造成的混乱:

$ brew unlink openssl 

答案3

当我尝试使用客户端和服务器证书连接到在 10.10.3 上运行的 Apache 服务器时,我遇到了类似的问题。python 脚本在 SSL 服务器证书上工作,以供 Apache 使用,但 Safari 仍然无法使用钥匙串中的客户端证书连接到服务器;Apache 服务器拒绝了客户端证书。

我必须导出客户端证书,在其上使用 python 脚本,然后将其重新导入钥匙串以替换原始证书。

相关内容