본문 바로가기

WEB-SERVER/OHS & JBCS & Apache

[OHS] SNI 에 관하여

728x90

OHS, 즉, mod_ossl에서는 공식적으로 SNI에 대한 지원은 없다.

일단 SNI가 뭔지 검색해보면, 구글 AI의 답변은 이러하다

 

=====

SNI는 'Server Name Indication'의 약자로, 한국어로는 '서버 이름 지정'을 의미합니다. 

이는 TLS 암호화 통신 시 클라이언트가 접속하려는 웹사이트의 호스트 이름(도메인 이름)을 서버에 알려주는 기술로, 

하나의 IP 주소에서 여러 웹사이트를 서비스할 때 발생하는 SSL 인증서 문제(인증서 불일치 오류)를 해결해 줍니다. 


SNI의 역할
인증서 오류 방지: IP 주소만으로는 어떤 웹사이트에 접속하려는 것인지 서버가 알 수 없어, 잘못된 SSL 인증서를 보낼 수 있습니다. SNI는 클라이언트가 접속하려는 호스트 이름을 서버에 미리 알려주어 올바른 인증서를 선택하고 보안 연결을 가능하게 합니다.
호스팅 효율성 증대: 웹 서버는 같은 IP 주소를 사용하여 여러 웹사이트를 호스팅할 수 있습니다. 

SNI는 각 도메인에 맞는 SSL 인증서를 사용할 수 있게 해 주므로, 서버의 효율성을 높입니다. 


SNI의 작동 방식
클라이언트가 서버에 연결을 요청합니다.
TLS 핸드셰이크 과정 초기에, 클라이언트는 접속하려는 호스트 이름

(예: http://www.example.com)을 SNI 필드에 담아 서버에 보냅니다.
서버는 이 호스트 이름을 보고 해당 웹사이트에 맞는 SSL 인증서를 찾아 클라이언트에게 응답합니다.
이후 암호화된 통신이 시작됩니다.

=====

SNI 는 client 가 handshaking 과정에서 어떤 hostname 을 사용할지

결정하게 해 주는 SSL 과 TLS 프로토콜의 확장된 기능입니다.
SNI 기능을 사용 할 수 있다면 한개의 IP address:Port 를 가지고 여러개의 호스트이름에 대해 

각각 따로 다른 certificate 을 구성할 수 있다.

 

=====

(1) VirtualHost 를 이용해서 multi domain 구성
이 방법은 VirtualHost 별로 각각 다른 SSL인증서는 적용할 수 없습니다.
즉, 하나의 SSLWallet만을 사용할 수 있다.

예제)
NameVirtualHost *:80

<VirtualHost *:80>
ServerName test1.domain
DocumentRoot <dir>
</VirtualHost>

<VirtualHost *:80>
ServerName test2.domain
DocumentRoot <dir>
</VirtualHost>

=====

=====

(2) SNI 는 지원하지 않으나 여러개의 ip addresss 를 사용하여 
ip-based virtual host 를 설정하면 다음처럼 각각 다른 SSL 인증서를 설정 할 수 있다.

예제)
<VirtualHost <IP ADDRESS 1>:80>
ServerName test1.domain
DocumentRoot <dir>
SSLWallet  <dir>/wallet
</VirtualHost>

<VirtualHost <IP ADDRESS 2>:80>
ServerName test2.domain
DocumentRoot <dir>
SSLWallet <dir>/wallet
</VirtualHost>

=====

=====

(3) 각각의 Virtual Host 별로 각각 다른 port 를 사용한다면 
한개의 ip address 를 사용하여 다음처럼 각각 다른 SSL 인증서를 설정 할 수 있습니다.

예제)
<VirtualHost <IP ADDRESS 1>:80>
ServerName test1.domain
DocumentRoot <dir>
SSLWallet <dir>/wallet
</VirtualHost>

<VirtualHost <IP ADDRESS 1>:81>
ServerName test2.domain
DocumentRoot <dir>
SSLWallet <dir>/wallet
</VirtualHost>

=====