使用SVN进行SSL握手失败

时间:2012-07-25 15:19:26

标签: svn centos ssl

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

  

SSL握手失败:SSL错误:已发生TLS警告警报   接收。

在其他机器上(所有这些都在CentOS上完成),我之前没有访问过服务器,我会被提示(R)弹出,暂时接受(t)或接受(p)永久性?提供证书的选项,然后我能够成功连接。我的结论是旧证书被缓存,我需要获得一个新证书,但是,我无法找到清除它的方法,并在运行svn时再次收到此提示。

我确实读过很多类似的问题,这导致我清除/删除我的.subversion文件夹,但即便如此,它仍然不会提示我有关证书的信息,并且上述错误仍然会失败。有什么想法吗?

2 个答案:

答案 0 :(得分:8)

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

EL 6附带的Subversion与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. 远程站点的证书名称与您指定的名称不匹配。
  3. 如果名称不匹配,您可以使用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。

答案 1 :(得分:2)

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

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

ServerName应与您的SSL证书上的CN或其他名称匹配。