我正在尝试在 mod_dav_svn 提供的 SVN 存储库上强制使用 SSL (https)。这是我所拥有的:
<Location /svn/projectname>
DAV svn
SVNPath /var/repo/projectname
Require valid-user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-projectname
#here's what I tried (didn't work)
SSLCipherSuite HIGH:MEDIUM
</Location>
但是,当我通过 http 登录时,我没有被重定向到 https;它停留在http中。为什么以上不起作用?如何让这个 https 重定向工作?
我已经看到有关使用 mod_rewrite 的建议,例如:
# /dir/.htaccess
RewriteEngine on
RewriteCond %{SERVER_PORT}!443
RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
但是,我不明白这是做什么的,所以我害怕使用它。另外,它看起来更像是一个丑陋的黑客而不是正确的解决方案。
它不是黑客。这是一个快速的细分:
我们使用稍有不同但基本相同的语法。我们不是检查接收请求的端口,而是检查 HTTPS 没有被使用。我们使用
%{HTTP_HOST}
环境变量而不是硬编码主机名。我更喜欢这种方法,因为它在 Apache 监听非标准端口时有效。如果您的站点位于代理后面,则使用可能会出现问题
%{HTTP_HOST}
,但我们尚未尝试过。尝试
我们用名称虚拟主机定义一切。然后,如果您在
<Virtualhost *:80>
定义范围内,则不必检查它是否不是端口 443,您已经知道它不是。然后,您可以使用以下规则将所有达到 80 的内容强制为 443:除了已经提到的重定向之外,您可能希望将SSLRequireSSL 指令添加到您的Location容器中,如果您不使用 HTTPS 连接,它将拒绝访问。但是,仅在 *:443 上侦听的 SVN 站点的 VirtualHost 解决方案更优雅。
假设 Apache 2:
除了从外观上实际启用 SSL 之外,您已经完成了所有工作。使用“SSLEngine”、“SSLCertificateFile”和“SSLCertificateKeyFile”命令,如下所述:
您需要为 SSLCertificate*File 命令生成和/或购买 PKI 文件(SSL 证书和相关的私钥文件)。
http://www.debianhelp.co.uk/apacheinstall.htm
这说:
如果您的网站现在支持 SSL,而您只是想在 svn 子目录上强制使用 SSL,您可以尝试以下操作:
这将与上述相同,但仅适用于 subversion 目录下的内容。
您想要做的是强制重定向到
https
常规网络连接。重写规则似乎实现了这一点。这不是一个丑陋的黑客,而是正确的做法。您当前的配置不会强制重定向。在 Location 块中使用 SSLRequireSSL