2010-12-22 6 views
5

HTTPS 인증을 강제하는 가장 좋은 방법은 무엇입니까? 디렉토리에 HTTPS를 강제하고 HTTPS 인증을 강제하는 방법

내 htaccess로 파일이이

:

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 

인증은 작동하지만, 맑은에 암호를 보내는 포트 80을 통해 인증합니다.

그래서 나는 동등한 HTTPS 요청에 대한 모든 비 HTTPS 요청 리디렉션 리디렉션 규칙을 추가 할 생각 :

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteBase /~david/ 
RewriteRule ^(.*)$ https://myserver.tld/~david/$1 [R,L] 

이것은 또한 작동을하지만, 포트 80에 첫 authenicates 후 리디렉션, 다시 authenicates 암호는 일반 텍스트로 보내 지므로 포트 80에서 인증하고 싶지 않습니다. 나는 HTTPS로 바로 리다이렉션 할 수있는 좋은 방법을 찾아 낼 수 없었다.

<?php 

header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 

?> 

이는 내 서버의 /에 403.php의 PHP 스크립트를

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 
ErrorDocument 403 /403.php 
SSLRequireSSL 

그리고 가지고 : 나는이 작업을 수행하는 방법을 알아낼 수

있는 유일한 방법은이 일을하는 것입니다 원하는 행동. SSL이 필요하므로 포트 80에서 디렉토리에 액세스하려고하면 사용자 정의 오류 문서가 출력되고 해당 문서는 HTTPS로 리디렉션됩니다.

이것은 마치 진흙탕처럼 보입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

나는 그것이 옳다고 생각한다. 그것이 최선의 방법입니다. – bmb

답변

13

그래서 현재 귀하 또는 귀하의 블록이 HTTPS 및 HTTP 케이스 모두에 적용됩니다. 이것을 풀어 줘야합니다. (물론 실제로 - 당신은 '어떤 것을 만족시킬 수 있습니다.'-하지만이 경우 약간 지저분합니다.)

<VirtualHost *:80> 
    ... 
    RewriteRule ^/foo/bar/?(.*)$ https://myserver.tld/foo/bar/$1 [R,L] 
    # and to guard against typo's... 
    <Directory /foo/bar/> 
     deny from all 
    </Directory> 
</VirtualHost> 


<VirtualHost *:443> 
    ... 
    <Directory /foo/bar/> 
     BasicAuth .. etc. 
     allow from all 
    </Directory> 
</VirtualHost> 

거기에서 물건을 가지고 :

디버깅하기 쉬운/접근 방법을 이해는 같은 구조로 이동하는 것입니다.

ww.

관련 문제