SSL / TLS로 HTTP 연결 업그레이드


8

현재 모든 HTTP 요청을 동등한 HTTPS 사이트로 자동 리디렉션하는 서버가 있습니다. 문제는 일부 브라우저가 SSL 인증서 (StartSSL.com)를 허용하지 않거나 SNI를 지원하지 않는 것 같습니다. 따라서 인증서 경고가 표시되고 사용자는 웹 사이트에서 계속 서핑하지 않습니다.

브라우저가 일반 HTTP 대신 HTTPS를 사용하도록하는 메커니즘이 있으며 작동하지 않는 경우 (예 : 인증서가 승인되지 않거나 SNI가 지원되지 않음) HTTP를 계속 사용합니다.

현재 Apache 2.4를 여러 가상 호스트와 함께 사용하여 모두 HTTP 연결을로 리디렉션합니다 Redirect / https://domain.example/.


3
인증서가 정확하지 않은 경우 HTTPS에서 HTTP로 변경하면 절대 방문자가 되어서는 안되는 일입니다. 인증서가 잘못되었다는 사실은 잘못된 표시가되어야합니다. 암호화되지 않은 연결로 되 돌리는 것이 최악의 일입니다. 가장 좋은 솔루션은 다른 CA를 사용하거나 SNI를 사용하지 않고 호스트 이름과 일치하도록 인증서를 수정하는 것입니다.
Teun Vink

알았어 그러나 HTTPS 연결을 지원하지 않거나 서버에서 제공된 암호화 메커니즘을 지원하지 않는 브라우저가있을 것으로 예상되는 경우. 그런 다음 해당 클라이언트는 (내 경우에는) HTTPS를 사용하는 사이트로 자동 리디렉션하기 때문에 사이트를 사용할 가능성이 없습니다.
foxylion

오늘날 세계에서는이 한계를 극복하는 것이 가능합니다. 주요 사이트에는 SSL로만 전환됩니다. 그들이 할 수 있다면 할 수 있습니다.
MichelZ

답변:


15

https가 작동하지 않으면 브라우저는 자체적으로 http로 다운 그레이드해서는 안됩니다. 공격자가해야 할 일은 https를 사용할 수 없게 만드는 것입니다 (예 : 블록 포트 443). 따라서이 작업을 수행 할 수있는 유일한 방법은 서버에서 브라우저에게 지시하도록하는 것입니다 (예 : http 리디렉션 전송). 물론 이것은 안전한 연결을 통해 전송되어야합니다 (그렇지 않으면 중간자 (man-in-the-middle)가 가짜 일 수 있습니다). 그러나 불행히도 안전한 연결이 실패하는 것은 당신의 문제입니다.

요약하면 : 불가능합니다.이 방법이 더 좋습니다.

BTW, 모든 최신 브라우저는 SNI를 지원하지만 모든 응용 프로그램 (예 : Java 앱 등)은 지원하지 않습니다. 웹 서버에 여러 도메인이 있지만 이러한 앱에 필요한 단일 도메인 만있는 경우이 도메인의 인증서를 기본값으로 설정할 수 있습니다. 그렇지 않으면 주체 대체 이름으로 필요한 모든 도메인이 포함 된 (더 비싼) 인증서를 받아야합니다.

다른 아이디어로 편집하십시오 : 할 수있는 일은 이미지를 https로 다운로드하고 img-tag의 onerror 핸들러로 성공을 확인하는 것입니다. 어쩌면 이것은 사용자에게 보이는 경고를 유발하지는 않지만 대신로드에 실패합니다. 그리고 성공하면 https 액세스가 가능하다는 것을 알고 사용자를 리디렉션하십시오.

그 외에도 http로도 액세스 할 수 있다면 https를 제공하려는 이유를 스스로에게 물어봐야합니다. 보호해야하거나 그렇지 않은 데이터가 있습니다. http로 폴백을 제공하는 한 공격자가 https 대신 http를 시행하는 것이 쉽습니다.


1
아주 잘 언급했다.
Tim Brigham

3

우선 SNI 지원이없는 모든 클라이언트에 사용할 하나의 인증서를 지정할 수 있어야합니다. 이는 해당 IP 주소에서 호스팅되는 모든 도메인을 의미하며 SNI없이 클라이언트에서 작동하는 도메인 중 하나 이상을 가질 수 있습니다.

http에서 https로 리디렉션 할 때 수행 할 수있는 작업은 2 단계 리디렉션입니다. http에서 https 로의 첫 번째 경로 재 지정은 SNI 지원과 함께 또는 SNI 지원없이 작동하는 도메인 이름을 사용합니다. 이 https 사이트에서 나중에 적절한 URL로 리디렉션 할 수 있도록 전체 원본 URL을 포함해야합니다.

SNI의 유무에 관계없이 작동하는 도메인 이름은 클라이언트가 SNI를 지원하는지 여부에 따라 다르게 작동 할 수 있습니다. 이렇게하면 SNI가 필요한 도메인으로 리디렉션하기 전에 클라이언트가 SNI를 지원했음을 알 수 있습니다.

아파치에서 이것을 정확하게 구성하는 방법은 내 측에서 약간 추측 할 것입니다 (하나 이상의 인증서로 아파치를 구성하지 않았기 때문에). 중간 도메인을 포함한 모든 도메인에 대한 이름 기반 가상 호스트를 만드는 것이 방법이라고 생각합니다.

그런 다음 이름을 사용하는 것과 동일한 인증서를 사용하는 SNI가없는 클라이언트에 대한 기본 가상 호스트를 작성하십시오. 인증서가 동일한 두 개의 가상 호스트는 SNI 지원 여부에 따라 클라이언트에 다른 리디렉션을 보냅니다.

마지막으로 서버에서 IPv6을 활성화합니다. IPv6을 사용하면 각 가상 호스트에 하나씩 IP 주소를 할당 할 수있는 충분한 IP 주소가 제공됩니다. 동일한 가상 호스트 집합은 IPv4 기반의 이름과 IPv6 기반의 IP 일 수 있으므로이 방법으로 구성을 복제 할 필요가 없습니다.

최종 결과는 클라이언트가 SNI 또는 IPv6을 지원하는 한 작동하는 설정입니다. 어느 쪽도 지원하지 않는 클라이언트 만 문제가 발생하지만 여전히 다른 리디렉션이나 오류 메시지를 감지하고 서버를 감지 할 수 있습니다.

CA가 마음에 들지 않는 클라이언트의 경우 사용자 에이전트가 클라이언트를 인식하고 적절하게 처리하는 것이 좋습니다. https 사이트로 연결되는 링크가 있는지 확인하십시오. 실수로 너무 많은 클라이언트가 포함 된 경우 클릭 할 수 있습니다.


0

간단히 생각해보십시오 : StartSSL에 필요한 sub.class1.server.ca.pem 파일을 포함하는 아파치 구성에 SSLCertificateChainFile 지시문이 없을 수 있습니까?


아니요, 모든 것이 잘 작동하지만 일부 구형 브라우저는 SNI를 지원하지 않거나 StartSSL.com을 신뢰하지 않습니다. 문제는 이러한 방문자가 인증서 경고를 무시하지 않고 페이지를 볼 가능성이 없다는 것입니다 (해결책 없음).
foxylion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.