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


1

我有一个使用OpenSSL 0.9.8zc在Mac上创建的自签名证书(和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开头的每个证书?

Answers:


1

似乎这与Certificate Assistant生成格式错误的证书有关,Opens 0.9.8zd的新的更严格的检查拒绝了这个问题。这来自openssl.org的讨论1

最后,它包含一个修复.pem证书的python脚本,我成功使用了该证书。如果链接断开,我会引用它。

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()

是的,它看起来像个修复程序。我通过脚本同时运行了证书链pem文件和svn证书,最终的openssl验证测试顺利通过。因此,似乎OS X实用程序会在TBS和签名中生成签名算法名称不匹配的证书。现在,我需要查看是否可以获取OS X Server OD来接受更正后的证书。
安东

0

如果您使用的是OS X 10.10.3,那么这刚刚开始发生:

注意:这是一个临时解决方法,看来问题在更上游

由于将OSX升级到10.10.3,我突然开始出现此错误-如您所说,该中断似乎是由它们包含的新版本的OpenSSL(0.9.8zd)引起的。

作为一种解决方法,直到我们深入了解这一点为止,我使用了自制软件的OpenSSL软件包-

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

您可能还需要更新过时的证书,使用rvm只是运行情况

$ rvm osx-ssl-certs update all

但是从它的声音中,你知道你在做什么

还值得注意的是,自制程序建议不要链接openssl,因此一旦在上游进行了整理,您可能会希望运行此命令来清理我们造成的混乱:

$ brew unlink openssl 

谢谢。但我不确定是否要降级OpenSSL。我也不确定这将在上游修复。从OpenSSL更改的描述中,他们确实引入了一些修复程序,这些修复程序使证书验证更加严格,这是一件好事。并且,这些更改保留在以下版本的OpenSSL中。
安东2015年

自制软件安装的openssl是OpenSSL 1.0.2a,2015年3月19日。OS X安装的版本是0.9.8zd。
abradner 2015年

我知道了,您建议升级。我误解了。但是我的证书仍然会被“破坏”,不是吗?
安东

我不确定。实验后取消链接和/或卸载Homebrew openssl将使系统恢复到现有状态。
abradner 2015年

我也发现多个应用程序(如ruby)没有找到新的ssl ca文件,这似乎是我问题的根源。您可以尝试一下吗-您可以在运行脚本之前指定其他ca文件吗?例如, SSL_CERT_FILE=/Library/Caches/Homebrew/openssl--Equifax_CA-Secure.pem <command>在该示例中,我使用的是安装homebrew openssl时安装的pem文件,但您可能可以使用任何有效的ca pem。
abradner

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.