SSL 지원 아파치 호스트의 비 SSL 버전이 다른 호스트의 컨텐츠를 제공하는 이유는 무엇입니까?


1

Apache / Ubuntu를 사용하여 localhost에서 실행되는 두 개의 웹 사이트가 있습니다.

이 중 하나에 대한 자체 서명 인증서를 성공적으로 설치했습니다 securesite.local. SSL이 아닌 다른 사이트 insecuresite.local는 예상대로 작동합니다.

즉, 내가 탐색하면

https://securesite.local
http://insecuresite.local

이들 각각은 올바른 컨텐츠를 제공합니다.

그러나 탐색하면 http://securesite.local콘텐츠를 제공합니다.insecure.local

내 / etc / hosts에

127.0.1.1 securesite.local
127.0.1.1 insecuresite.local

/etc/apache2/apache2.conf는 다음을 포함합니다

IncludeOptional sites-enabled/*.conf

보안 사이트 또는 안전하지 않은 사이트에 대한 명시적인 참조는 포함되어 있지 않습니다.

ls / etc / apache2 / sites-enabled

securesite.conf insecuresite.conf

insecuresite.conf에 포함되어 있습니다 (여기에서 축약 됨)

<VirtualHost insecuresite.local:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

securesite.conf에 포함되어 있습니다 (약칭)

<VirtualHost securesite.local:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Apache가 443 이외의 포트를 통해 securesite.local에 대한 연결을 거부하고 해당 localhost : 80의 트래픽을 허용하는 다른 사이트의 컨텐츠를 제공하지 않기를 원합니다.

왜 이런 일이 일어나고 어떻게 막을 수 있습니까?

답변:


0

insecuresite.conf 및 securesite.conf 파일을 기준으로 하나는 포트 80에서 수신되고 다른 하나는 443에서 수신 대기합니다. http : //securesite.local 로 이동하면 브라우저가 포트 80에서 데이터를 요청하고 있으며 유일한 것은 제공됩니다 포트 80에서 안전하지 않은 사이트입니다.

이 문제를 해결하려면 securesite.local : 80에 대한 가상 호스트를 정의하고 https로 리디렉션해야합니다. 또한 NameVirtualHost *apache2.conf 파일에 있는지 확인해야 합니다.

그러면 두 개의 conf 파일은 다음과 같습니다.

<VirtualHost *:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

<VirtualHost *:80>
    ServerName securesite.local
    ServerAlias securesite.local
    Redirect permanent / https://securesite.local
    # ... 
<VirtualHost *:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

NameVirtualHost 옵션을 활성화하면 Apache는 ServerNames 및 ServerAliases를 검사하고 그에 따라 데이터를 제공합니다.


감사. 추신 : 나는 그것이 securesite.local이 아니라 * : 80이어야한다는 것을 발견했다. 마찬가지로 악성 DNS 또는 호스트 파일이 foo.com을이 IP로 보내면 아무것도 제공되지 않습니까?
spraff

이 작업을 시도 했습니까? foo.com을 호스트 파일에 추가하면 사이트 중 하나를 제공합니까? ServerNames / Aliases와 일치하지 않기 때문에 그렇지 않을 것이라고 생각합니다. 그렇다면, 포괄 역할을 할 수있는 다른 VirtualHost를 만들 수 있습니다. serverfault.com/questions/583884/…
zachzins

그것을 스스로 시험해 보았습니다. 그것은 불량 명을 받아 들였습니다. 나는 이것이 큰 보안 위험이 될 것이라고 상상할 수 없다.
zachzins

0

소켓은 호스트 이름이 아닌 IP 주소에 바인딩되고 연결됩니다 . 두 호스트 모두 동일한 IP 주소를 가지고 있기 때문에 두 호스트 모두에 대한 리스너 소켓이 하나 뿐이며 Apache는 연결을 수락 한 후 까지 어느 도메인이 요청 될지 알 수 없습니다 . HTTP 요청 (또는 TLS SNI 핸드 셰이크)을 수신해야합니다. .

의 파일은 sites-enabled우연히 읽혀 지므로 이름이 sites-enabled/00-default.conf비슷한 파일에 "대체"가상 호스트를 설정할 수 있습니다 . 즉, 동일한 IP에 대해 다른 가상 호스트 앞에 나열해야합니다.


확실히 소켓을 받아들이고 호스트를 결정한 다음 호스트가 틀린 경우 소켓을 닫을 수 있습니까? 그렇지 않으면 이것은 "잘못된 구성"으로 인해 데이터 유출에서들은 것과 같은 것 같습니다.
spraff

또한, 나는 창조 sites-enabled/000-defualt.conf<VirtualHost *:80>다시 시작 내가 HTTP를 탐색 할 때, 나는 아직도 insecure.local에서 제공 콘텐츠를 : // secure.local
spraff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.