마지막 수정 날짜 : 2018년 9월 18일
nginx 는 기본적으로 Strict SNI1 를 지원하지 않는다.
해외에서 Strict SNI 을 nginx 에 지원하는 것을 성공했지만, 아쉽게도 오류 메세지가 많이 뜬다고 하여 여러가지 연구를 해 봤고, 결국 성공하였다.
내 nginx-build 에는 strict_sni 라는 옵션을 만들어 두었지만, 여기 설명에는 단순히 패치 방법2만 올려두겠다.
- nginx 을 빌드하기 위한 준비물을 다운로드 받는다.
– 관련 내용은 https://nginx.org/en/docs/configure.html 참조. 여기서는 직접 빌드할 수 있는 사람을 대상으로 설명한다.
– openssl 은 1.1.1 버전을 기준으로 작성되었으므로 해당 버전을 다운로드 받는다. - curl 이 설치되었는지 확인한다.
- nginx 디렉토리로 가서 다음과 같은 명령어를 입력한다.
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1 - openssl 디렉토리 (–with-openssl 디렉토리) 로 가서 다음과 같은 명령어를 입력한다.
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl_ignore_log_strict-sni.patch | patch -p1 - default_server (http 안에서 server 단락이 오는 맨 첫 번째 부분) 설정에서 server_name 은 _ 등으로 설정하고, ssl 설정은 실제 운영중인 사이트와 그대로 똑같이 설정한다.
- 이제 아이피(https://~~~)로 접속하면 연결이 되지 않는다.
현재 내 서버에도 Strict SNI 가 적용되어 있고, SNI 가 지원되지 않는 브라우저 (IE 8 같은..) 들은 내 서버에 더 이상 접속할 수 없다.
위 방법이 어렵다면 내가 nginx 를 커스터마이징한 nginx-build 를 이용하자.
Thanks:
@JemmyLoveJenny – Strict-SNI 소스 제공