SSL을 사용하는 Apache 이름 가상 호스트
-
21-08-2019 - |
문제
SSL을 통한 트래픽을 허용하도록 서버를 설정하려고 합니다.SSL이 Name Virtual Host와 작동하지 않는다는 것을 알고 있지만 전용 개인 IP가 있는 가상 머신에 모든 Apache 서버가 있습니다.적절한 vms로 트래픽을 라우팅하기 위해 mod_proxy 설정이 있는 기본 가상 머신이 있습니다.
그러나 https 트래픽을 라우팅하려면 프록시와 vms에 인증서를 설치해야 합니다.우리는 모든 호스트에서 사용할 수 있는 와일드카드 인증서를 보유하고 있습니다.모든 것이 제대로 작동하는 것처럼 보이지만 프록시에 대한 Apache 로그에는 다음이 표시됩니다.
[경고] 초기화:SSL 서버 IP/포트 충돌:host1.domain.com:443(/etc/apache2/sites-enabled/host1:1) 및host2.domain.com:443 (/etc/apache2/sites-enabled/host2:1)
프록시에 설정한 각 호스트에 대해 이러한 오류 메시지 중 하나가 있습니다.프록시에 대한 가상 호스트 설정은 아래에 게시되어 있습니다.
<VirtualHost ipaddress:443>
ServerName host1.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://privateip:443/
ProxyPassReverse / https://privateip:443/
SSLProxyEngine on
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
이 작업을 수행할 수 있는 방법이 있나요?
해결책
Apache가 여러분에게 여러 가지가 있다고 경고하는 것처럼 들립니다. <VirtualHost>
동일한 IP 주소와 포트가있는 섹션 ... 경고없이 작동하는 한 SSL 핸드 셰이크의 일부로 요청 된 호스트 이름을 식별하는 방법 인 SNI (Server Name Delication)와 같은 것을 사용해야한다고 생각합니다. . 기본적으로 SSL을 통해 이름 기반 가상 호스팅을 수행 할 수 있지만 브라우저에서 얼마나 잘 지원되는지 잘 모르겠습니다. SNI와 같은 것 외에는 기본적으로 공개 인터넷에 노출되는 각 IP 주소에 대해 하나의 SSL 지원 도메인 이름으로 제한됩니다.
물론 웹 사이트에 올바르게 액세스 할 수 있다면 경고를 무시하는 것이 좋습니다. 이 특별한 것들은 그다지 심각하지 않습니다 - 그들은 주로 문제를 겪고 있다면 무엇을 살펴볼지 징후입니다.
다른 팁
내가 아는 한, Apache는 버전 2.2.12 이후 SNI를 지원합니다. 슬프게도 문서는 아직 그 변경을 반영하지 않습니다.
가십시오 http://wiki.apache.org/httpd/namebasedsslvhostswithsni 그것이 끝날 때까지
다음을 교체 할 수 있습니다.
VirtualHost ipaddress:443
~와 함께
VirtualHost *:443
당신은 아마도 당신의 모든 미덕 호스트에서 이것을해야 할 것입니다.
아마 그 메시지를 정리할 것입니다. ServerName Directive가 메시지 요청을 라우팅하는 것에 대해 걱정하도록하십시오.
다시 한 번 동일한 컴퓨터에 대한 여러 IP의 별칭이 있으면이 작업을 수행하지 못할 수 있습니다.
가상 호스트는 다음과 같습니다.
NameVirtualHost IP_Address:443
<VirtualHost IP_Address:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin webmaster@domain_name.com
DocumentRoot /var/www/html
ServerName www.domain_name.com
ErrorLog logs/www.domain_name.com-error_log
CustomLog logs/www.domain_name.com-access_log common
</VirtualHost>
Apache는 이름 기반 가상 호스트에서는 SSL을 지원하지 않으며 IP 기반 가상 호스트에서만 SSL을 지원합니다.
원천:Apache 2.2 SSL FAQ 질문 이름 기반 가상 호스팅을 사용하여 다양한 SSL 가상 호스트를 식별할 수 없는 이유는 무엇입니까?
SSL과 달리 TLS 사양은 이름 기반 호스트(다른 사람이 언급한 SNI)를 허용하지만 Apache는 아직 이 기능을 지원하지 않습니다.openssl 0.9.8에 대해 컴파일할 때 향후 릴리스에 포함될 것으로 예상됩니다.
또한, mod_gnutls SNI를 지원한다고 주장하지만 실제로 시도해 본 적은 없습니다.
먼저 구성 파일에서 NameVirtualHost IP : 443이 필요합니다! 당신은 아마도 결국 80이있는 것을 가지고 있지만, 443이있는 것도 필요합니다.
둘째, *. 도메인 인증서 (와일드 카드)가 필요합니다 (하나를 만들 수 있음).
셋째, 하나의 IP로 도메인 웹 (인증서 때문에)을 만들 수 있습니다.
활성화하려면 아래 부분을 추가해야합니다 NameVirtualHost
주어진 IP의 기능.
NameVirtualHost IP_Address:443