svn 不接受证书,但 s_client 接受

标签 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 命令等效的命令?

Edit2:(这样方便后来人找)。 svn使用gnutls库而不是ssl库,gnutls比ssl更严格。因此,为了查看错误,您需要使用 gnutls-cli。就我而言,gnutls didn't like the order of certificates ,即使他们都在那里。有关详细信息,请参阅之前的链接。

最佳答案

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

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

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

关于svn 不接受证书,但 s_client 接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089713/

相关文章:

bash - Bash 中的远程 URL 补全

svn - Tortoise SVN - 如何更改上下文菜单?

c - OpenSSL 错误 : unable to verify the first certificate

javax.net.ssl.SSLPeerUnverifiedException : Certificate for <sub. app.domain> 不匹配任何主题备用名称 : [*. app.domain]]

svn - 无法打开.svn/text-base/file.svn-base?

performance - Windows 7 上的 Subversion 慢得让人难以忍受

Apache ssl (443) node.js ssl (8081)。客户端找不到 socket.io.js

python - 使用Python检测SSL哈希算法

Python httplib 禁用证书验证

c - 客户端和服务器之间的 OpenSSL 通信