2017-05-01 3 views
1

내가 (SSL의 인증서가 나중에에만 유효하기 때문에) https://www.example.com에서 https://example.com로 사용자를 리디렉션하기 위해 노력하고있어,이이 코드와 크롬에서 잘 작동 :Firefox가 HTTP에서 HTTPS로 제대로 리디렉션되지 않습니까?

if(isset($_SERVER['HTTPS']) and $_SERVER['SERVER_PORT'] == 443){ 
    // We are on https version 
    if(strtolower($_SERVER['SERVER_NAME']) == 'www.example.com'){ 
     // Wrong domain: Redirect to safety 
     header('Location: https://example.com/', true, 301); 
     exit(); 
    }else{ 
     // We are safe 
     die('SSL certificate OK: Your credit card is now safe'); 
    } 

}else{ 
    // Redirect to safety 
    header('Location: https://example.com/', true, 301); 
    exit(); 
} 

그러나 파이어 폭스가 거부 리디렉션하고 정상적으로 계속 표시합니다. 안전하지 않은 사이트 : 지금이 페이지를 벗어나면 신용 카드가 도난 당하거나 경고 메시지가 표시됩니다. 이 Firefox를 처음 리디렉션하도록 강제하는 몇 가지 해결 방법이 있습니까? 그렇다면 Chrome이 이미 수행하는 것처럼 SSL 인증서를 확인 하시겠습니까?

참고 : IIS를 사용하지 않으므로 $_SERVER['HTTPS']의 값을 확인하지 않아도됩니다.

답변

1

잘못된 인증서 오류와 계속 충돌하는 이유는 HTTPS의 작동 방식 때문입니다. 즉, HTTP 연결은 TLS를 통해 터널링됩니다. 즉, 클라이언트가 리디렉션이 이루어지는 HTTP 계층에 도달하기 전에 웹 서버에 대한 TLS 연결 (서버 인증서 확인 프로세스 포함)을 시작합니다. 결과적으로 웹 서버가 응답하기 전에 Firefox가 인증서를 숨겨서 브라우저가 리디렉션을 보지 못하게됩니다.

TLS 핸드 셰이크를 완료하기 전에 Host 헤더를 처리하는 방법이 있습니다. 보통은 SNI을 포함하지만 서버에서 유효한 인증서가 필요하므로 실제로 여기서는 도움이되지 않습니다.

그러나 도메인에 대한 'www'접두어에도 유효한 인증서를 사용하면 도움이 될 수 있습니다. example.comwww.example.com. 대부분의 인증 기관은 인증서 요청에 두 도메인을 모두 지정한 경우 추가 비용없이 발급 한 SSL 인증서에 대해이 기능을 제공합니다. (이에 대한 자세한 정보가 필요하면 알려주세요.)

아니요, 프로토콜 작동 방식에 따라 인증서 확인을 무시할 수 없습니다. 이것은 의도적 인 동작입니다 (). this answer을 참조하십시오.

+0

감사합니다. 그렇지 않으면 앞으로 사이트를 다시 방문하지 못하게됩니다. – andreszs