사내에 여러 보안 사항을 DEV 및 QA 서버에서 테스트 하기 위해,

기존 SSL이 적용되지 않은 DEV 및 QA 서버에 SSL을 적용하였는데,

https://{IP} 로 입력하여 해당 서비스에 접근할 경우, 다음과 같이 SSL이 적용되지 않는 문제를 발견하였다.

 

http://{IP} -> https://{domain name} 으로 리다이렉션하는 설정은 쉽게 넣었는데,

https://{IP} -> https://{domain name} 은 찾는게 쉽지 않았다...

 

참고로, http://{IP} -> https://{domain name} 이 방법은, 다음과 같은 방법으로 진행하였다.

<VirtualHost *:80>
    RewriteEngine on
    # IP가 123.123.123.123 이라고 가정
    RewriteCond %{HTTP_HOST} ^123\.123\.123\.123$
    RewriteRule (.*) https://service.mydomain.co.kr%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "${Document_Root_Path}"
    ServerName service.mydomain.co.kr
    ErrorLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-error_log.%Y%m%d 86400 +540"
    CustomLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-access_log.%Y%m%d 86400 +540" combined

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://service.mydomain.co.kr%{REQUEST_URI} [L,R=301]

</VirtualHost>

 

물론 사이트를 단순히 접속하는 목적이라면, [고급] 탭을 눌러 안전하지 않은 연결을 통해 접속이 가능하지만,

사이트 관리자의 입장에서는 이런식으로 SSL을 우회할 가능성이 있기 때문에, https://{IP} 로 보내는 요청도 모두 DNS 서버에 등록된 domain name으로, 즉, https://{domain name} 으로 리다이렉션 시키고 싶어졌다.

 

나와 같은 고민을 한 해외 서버 관리자들이 꽤 있는 것 같은데, 아래 방법이 나의 케이스와 가장 잘 맞아 참고하였다.

https://serverfault.com/questions/993925/redirect-ip-address-to-domain-name-on-apache

 

Redirect IP address to domain name on apache

I am pretty computer savvy, but not with setting up web servers. I have a domain name that has an SSL certificate, so that https://example.org works and http://example.org redirects there. BUT, h...

serverfault.com


필자의 경우, https://{IP}의 리다이렉션 설정 전, 443 포트에 대한 VirtualHost 설정은 다음과 같았다.

<VirtualHost *:443>
    DocumentRoot ${SITE_DOCUMENT_ROOT_PATH}
    ServerName service.mydomain.co.kr
    
    SSLEngine On
    
    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!3DES:!RC4

    SSLCertificateFile ${Certificate_Path}
    SSLCertificateKeyFile ${Certificate_Keyfile_Path}

    ErrorLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-error_log.%Y%m%d 86400 +540"
    CustomLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-access_log.%Y%m%d 86400 +540" combined

    
    # WebLogic과 연동하기 위한 설정
    <IfModule mod_weblogic.c>
     WebLogicCluster {Server IP}:{Service Port}
     ConnectRetrySecs 2
     ConnectTimeoutSecs 10
     FileCaching OFF
     WLIOTimeoutSecs 18000
     DynamicServerList OFF
     Idempotent OFF
     MatchExpression *
    </IfModule>
    
</VirtualHost>

위 VirtualHost 설정을 아래와 같이, Rewrite 설정을 추가하였다.

 

여기서 주의할 점은, SSL 설정 이전에 Rewrite 관련 설정을 넣고, Rewrite의 조건을 원하는 domain name이 아닌 모든 요청일 경우, 원하는 domain name으로 무조건 리다이렉션 하도록 설정하는 것이다.

이러면, 원하는 domain name으로 들어온 요청은 조건에 해당하지 않으므로, 자연스레 SSL 설정으로 넘어가게 된다.

<VirtualHost *:443>
    DocumentRoot ${SITE_DOCUMENT_ROOT_PATH}
    ServerName service.mydomain.co.kr
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^service\.mydomain\.co\.kr$
    RewriteRule ^(.*)$ https://service.mydomain.co.kr$1 [R=permanent,L]
    
    SSLEngine On
    
    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLCipherSuite HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!3DES:!RC4

    SSLCertificateFile ${Certificate_Path}
    SSLCertificateKeyFile ${Certificate_Keyfile_Path}

    ErrorLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-error_log.%Y%m%d 86400 +540"
    CustomLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/logs/site-access_log.%Y%m%d 86400 +540" combined

    
    # WebLogic과 연동하기 위한 설정
    <IfModule mod_weblogic.c>
     WebLogicCluster {Server IP}:{Service Port}
     ConnectRetrySecs 2
     ConnectTimeoutSecs 10
     FileCaching OFF
     WLIOTimeoutSecs 18000
     DynamicServerList OFF
     Idempotent OFF
     MatchExpression *
    </IfModule>
    
</VirtualHost>

 

이게 정석적인 방법인지는 모르겠으나, 부디 나와 같은 삽질을 다른 사람들은 많이 하지 않도록,

https://{IP} -> https://{domain name} 방법을 이렇게 포스팅으로 공유해본다..!

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기