svn不会接受证书,尽管s_client会这样做

时间:2010-11-03 17:18:55

标签: svn ssl ssl-certificate

当对我们的svn服务器运行svn时,我收到此错误(域名和指纹编辑):

Error validating server certificate for 'https://svn.example.org:443':
  - The certificate has expired.
  - The certificate has an unknown error.
Certificate information:
  - Hostname: mail.example.org
  - Valid: from Fri, 24 Sep 2010 13:05:10 GMT until Wed, 09 Feb 2011
15:24:52 GMT
  - Issuer: 07969287, http://certificates.godaddy.com/repository,
GoDaddy.com, Inc., Scottsdale, Arizona, US
  - Fingerprint: 00:e5:....
(R)eject or accept (t)emporarily? t

所以有一个错误说它已经过期了,几行之后就说有效期是2011年。然后有一个未知的错误。这是svn 1.6 - 旧版本有永久接受选项。

我还尝试运行openssl s_client来检查证书:

openssl s_client -host svn.example.org -port 443 -verify 5 -CApath /etc/ssl/certs

除了其他输出,我得到:

New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 7604...
    Session-ID-ctx: 
    Master-Key: 22AB...
    Key-Arg   : None
    Compression: 1 (zlib compression)
    Start Time: 1288804434
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

这表明SSL已正确设置。

我唯一能想到的是我们使用的是多域证书,mail.example.org是主题CN和svn.example.org列在subjectAltName部分。

这影响了很多人,我不希望我们的客户必须处理这个问题,所以我真的很喜欢这个错误的解决方案,而不仅仅是为我修复它。任何帮助表示赞赏。

修改:我可以在我的网络浏览器中加载https://svn.example.org/并且它不会抱怨。我可以通过Web浏览器查看证书层次结构,但链中没有任何证书已过期。

我按照Bruno的建议检查了ldd svn,它与libgnutls链接,而openssl与libssl链接。是否有使用libgnutls的s_client命令的等价物?

编辑2:(因此很容易找到以后的人)。 svn使用gnutls库而不是ssl库,而gnutls比ssl更严格。因此,为了查看错误,您需要使用gnutls-cli。就我而言,gnutls didn't like the order of certificates,尽管他们都在那里。有关更多详细信息,请参阅之前的链接。

1 个答案:

答案 0 :(得分:1)

我不确定它是否能解决您的问题,但您可以在ssl-authority-files中配置~/.subversion/servers选项(如果您愿意,可以将其限制为某些主机)。< / p>

此外,您的svn版本可能与OpenSSL的另一个库链接,用于其SSL / TLS堆栈,例如GnuTLS(这应该在svn二进制文件上使用ldd可见)

(您是否检查过CA证书是否已过期,而不是服务器证书本身?)