我们的Intranet使用mod_ldap来将用户authentication到我们的内部Active Directory服务器,如下所示:
<Location /***/> AuthType Basic AuthName "***" AuthBasicProvider ldap AuthLDAPUrl "***" require valid-user </Location>
我们希望允许我们的用户通过互联网访问我们的网站,但不幸的是, 基本身份validation是以纯文本方式完成的,这会使我们的AD凭证在网上暴露。
我意识到我可以用ssl来保护整个网站,但是我唯一真正关心的是证书本身。
什么是最好的方式来保护我的AD凭据而不使用https://为整个网站?
注意:我已经尝试用“摘要”代替“基本”,但这不起作用。
您将永远无法使用LDAP使用摘要式身份validation,因为摘要式身份validation(通过MD5)使密码变得模糊不清,因此无法与ldap密码进行比较。
您可以使用Cookie而不是基本身份validation解决此问题。 参见例如pubcookie http://www.pubcookie.org/或者Apache2 :: AuthCookie http://search.cpan.org/~mschout/Apache-AuthCookie-3.15/lib/Apache2/AuthCookie.pm
实际上,到处使用SSL有什么问题? 你在浪费努力来消除安全。
我在这里回复https://stackoverflow.com/questions/6458398/apache-2-2-redirect-to-ssl-then-do-auth-with-solution-but-is-it-crap/7822709#7822709,a使用SSLRequireSSL解决scheme,以及一个ErrorDocument 403返回一个HTML 403的错误页面,其中包含一个JavaScript,将页面重新加载到HTTPS …我发现的最好的解决scheme,而不需要将configuration文件分成两部分,一部分由端口HTTP上的VirtualHost加载,在端口HTTPS的另一端。
答案是,你不能。 一旦用户使用基本身份validation进行身份validation,他或她的浏览器将发送一个授权标头,每个后续请求都包含他或她的密码(只有Base64编码)。 因此,保护密码的唯一方法是在整个站点上强制使用HTTPS,至less在进行身份validation之后。
使用重写规则将所有已validation的页面定向到https :. 这将发生在身份validation请求之前。 所有authentication的页面也需要ssl。
编辑:您可以使用重写规则强制http:请求https:请求。 对于与您匹配的模式匹配的所有请求都会发生这种情况。 这通常会在需要authentication的页面发生之前发生。 这可以在位置或目录定义中。 除非使用https访问,否则网站的其余部分将位于http上。 重写条件非常灵活,如何匹配以及重写的内容。
#强制客户端使用HTTPS
重写引擎
RewriteCond%{REMOTE_ADDR}!^ 192 \ .168 \ .1 \。[0-9] + $
RewriteCond%{HTTPS}!=开启
RewriteRule。* - [F]
在安全方面你需要SSL。 像密码authentication这将发生在访问页面之前。 一定要使用满足您的安全规则。 将SSLRequireSSL添加到已authentication区域的条件。
更多细节在Apache SSL HowTo中有介绍 。