【问题标题】:SVN, OSX10.7: SSL handshake failed: SSL error code -1/1/336032856SVN、OSX10.7:SSL 握手失败:SSL 错误代码 -1/1/336032856
【发布时间】:2013-02-25 23:42:48
【问题描述】:

由于 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)

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

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

【问题讨论】:

  • 您使用的是哪个版本的svn?试试which svn 和svn --version。如果它是 Apple 提供的 Xcode 版本,则它没有使用 openssl 1.0.1c,因为 OS X 未附带该版本。
  • 哪个svn返回usr/bin/svn,svn --version返回1.6.17
  • 那无疑是Apple提供的版本,安装新版本的openssl对它没有影响。所以这似乎与您引用的问题相同。

标签: svn ssl osx-lion


【解决方案1】:

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

你必须满足两个要求:

  • 证书中的 CN(通用名称)应与您在存储库 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?

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

【讨论】:

    【解决方案2】:

    由于 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 证书的“通用名称”或别名是否也与客户端使用的名称匹配。

    【讨论】:

      【解决方案3】:

      非常感谢 Ned Deily,他的 cmets 是正确的。在我下载并构建 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)。

      【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 2014-01-14
          • 1970-01-01
          相关资源
          最近更新 更多