apache 从 2.2 升级到 2.4 后,Subversion 出现 SSL 错误

apache 从 2.2 升级到 2.4 后,Subversion 出现 SSL 错误

将 Debian 服务器从稳定版升级到测试版后,svn 客户端无法再连接到 subversion 服务器。

我们的 svn 客户端需要使用客户端证书进行连接,而 Subversion 服务器托管在 Apache 下。Subversion 从 1.6.17 升级到 1.7.13。Apache2 从 2.2.22 升级到 2.4.6。

svn客户端在更新的时候收到如下错误信息:

Updating '.':
svn: E175002: Unable to connect to a repository at URL 'https://myserver/svn/myproject/dev/trunk'
svn: E175002: OPTIONS of 'https://myserver/svn/myproject/dev/trunk': SSL handshake failed: SSL error: An unexpected TLS packet was received. (https://myserver)

在 Apache 服务器上,仅显示一条消息,位于 other_vhosts_access.log 中:

myserver.localdomain:80 127.0.0.1 - - [06/Jan/2014:19:02:57 -0500] "\x16\x03" 400 0 "-" "-"

以下是 Subversion 虚拟目录的配置:

<VirtualHost *:443>
   ServerName myservername
   SSLEngine On
   SSLCertificateFile      /etc/apache2/ssl/myservercert.crt
   SSLCertificateKeyFile   /etc/apache2/ssl/myservercert.key
   SSLCACertificateFile    /etc/apache2/ssl/myserver-CA.crt
   SSLVerifyClient require
   SSLVerifyDepth 10
   <Location /svn >
      SSLRequireSSL
      SSLRequire %{SSL_CLIENT_S_DN_C} eq "XX" and %{SSL_CLIENT_S_DN_ST} eq "XX" and %{SSL_CLIENT_S_DN_O} eq "XX" and %{SSL_CLIENT_S_DN_OU} eq "XX"
      DAV svn
      SVNParentPath /root/subversion/root
      Require valid-user
      AuthType Basic
      AuthName "Subversion Repository"
      AuthUserFile /root/subversion/.apache-htpasswd
      AuthzSVNAccessFile /root/subversion/.apache-auth
   </Location>
</VirtualHost>

有人能指出解决这个问题的正确方法吗?谢谢。

答案1

当将 Apache 从 2.2 升级到 2.4 时,sites-enabled 下的文件链接必须以 .conf 结尾,而过去它们不需要特定的文件扩展名。

如果 sites-available 下的站点配置文件名没有扩展名 .conf,那么您可能需要重命名它,然后运行:a2ensite filename 将其添加到 sites-enabled。

例如,如果你的站点配置文件名为 MySite:

cd /etc/apache2
rm sites-enabled/MySite
cd sites-available
mv MySite MySite.conf
a2ensite MySite
apache2ctl configtest
apache2ctl restart

因此,上述问题是由于 Apache2 服务启动时没有获取我的站点配置造成的。

答案2

我强烈怀疑 Apache 正在端口 443 上应答 HTTP,而不是 HTTPS。使用 TELNET 连接到端口 443 并执行,GET /我怀疑您会得到响应。如果得到响应,则说明 Apache 正在监听普通的 HTTP。

我不熟悉 Debian 配置技巧,因此我很难告诉你从哪里开始查找。如果你发现在端口 443 上收到未加密的 HTTP,那么很可能是服务器mod_ssl由于某种原因未加载。

相关内容