使用SVN进行SSL握手失败

ukh*_*hat 9 svn ssl centos

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

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

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

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

小智 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)
$
Run Code Online (Sandbox Code Playgroud)

在某些情况下,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
Run Code Online (Sandbox Code Playgroud)

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

  • 我在CentOS 6.3上.我做了一些非常接近IP建议的事情而没有看到这篇文章,它确实帮助我解决了这个问题.我无法弄明白为什么.感谢您提供有关不同GnuTLS库的解决方案+背景信息.这有助于澄清一些谜团. (2认同)