SNI와 HTTP 제공 도메인 간의 충돌

SNI와 HTTP 제공 도메인 간의 충돌

저는 최근 소규모 상점이 있는 WordPress 웹 사이트를 호스팅 공급자에서 Ubuntu Server 12.04.2 LTS 및 Apache 2.2.22를 실행하는 자체 서버로 옮겼습니다. 상점에 SSL이 필요합니다. 서버의 새 IP에 몇 개의 간단한 가상 호스트를 설정했습니다. 하나는 특정 IP의 포트 80에 바인딩되고 다른 하나는 포트 443에 바인딩됩니다. 둘 다 vhost 구성에 ServerName www.example.com있습니다 . ServerAlias example.com나는 가지고있다 SSLStrictSNIVHostCheck off.

사이트가 매우 느리게 실행되고 있지만 작동하고 있습니다. 내 오류 로그에 다음이 표시됩니다.

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

속도 저하가 위 메시지와 관련이 있을 것으로 예상됩니다. 왜 그런 현상이 나타나는지, 그리고 이에 대해 무엇을 할 수 있는지에 대한 아이디어가 있습니까?

답변1

액세스 로그를 살펴보십시오(오류 로그 아님). 오류가 발생한 시간과 날짜를 통해 문제가 되는 요청을 식별하고 사용자 에이전트를 찾을 수 있습니다. 제 경우에는 봇이었습니다.

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

내 서버가 HTTP 400: 잘못된 요청으로 응답합니다.

내가 실수하지 않는 한, TLS 협상에서 클라이언트는 호스트 이름을 두 번 보냅니다. 한 번은 SSL 연결이 SNI(Server Name Indication)에서 설정되기 전이고 한 번은 실제 HTTP 요청 후에 한 번입니다. 서버 이름이 일치하지 않으면 이는 클라이언트가 손상되었음을 의미하며 서버 구성 방식과 아무 관련이 없어야 합니다.

언젠가는 봇을 고칠 수도 있지만 그동안은 무시해도 됩니다. 요청이 매우 높은 속도로 발생하지 않는 한 이로 인해 호스트 속도가 느려질 수 있을지 의심됩니다.

답변2

어쩌면 이 오류가 발생할 수도 있습니다.의도적으로일부 클라이언트는 서버의 취약점을 테스트합니다. researchscan367.eecs.umich.edu내가 유지 관리하는 서버에서 요청으로 인해 오류가 발생했음을 발견했습니다 . 이 경우에는 오류가 발생하는 것이 다행입니다.

어떤 종류의 공격이 가능한지 궁금해서 Security Stack Exchange에 이런 질문을 했습니다.Apache2의 오류 코드 AH02032는 어떤 종류의 공격을 방지합니까?

답변3

내 경우에는 밑줄이 있는 새 가상 호스트를 만드는 것이 문제였습니다. 와일드카드 SSL 인증서가 있습니다.

작동하지 않았습니다.

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

Apache가 성공적으로 다시 시작되었지만 HTTP 400 오류가 발생했습니다. 오류 로그에서:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

그러나 밑줄을 제거하면 효과가 있었습니다.

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

답변4

/etc/hosts 파일을 확인하여 도메인 이름을 로컬(내부) IP 주소에 할당하고 있는지 확인하세요. /etc/hosts service nscd restart를 변경한 후 이름 서비스 캐시 데몬을 다시 시작하는 것을 잊지 마세요.

관련 정보