레이블이 웹서버인 게시물을 표시합니다. 모든 게시물 표시
레이블이 웹서버인 게시물을 표시합니다. 모든 게시물 표시

2025년 4월 15일 화요일

아파치 웹서버에 여러SSL(SNI) 설정하는 방법

아파치 웹서버에 SNI 설정하는 방법

SNI(Server Name Indication)란?

SNI(Server Name Indication)는 TLS 프로토콜의 확장 기능으로, 클라이언트가 서버에 HTTPS 연결을 시도할 때 접속하려는 호스트 이름을 TLS 핸드셰이크 과정 초기에 서버에 알려주는 기술입니다. 이를 통해 하나의 IP 주소와 포트(일반적으로 443)에서 여러 도메인의 SSL/TLS 인증서를 호스팅할 수 있게 됩니다.

사전 요구사항

아파치 웹서버에서 SNI를 사용하기 위해서는 다음 조건이 필요합니다:

  1. Apache 2.2.12 이상 버전
  2. OpenSSL 0.9.8f 이상 버전
  3. mod_ssl 모듈이 활성화되어 있어야 함

SNI 설정 방법

1. 버전 확인

먼저 아파치와 OpenSSL 버전이 SNI를 지원하는지 확인합니다:

apache2 -v
openssl version

2. mod_ssl 모듈 활성화 확인

mod_ssl 모듈이 활성화되어 있는지 확인합니다:

apache2ctl -M | grep ssl

활성화되어 있지 않다면 아래 명령어로 활성화합니다:

a2enmod ssl

3. SSL 설정 파일 준비

Apache 설정 파일은 일반적으로 다음 위치 중 하나에 있습니다:

  • /etc/apache2/apache2.conf (Debian/Ubuntu)
  • /etc/httpd/conf/httpd.conf (RHEL/CentOS)
  • 또는 /etc/apache2/conf.d/ssl.conf 또는 /etc/apache2/sites-available/ 디렉토리

4. VirtualHost 설정

각 도메인에 대해 별도의 VirtualHost를 설정합니다. SNI는 Apache에서 별도 설정이 필요 없이 지원되는 버전에서는 기본적으로 활성화되어 있습니다.

기본 설정 예시:

# SSL 포트 리스닝 설정
Listen 443

# 모든 IP 주소의 443 포트 수신 설정
NameVirtualHost *:443

# 첫 번째 도메인 VirtualHost 설정
<VirtualHost *:443>
    DocumentRoot /var/www/site1
    ServerName example.com
    ServerAlias www.example.com
    
    SSLEngine on
    SSLCertificateFile /경로/example.com.crt
    SSLCertificateKeyFile /경로/example.com.key
    SSLCertificateChainFile /경로/chain.pem
    
    # 추가 SSL 설정
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5
    
    # 기타 설정
    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>

# 두 번째 도메인 VirtualHost 설정
<VirtualHost *:443>
    DocumentRoot /var/www/site2
    ServerName second-example.com
    ServerAlias www.second-example.com
    
    SSLEngine on
    SSLCertificateFile /경로/second-example.com.crt
    SSLCertificateKeyFile /경로/second-example.com.key
    SSLCertificateChainFile /경로/chain.pem
    
    # 추가 SSL 설정
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5
    
    # 기타 설정
    ErrorLog ${APACHE_LOG_DIR}/second-example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/second-example.com-access.log combined
</VirtualHost>

5. Apache 2.4.8 이상 버전에서의 설정

Apache 2.4.8 이상에서는 SSLCertificateChainFile 지시문이 더 이상 사용되지 않으므로(deprecated), 대신 SSLCACertificateFile 지시문을 사용합니다:

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateKeyFile /경로/example.com.key
    SSLCertificateFile /경로/example.com.crt
    SSLCACertificateFile /경로/root-chain-bundle.pem
    
    # 기타 설정...
</VirtualHost>

6. 설정 테스트 및 적용

설정 파일을 수정한 후 문법 오류를 확인합니다:

apache2ctl configtest
# 또는
apachectl -t

설정이 정상이면 아파치 웹서버를 재시작합니다:

systemctl restart apache2
# 또는
service apache2 restart
# 또는
apachectl restart

주의사항

  1. SNI 클라이언트 호환성: 구형 브라우저 및 운영체제(Windows XP의 IE 등)는 SNI를 지원하지 않습니다. 대부분의 최신 브라우저는 SNI를 지원합니다.

  2. 첫 번째 VirtualHost의 중요성: SNI 요청이 없거나 일치하는 ServerName이 없을 경우, 아파치는 첫 번째 VirtualHost의 SSL 인증서를 사용합니다. 따라서 첫 번째 VirtualHost는 가장 일반적인 또는 기본 도메인으로 설정하는 것이 좋습니다.

  3. 인증서 유효성: 각 VirtualHost에 설정된 ServerName과 인증서의 CN(Common Name) 또는 SAN(Subject Alternative Name)이 일치해야 합니다.

  4. 오류 로깅: 설정 후 웹서버 로그를 확인하여 SSL 관련 오류나 경고가 있는지 확인해야 합니다.

SNI 설정 테스트

설정이 제대로 되었는지 확인하려면 다음 명령어를 사용할 수 있습니다:

openssl s_client -connect example.com:443 -servername example.com

위 명령은 SNI 정보를 포함하여 연결을 시도하며, 서버가 올바른 인증서를 반환하는지 확인할 수 있습니다.

서버가 설정된 각 도메인에 대해 서로 다른 인증서를 반환하는지 확인하려면, 다른 도메인 이름으로도 테스트해 보세요:

openssl s_client -connect example.com:443 -servername second-example.com

이로써 아파치 웹서버에서 SNI를 사용하여 하나의 IP 주소와 포트에서 여러 SSL 도메인을 호스팅할 수 있게 됩니다.

구글 I/O 2025: 이론이 현실이 되다

  구글 I/O 2025: 이론이 현실이 되다 2025년 5월 20일, 미국 캘리포니아 마운틴뷰에서 개최된 구글 I/O 2025는 인공지능 기술의 놀라운 발전과 이를 통한 현실 세계의 변화를 보여주는 무대였습니다. 순다 피차이 구글 CEO가 이끈 이번...