【问题标题】:HTTP basic auth over SSL基于 SSL 的 HTTP 基本身份验证
【发布时间】:2012-07-19 06:23:06
【问题描述】:

所以,我有一个 secure.domain.com 的 SSL 证书。我在这个域上运行了一些管理 Web 应用程序(git repo 等),使用 .htaccess 基本身份验证进行身份验证。

当我通过 https 与域通信并要求我进行身份验证时,它是验证证书还是在我验证后验证?

同样,如果我通过 http 连接,是否有一种简单的方法可以将请求转发到 https,然后进行身份验证?

【问题讨论】:

    标签: http .htaccess ssl https basic-authentication


    【解决方案1】:

    HTTPS 使用的 SSL 或 TLS 会话在发送任何 HTTP 流量之前构建。这包括认证验证。会话建立后,HTTP 流量就会通过它,从 GET/POST/whatever 开始,然后服务器正常响应,并使用触发登录框的 WWW-Authenticate 标头。

    至于从 HTTP 重定向到 HTTPS,这取决于您使用的服务器。由于它被标记为.htaccess,因此我将假设 Apache,为此,.htaccess 文件中的类似内容应该这样做:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    

    【讨论】:

    • 我可以将它嵌入到文件指令中吗?我只想转发特定页面。谢谢你的回答:)
    • 我对htaccess中的重写规则不是很熟悉(我主要使用linux下的Cherokee,或者windows下的IIS),但我不明白为什么不这样做。请记住,您必须小心使用来自 HTTPS 页面的敏感信息的任何 cookie。像这样的东西:mcgwebdevelopment.com/blog/…
    【解决方案2】:

    当我通过 https 与域通信并要求我进行身份验证时,它是验证证书还是在我验证后验证?

    SSL 是一个独立于 HTTP 协议的层,BASIC 身份验证是 HTTP 协议的一部分。 SSL 握手首先发生在发送任何协议信息之前。根据进行握手的端点以及它们如何验证彼此的证书,它可能根本不进行任何验证。但如果它确实发生了(可能所有广泛使用的浏览器都会发生),它会发生在握手期间,在发送任何身份验证数据之前。

    同样,如果我通过 http 连接,是否有一种简单的方法可以将请求转发到 https,然后进行身份验证?

    有几种方法可以做到这一点。 StackOverflow上有很多问题询问如何做到这一点,搜索“强制https”。它可能会归结为您可以访问哪些配置文件。如果您有权访问您的虚拟主机配置,则在虚拟主机中为 non-SSL 配置添加 Redirect 指令并重定向到 https。否则,您需要在 .htaccess 文件中执行此操作。与此类似的内容(在您的 非 SSL 网站中):

    Redirect 301 / https://yourdomain.com/
    

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2021-03-21
      • 2011-11-12
      • 2011-05-05
      相关资源
      最近更新 更多