AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 77831
Accepted
Joey Adams
Joey Adams
Asked: 2009-10-24 19:35:44 +0800 CST2009-10-24 19:35:44 +0800 CST 2009-10-24 19:35:44 +0800 CST

如何在 Apache 位置强制使用 SSL (https)

  • 772

我正在尝试在 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] 

但是,我不明白这是做什么的,所以我害怕使用它。另外,它看起来更像是一个丑陋的黑客而不是正确的解决方案。

ssl
  • 8 8 个回答
  • 26375 Views

8 个回答

  • Voted
  1. Best Answer
    xentek
    2009-10-30T03:20:45+08:002009-10-30T03:20:45+08:00

    它不是黑客。这是一个快速的细分:

    # Turn on Rewriting
    RewriteEngine on 
    
    # Apply this rule If request does not arrive on port 443
    RewriteCond %{SERVER_PORT} !443 
    
    # RegEx to capture request, URL to send it to (tacking on the captured text, stored in $1), Redirect it, and Oh, I'm the last rule.
    RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
    
    • 9
  2. Michael
    2011-02-25T11:06:12+08:002011-02-25T11:06:12+08:00

    我们使用稍有不同但基本相同的语法。我们不是检查接收请求的端口,而是检查 HTTPS 没有被使用。我们使用%{HTTP_HOST}环境变量而不是硬编码主机名。

      RewriteEngine              On
      RewriteCond     %{HTTPS}   Off
      RewriteRule     .*         https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    

    我更喜欢这种方法,因为它在 Apache 监听非标准端口时有效。如果您的站点位于代理后面,则使用可能会出现问题%{HTTP_HOST},但我们尚未尝试过。

    • 8
  3. davykiash
    2013-09-27T11:33:57+08:002013-09-27T11:33:57+08:00

    尝试

     <Location />
        SSLRequireSSL
     </Location>
    
    • 4
  4. Alex
    2009-10-24T20:21:04+08:002009-10-24T20:21:04+08:00

    我们用名称虚拟主机定义一切。然后,如果您在<Virtualhost *:80>定义范围内,则不必检查它是否不是端口 443,您已经知道它不是。然后,您可以使用以下规则将所有达到 80 的内容强制为 443:

    RewriteEngine On
    RewriteRule ^(.)$ https://www.yourdomain.com/$1 [R,L]
    
    • 2
  5. joschi
    2009-10-25T01:54:46+08:002009-10-25T01:54:46+08:00

    除了已经提到的重定向之外,您可能希望将SSLRequireSSL 指令添加到您的Location容器中,如果您不使用 HTTPS 连接,它将拒绝访问。但是,仅在 *:443 上侦听的 SVN 站点的 VirtualHost 解决方案更优雅。

    • 2
  6. Lee B
    2009-10-25T23:56:55+08:002009-10-25T23:56:55+08:00

    假设 Apache 2:

    除了从外观上实际启用 SSL 之外,您已经完成了所有工作。使用“SSLEngine”、“SSLCertificateFile”和“SSLCertificateKeyFile”命令,如下所述:

    您需要为 SSLCertificate*File 命令生成和/或购买 PKI 文件(SSL 证书和相关的私钥文件)。

    http://www.debianhelp.co.uk/apacheinstall.htm

    # /dir/.htaccess
    1. RewriteEngine on
    2. RewriteCond %{SERVER_PORT}!443
    3. RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
    

    这说:

    1. 启用 URL 重定向和重写支持
    2. 对于所有不通过端口 443 的连接(换句话说,所有非 SSL 连接)
    3. 将它们重定向到https://www.x.com/dir/下的同一页面。因此,如果他们要求http://www.x.com/y,他们将被重定向到 SSL 服务器目录下的 x:https ://www.x.com/dir/x

    如果您的网站现在支持 SSL,而您只是想在 svn 子目录上强制使用 SSL,您可以尝试以下操作:

    1. RewriteEngine on
    2. RewriteCond %{SERVER_PORT}!443
    3. RewriteRule ^/svn/(.*)$ https://www.x.com/svn/$1 [R,L]
    

    这将与上述相同,但仅适用于 subversion 目录下的内容。

    • 1
  7. sybreon
    2009-10-24T20:17:17+08:002009-10-24T20:17:17+08:00

    您想要做的是强制重定向到https常规网络连接。重写规则似乎实现了这一点。这不是一个丑陋的黑客,而是正确的做法。您当前的配置不会强制重定向。

    • 0
  8. shved
    2013-09-24T03:09:08+08:002013-09-24T03:09:08+08:00

    在 Location 块中使用 SSLRequireSSL

    • 0

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve