9

我正在尝试访问我已经使用了一段时间的 SVN 服务器,但现在我收到了这个错误:

SSL 握手失败:SSL 错误:已收到 TLS 警告警报。

在其他机器上(所有这些都在 CentOS 上完成),我以前没有访问过服务器,系统提示我 (R)eject、临时接受 (t) 或永久接受 (p)?提供证书的选项,然后我就可以成功连接。我的结论是旧证书被缓存了,我需要获取一个新证书,但是,我无法找到清除它的方法,并且在运行 svn 时再次收到此提示。

我确实阅读了许多与此类似的问题,这导致我清除/删除了我的 .subversion 文件夹,但即使在那之后它仍然不会提示我有关证书的信息,并且它继续因上述错误而失败。有任何想法吗?

4

2 回答 2

8

您没有指定遇到此问题的 CentOS 版本。

EL 6 附带的颠覆与 GnuTLS 相关联,这是与与 OpenSSL 相关联的旧版本的变化。

您可以使用 ldd 进行测试:

$ ldd /usr/bin/svn | grep ssl
$ ldd /usr/bin/svn | grep tls
        libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0x0030f000)
$

GnuTLS 库在某些情况下更为特殊。最常见的两种:

  1. 远程站点使用像 DES 这样的弱密码。
  2. 远程站点的证书名称与您指定的名称不匹配。

在名称不匹配的情况下,您可以通过使用 IP 地址而不是名称来回避问题。如果主机是 foo.com 并且 IP 地址为 1.2.3.4,您可以尝试以下方式:

svn switch --relocate https://foo.com/my-repo-name https://1.2.3.4/my-repo-name

您还可以尝试从源代码构建 subversion 并在配置中使用 openssl 而不是 gnutls。

于 2012-09-06T20:16:54.803 回答
2

这个问题可以通过编辑你的 Apache 配置来解决。该ServerName指令应设置在VirtualHost块内,例如:

<VirtualHost *:443>
  ServerName mywebsite.com
</VirtualHost>

ServerName应该匹配 CN 或 SSL 证书上的替代名称之一。

于 2014-02-26T20:19:25.063 回答