10

由于 SSL 握手错误,我无法访问 svn 存储库。这是我得到的输出

$ svn ls https://example.edu:40657/folder
svn: OPTIONS of 'https://example.edu:40657/folder': SSL handshake failed: SSL error code -1/1/336032856 (https://example.edu:40657)

这在存储库移动到另一台服务器后开始发生。还颁发了新的安全证书。

我已经看到了这里提出的问题(在 OS X 10.7 上出现“SSL 错误代码 -1/1/336032856”的握手失败)并阅读了常见问题解答,但我的 ssl 版本是 1.0.1c。我认为这是一个客户端问题,因为没有其他(linux)机器出现这个问题。我已经删除了我的 ~/.subversion 文件夹并在我的钥匙串中删除了任何标记为 svn 或 ssl 的东西,但仍然没有运气。我的猜测是仍然有安全密钥存储在我不知道的地方。有任何想法吗?

4

5 回答 5

4

尝试使用自签名证书签出服务器上的存储库时,我也遇到了此错误。

你必须满足2个要求:

  • 证书中的 CN(通用名称)应与您在 repo URL 中使用的主机名匹配
  • 在处理请求的虚拟主机中配置的 ServerName 也应该与 URL 匹配。

后者可能就足够了。

我使用的是来自 Debian 的 default-ssl apache 配置,它没有设置任何特定的 ServerName(因此使用了全局 Apache 配置中的主 ServerName)。通过服务器的真实主机名访问存储库是有效的(您第一次尝试连接时只会收到“证书不是由受信任的机构颁发”警告),但尝试通过任何其他别名访问它(即使是通过它的别名) IP) 因此错误而失败。

所以这里的解决方法是询问服务器管理员真正的 ServerName 是什么(它可能列在 404 错误页面的页脚中)或要求他相应地设置它。

例子:

$ svn co https://alias.or.ip.of.the.server.real.hostname/svn/test
svn: OPTIONS of 'https://alias.or.ip.of.the.server.real.hostname/svn/test': SSL negotiation failed: SSL    error code -1/1/336032856 (https://alias.or.ip.of.the.server.real.hostname)

$ svn co https://real.hostname.of.the.server/svn/test
Error validating server certificate for 'https://real.hostname.of.the.server:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: real.hostname.of.the.server
 - Valid: from Mon, 23 Sep 2013 10:55:49 GMT until Thu, 21 Sep 2023 10:55:49 GMT
 - Issuer: real.hostname.of.the.server
 - Fingerprint: 61:81:26:51:53:26:9a:ea:c1:28:b8:6d:22:13:05:8f:81:1a:ed:67
(R)eject, accept (t)emporarily or accept (p)ermanently?

永久存储它,您就可以开始使用了!

于 2013-09-23T11:08:43.360 回答
3

这也可能由于 TLS 使用 SNI ( https://en.wikipedia.org/wiki/Server_Name_Indication ) 而发生。

鉴于您正在使用 Apache 和类似这样的配置

ServerName  my-server
ServerAlias another-name

客户端使用此 URL 连接到您的服务器

svn ls https://svn-server

当客户端使用 SNI 时,它会在握手期间告诉服务器

Btw. I think you are called "svn-server"

服务器仅通过名称“my-server”和“another-name”知道自己,因此它会引发 TLS 警告:

Warning: I am not called "svn-server". That name is unknown to me.

此警告导致握手失败,因为客户端认为发生了不好的事情。

一种解决方案是将客户端使用的名称添加到服务器别名

ServerAlias another-name svn-server

并且不要忘记检查 SSL 证书的“通用名称”或别名是否也与客户端使用的名称匹配。

于 2015-02-20T15:52:00.923 回答
2

非常感谢 Ned Deily,他的评论是正确的。在我下载并构建 subversion 1.7.8 ( http://subversion.apache.org/download/#recommended-release ) 后问题就消失了。我还必须下载并构建 neon ( http://www.webdav.org/neon/ ),以允许 svn 识别 http 和 https 地址。最后,我不得不将苹果提供的 svn 二进制文件移动到另一个文件夹以找到新版本(新版本安装到 /usr/local/bin,而苹果提供的版本安装在 /usr/bin 中)。

于 2013-02-26T16:56:21.253 回答
1

http://subversion.apache.org/faq.html#ssl-error-336032856

当服务器报告的主机名与 SSL 证书中给出的主机名不匹配时,可能会发生这种情况。确保您的服务器配置为ServerNameNameVirtualHost使用正确的值。

于 2014-05-20T08:22:42.367 回答
1

我收到了类似的错误,原因似乎是系统时钟关闭(夏令时刚刚过去,系统时钟关闭了 1 小时)。

于 2016-03-30T14:37:08.210 回答