다중 사이트 가상 호스트로 구성된 Centos 7 서버가 있습니다. 제가 이 서버로 하려는 작업 중 하나는 기존 하위 도메인의 트래픽을 기본 웹사이트의 하위 디렉터리로 리디렉션하는 것입니다. 기본 사이트가 동일한 서버에 있지 않습니다.
나는 순수한 VirtualHost 구성과 .htaccess를 사용하여 수많은 구성을 시도했습니다. 항상 HTTP에서 작동하도록 할 수 있지만 이 VirtualHost에는 SSL 인증서가 없고 단지 리디렉션 트래픽용으로만 구입할 수 없기 때문에 HTTPS에서는 작동하지 않습니다.
그래서,http://bort.example.com리디렉션https://www.example.com/bort좋지만https://bort.example.com유효하지 않은 인증서에 대해 항상 보안 오류가 발생합니다.
내 현재 이론은 리디렉션 서버에 인증서가 없으면 Apache가 .htaccess 파일 처리조차 거부한다는 것입니다. 그래서 이를 완전히 제거하고 VirtualHost 구성을 가능한 가장 간단한 방법으로 추출하려고 했습니다. 이것이 내가 지금 가지고 있는 것입니다.
<VirtualHost *:80>
ServerName bort.example.com
Redirect / https://www.example.com/bort
</VirtualHost>
<VirtualHost *:443>
ServerName bort.example.com
Redirect / https://www.example.com/bort
</VirtualHost>
이는 HTTP 트래픽에 대해서는 여전히 잘 작동합니다. 작동시키려면 내가 무엇을 놓치고 있나요?https://bort.example.com?
편집: 이 서버의 다른 웹사이트인 lisa.example.com에 SSL 인증서가 있는 것 같습니다. 이는 영향을 미칠 수 있습니다. 연결을 시도할 때 수신된 실제 오류https://bort.example.com이것은:
bort.example.com uses an invalid security certificate.
The certificate is only valid for the following names:
lisa.example.com
Error code: SSL_ERROR_BAD_CERT_DOMAIN
답변1
HTTPS에서는 연결 시작 시 작업 순서가 이상적이지 않습니다. 이는 HTTP가 원래 SSL/TLS와 별도로 설계되었으며 두 기술이 함께 완벽하게 작동하지 않기 때문입니다.
서버가 들어오는 HTTPS 연결을 수락하면 첫 번째 단계는 SSL/TLS 협상입니다. 이는 다른 데이터가 연결을 통해 전달되기 전에 발생합니다. 특히,클라이언트가 클라이언트가 요청한 서버 이름을 지정하는 HTTP(s) 헤더를 보내기 전에.
따라서 서버에 여러 사이트에 대한 여러 인증서가 있는 경우 무작정 하나를 선택하고 그것이 클라이언트가 요청한 사이트에 대한 인증서이길 바랄 수도 있습니다. 잘못된 인증서가 제공되면 클라이언트는 해당 연결에서 서버가 보내는 모든 내용을 신뢰하지 않으므로 클라이언트를 리디렉션할 수 없습니다. "잠깐만요. bort
이제 귀하의 인증서가 귀하의 이름을 증명합니다 lisa
. 이것은 실수이거나 더 나쁜 경우입니다. 클라이언트는 서버에 정보를 리디렉션할 기회조차 주지 않습니다."
이름 기반 가상 호스팅이 보편화되면서 이 문제를 해결하기 위해 SNI(서버 이름 표시)와 SAN(서버 대체 이름)이라는 두 가지 기술이 개발되었습니다.
서버 이름 표시는 HTTP(s) 요청 헤더가 아닌 SSL/TLS 협상의 초기 단계에서 클라이언트가 서버 이름을 알릴 수 있도록 하는 SSL/TLS 확장입니다. 서버가 SNI를 지원하는 경우 클라이언트에 제공할 올바른 인증서를 선택할 수 있습니다. 물론 각 VirtualHost에는 자체 인증서가 있어야 합니다. Apache의 경우 이는 해당 가상 호스트의 인증서와 일치하는 인증서를 가리키는 각 가상 호스트에 대한 SSLCertificateFile
매개변수를 의미합니다. 아직 인증서가 없다면 인증서를 취득해야 합니다.SSLCertificateKeyFile
ServerName
bort
또 다른 옵션은 여러 가상 호스트에 대한 인증서를 갖는 것입니다. 이것이 서버 대체 이름 기술이 들어오는 곳입니다. 인증서가 적용되는 여러 호스트 이름을 나열할 수 있도록 하는 인증서 확장입니다. SAN 목록 lisa.example.com
과 bort.example.com
유효한 DNS 이름을 인증서로 사용하는 서버에 대한 새 인증서를 얻을 수 있습니다 . 물론, 새로운 인증서를 받는 것은 번거로울 수 있습니다.
불행하게도 SNI와 SAN은 모두 나중에 SSL/TLS 표준에 추가되었기 때문에 가장 오래된 브라우저는 이를 반드시 지원하지 않을 수도 있습니다. 그러나 기본적으로 이번 10년 동안 출시된 모든 브라우저는 이를 잘 지원할 것입니다.