2017-09-09 15 views
0

example1.com과 example2.com이라는 두 도메인이 동일한 IP 12.345.678.90에서 실행됩니다.기본 443 가상 호스트 용 Apache SSL 엔진 사용 안함

이제 12.345.678.90을 통해 https 액세스를 완전히 무시하고 싶습니다.

는 내가 모든 기본적으로 두 가지 예를 들어 사이트 작업을 잡는다 첫 번째 블록을 막아 버릴 때 이제 (멋진 물건없이 컴팩트 코드)

<VirtualHost *:443> 
    SSLEngine off 
</VirtualHost> 

<VirtualHost *:443> 
    SSLEngine on 
    ServerName example1.com 
    DocumentRoot /var/www/html/example1 
    SSLCertificateFile /etc/.../fullchain.pem 
    SSLCertificateKeyFile /etc/.../privkey.pem 
</VirtualHost> 

<VirtualHost *:443> 
    SSLEngine on 
    ServerName example2.com 
    DocumentRoot /var/www/html/example2 
    SSLCertificateFile /etc/.../fullchain.pem 
    SSLCertificateKeyFile /etc/.../privkey.pem 
</VirtualHost> 

을이 작업을 수행하기 위해 노력했다. 그러나, 내가 그것을 가능하게하면, 아무것도 더 이상 작동하지 않습니다. 실제로 이것은 443 용으로 복사 된 포트 80 솔루션입니다. SSL 관련 문제 (인코딩 된 요청 데이터) 인 것 같습니다.

https를 통한 "IP 액세스"를 차단하려면 어떻게해야합니까? 또는 설정을 구성하는 데 일반적으로 사용되는 방법은 무엇입니까?

배경 : IP 기반 SSL 인증서를 만드는 것은 표준화되지 않았기 때문에 이런 종류의 요청을 허용하지 마십시오. 심지어 IP 기반의 SSL - 인증서를 만들 표준화되지

답변

2

이 정말 사실이 아니다. 표준은 특정 IP 주소에 대한 인증서가 주체 대체 이름 섹션에서 iPAddress 유형을 사용해야 함을 명시 적으로 정의합니다. 그러나 공용 CA는 더 이상 IP 주소에 대한 인증서를 발급하지 않고 호스트 이름에 대해서만 인증서를 발급합니다.

그 외에도 서버가 특정 IP 주소의 SSL 포트에서 연결을 수락하거나 그렇지 않습니다. 이는 TCP 수준에서만 IP 주소가 표시되고 호스트 이름에 대한 지식이 없기 때문입니다. 클라이언트가 모든 최신 브라우저에서 수행하는 SNI TLS 확장을 사용하는 경우 호스트 이름은 TLS 핸드 셰이크 내에서만 알 수 있습니다.

따라서 가장 당신이 할 수는 즉 https://ip-address/를 사용하여, 클라이언트가 SNI 확장에서 알 수없는 호스트 이름을 사용하거나 전혀 SNI 확장을 사용하지 않는 경우 TLS 핸드 셰이크가 실패하는 것입니다. 이 특정 IP에 속하는 모르고 SNI는 가상 호스트에 액세스 할 수 없습니다 것입니다 기본 이름 기반 가상 호스트의에로 설정하면

, 고객이이 SSLStrictSNIVHostCheck 지시어 as documented를 사용하여 수행 할 수 있습니다/포트 조합.

이 옵션을 설정하면 http://ip-address/에 대한 액세스로 인해 클라이언트에 TLS 경고가 발생하고 TLS 핸드 셰이크가 실패합니다.