SNI와 HTTP 제공 도메인 간 충돌


22

나는 최근에 작은 상점이있는 WordPress 웹 사이트를 호스팅 제공 업체에서 Ubuntu Server 12.04.2 LTS 및 Apache 2.2.22를 실행하는 서버로 옮겼습니다. 상점에 SSL이 필요합니다. 내가 하나가 특정 IP와 다른이 두 포트 443에 바인딩의 포트 80에 바인딩, 서버에 대한 새로운 IP에 대한 간단한 가상 호스트의 몇 가지를 설정 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

속도 저하가 위의 메시지와 관련이 있다고 생각합니다. 그것이 왜 나타나고 내가 그것에 대해 무엇을 할 수 있는지에 대한 아이디어가 있습니까?

답변:


24

오류 로그가 아닌 액세스 로그를보십시오. 오류 시간 및 날짜를 ​​사용하여 문제가되는 요청을 식별하고 사용자 에이전트를 찾을 수 있어야합니다. 제 경우에는 봇이었습니다.

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

내 서버는 HTTP 400 : Bad Request로 응답합니다.

내가 실수하지 않는 한, TLS 협상에서 클라이언트는 호스트 이름을 두 번 보냅니다. SSL 연결이 SNI (서버 이름 표시)에서 설정되기 전에 한 번, 실제 HTTP 요청에서 한 번 후에 호스트 이름을 두 번 보냅니다. 서버 이름이 일치하지 않으면 클라이언트가 고장난 것이므로 서버 구성 방법과 관련이 없습니다.

어쩌면 그들은 언젠가 봇을 고칠 것입니다. 그동안 무시할 수 있습니다. 요청이 매우 빠르지 않으면 호스트 속도가 느려질 수 있습니다.


11

이 오류는 일부 클라이언트에서 의도적 으로 서버의 취약점을 테스트하기 위해 발생합니다. researchscan367.eecs.umich.edu유지 관리하는 서버 에서 요청 이 오류 를 유발 한 것으로 나타났습니다 . 이 경우 오류가 발생하는 것이 좋습니다.

어떤 종류의 공격이 가능한지 궁금해서 Security Stack Exchange에 대해이 질문을 했습니다. Apache2의 오류 코드 AH02032로 어떤 종류의 공격을 막을 수 있습니까?


1

처음에 클라이언트 문제처럼 들립니다 ...이 문제를 일으키는 브라우저는 무엇입니까?

이 메시지는 SSL 연결 설정 중에 클라이언트가 보내는 호스트 이름이 SSL 계층이 가동되면 클라이언트가 HTTPS 요청에서 보내는 것과 같지 않다는 것을 나타냅니다.


이 문제의 원인을 모르겠습니다. 이 오류는 클라이언트 정보를보고하지 않습니다. 나는 이것을 정기적으로보고 있다는 것을 안다. 이론적으로 서버가 www.domain.com과 domain.com이 동등하다는 것을 알고 있기 때문에 ServerAlias가 만족하기에 충분하기를 바랍니다.
flickerfly

@flickerfly 네, 이것은 버그가있는 클라이언트이며, 식별 할 수 없다면 많이 할 수 없습니다.
Michael Hampton

2
포트 443에 대한 NameBasedVirtualHost 지시문을 제거하여 SNI를 비활성화했습니다.이 시점에서 필요하지 않은 것 같습니다. 나는 그것이 작동해야한다고 생각합니다.
flickerfly

1

필자의 경우 밑줄로 새 가상 호스트를 만드는 것이 문제였습니다. 와일드 카드 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>

1
ServerFault에 오신 것을 환영합니다. 호스트 이름에 밑줄을 넣으면 RFC에 위배되며 다양한 방식으로 중단됩니다. stackoverflow.com/questions/2180465/…
병아리

1
정확하게! 이것이 바로 여기에 참조로있는 이유입니다.
MS Berends

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.