2012-07-24 4 views
8

HTTPS와 www를 강제하는 다시 쓰기 규칙이 있습니다. SSL 인증서는 사이트의 www 버전 용입니다. 전체 사이트는 HTTPS 여야합니다..htaccess 리디렉션은 브라우저 경고 이후에만 실행됩니다.

요청이 https://example.com/ 인 경우 리디렉션이 실행되기 전에 브라우저에 경고 페이지가 표시됩니다. (Firefox의 '이 연결은 신뢰할 수 없음'이며 Chrome에서는 '사용자가 찾고있는 사이트가 아닙니다!')

사용자가 Firefox에서 예외를 추가하거나 Chrome에서 오류를 무시하면 다시 쓰기 규칙이 실행됩니다 100 % 보안 페이지가있는 www 버전의 사이트로 리디렉션됩니다.

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^example.com$ [OR] 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^www.example.com$ 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

내가 리디렉션 브라우저 경고하기 전에 실행을 얻을 수있는 방법 http://martinmelin.se/rewrite-rule-tester/

에뿐만 아니라 사이트에 규칙을 테스트했습니다?

+0

참조 : http://serverfault.com/a/360985/47187 – Bruno

+0

[www가 아닌 ​​URL 및 http : //www.google.com/support/licensing/]로 복사 할 수 있습니다. (http://stackoverflow.com/a/10726167/372643). – Bruno

+0

이 질문은 중복 될 수 있지만 여기에 문제가 좀 더 명확 해 졌다고 생각합니다. IMHO. – Jonathan

답변

8

https://example.com에서 https://www.example.com으로의 리디렉션은 클라이언트가 https://example.com으로 초기 성공 요청을 한 후에 만 ​​발생할 수 있습니다.

HTTPS가 HTTP 트래픽을 보내기 전에 먼저 SSL/TLS 연결을 설정하는 HTTPS가 TLS/SSL을 통한 HTTP (RFC 2818 참조)이기 때문입니다. mod_rewrite은 SSL/TLS 연결이 설정된 후에 항상 적용됩니다. 그렇게하지 않으면 실제로 보안 문제가됩니다. 공격자가 인증서를 확인하기 전에 클라이언트를 다시 작성하고 리디렉션 할 수 있기 때문입니다. TLS 업그레이드가 HTTP (RFC 2817, 실질적으로 사용/지원되지 않고 https가 아님) 내에있는 경우에도 여전히 리디렉션을 신뢰할 수있는 엔터티에서 가져 오는 것이 좋습니다.

이 초기 연결을 사용하려면 https://example.com의 서버에 example.com의 인증서가 있어야합니다. 그렇지 않으면이 연결이 수행되지 않으며 서버가 리디렉션 응답을 보내지 않습니다.

이 당신의 목표를 달성하기 위해, 당신은 www.example.com에 유효한 인증서를 제시 https://www.example.com에 대한 example.com에 대한 유효한 인증서 및 요청을 제시 https://example.com에 대한 요청을해야합니다.

각 호스트에 대한 두 가지 인증서를 사용
  • , 중 서로 다른 IP 주소를 사용하거나 서버 이름 표시를 사용하여 :

    는 두 가지 해결책이 있습니다. 단점은 모든 클라이언트가 SNI를 지원하지 않는다는 것입니다.

  • example.comwww.example.com 모두에 유효한 단일 인증서를 사용합니다. 이는 여러 주체 대체 이름 (SAN) DNS 항목이있는 인증서를 얻음으로써 얻을 수 있습니다 (점이 와일드 카드 패턴의 일부가 아니기 때문에 *.example.com으로는 작동하지 않습니다).

확실히 쉬운 솔루션입니다. CA가 신청할 때 및 www.example.com에 대해 SAN 항목이있는 인증서를 발급하는 것이 일반적이며 추가 요금없이 제공되기도합니다.

+0

참고 : 대부분의 와일드 카드 인증서에는'* .example.com'과'example.com'이 모두 포함됩니다. – cmorrissey

0

This post 주소 문제, 다음과 같은 대답을 제공합니다 : 당신이 잘못된 인증서의 문제를 방지하려면

당신은 example.com에 대한 인증서가 필요합니다. 보안상의 이유로 인증 전에 리디렉션이 허용되지 않습니다.

또 다른 옵션은 *.example.com과 일치 할 수있는 와일드 카드 인증서를받는 것일 수 있습니다. 당신은 http://example.com/https://www.example.com/로 리디렉션 할 수

(분명히이. 감사합니다 @Giel 작동하지 않습니다),하지만 당신은 이미 https://example.com/를 방문하는 사용자가 있다면 그것은 당신을 도울 수 있습니다.

+0

와일드 카드 인증서로는 충분하지 않습니다. example.com과 * .example.com이 필요합니다. 후자는 전자 메일과 일치하지 않기 때문입니다. – Giel

관련 문제