Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법입니다

개요

Ncloud (네이버 클라우드) Rocky Linux (록키 리눅스) 서버에 Apache 웹서버를 설치하고, HTTPS 접속을 위한 SSL 인증서 설정하고, HTTP로 접속 시에 HTTPS로 리다이렉트하는 방법까지 정리해보겠습니다.

테스트 환경

테스트에 사용할 서버 환경은 다음과 같습니다.

⁃ OS: Rocky Linux 8.6
⁃ 웹서버: Apache 2.4
⁃ 테스트 사이트: rocky-https-test.com
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

패키지 업데이트

우선 패키지 관련한 보안-버그 수정 사항만 최소한으로 업데이트를 해보겠습니다.

~# dnf -y upgrade-minimal
[dnf upgrade-minimal]과 [dnf update-minimal]의 차이점에 대해 [man dnf] 명령어로 매뉴얼을 살펴보면 Rocky Linux에서 패키지 업데이트를 위한 기본 명령어는 [dnf upgrade-minimal]이며, [dnf update-minimal]는 더 이상 사용되지 않는 별칭이라고 합니다.
~# man dnf
#--- 중략 ---#
Upgrade-Minimal Command
       Command: upgrade-minimal
       Aliases: up-min
       Deprecated aliases: update-minimal
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

Apache 웹서버 설치

  • Apache 버전 확인
    [Rocky Linux 8.6]에서 기본으로 지원하는 Apache 버전을 확인해보면 [Apache 2.4]인 것을 확인할 수 있습니다.
~# dnf module list httpd
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • Apache 2.4 설치
~# dnf -y install httpd
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • Apache 실행, 상태 확인
    설치를 마쳤으면 Apache를 실행하고 상태를 확인합니다.
~# systemctl start httpd
~# systemctl status httpd
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

테스트용 웹사이트 생성

테스트에 필요한 웹사이트 홈 디렉토리와 웹페이지를 생성합니다.

~# mkdir -p  /ncloud/data/www/rocky-https-test.com/
~# vim /ncloud/data/www/rocky-https-test.com/index.html
<!doctype html>
<html lang="kr">
 <head>
  <meta charset="UTF-8">
  <title>Rocky Linux HTTPS Test Site</title>
 </head>
 <body>
    <h1>Rocky Linux HTTPS Test Site</h1>
 </body>
</html>
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

Apache 환경 설정 파일 생성

rocky-https-test.com 웹사이트에 대한 Apache 환경 설정 파일을 생성하고, HTTP 접속에 필요한 80 포트용 설정을 추가합니다.

~# vim /etc/httpd/conf.d/rocky-https-test.com.conf
<VirtualHost *:80>
    ServerName rocky-https-test.com
    DocumentRoot /ncloud/data/www/rocky-https-test.com
    DirectoryIndex index.htm index.html

    CustomLog "/var/log/httpd/rocky-https-test.com-access_log" combined
    ErrorLog  "/var/log/httpd/rocky-https-test.com-error_log"

    <Directory /ncloud/data/www/rocky-https-test.com>
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • 설정 파일을 저장한 후에 Apache 데몬을 재시작합니다.
~# systemctl restart httpd
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

hosts 파일 수정

지금과 같이 테스트용으로 임의 설정한 도메인(rocky-https-test.com)으로 접속하게 될 경우에는 hosts 파일을 수정해야 합니다.
실제 도메인을 사용할 경우에는 아래 과정이 필요 없기에 다음 단계로 바로 이동하시면 됩니다.

윈도우 10에서 hosts 파일은 C:\Windows\System32\drivers\etc 에 존재하는데 직접 수정할 수가 없으므로 다음과 같은 단계를 거쳐야 합니다.

  1. C:\Windows\System32\drivers\etc\hosts 파일을 임의의 작업 폴더 (예: D:\Work)로 복사합니다.
  2. 복사한 hosts 파일을 수정해서 123.456.789.123 rocky-https-test.com 처럼 접속할 IP 주소와 도메인을 추가합니다.
  3. 수정한 파일을 C:\Windows\System32\drivers\etc 위치로 덮어쓰기 합니다.
  4. 덮어쓰기 할 때 관리자 권한이 필요하다는 안내 메시지가 나타나면 [계속] 버튼을 클릭합니다.
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
Ncloud CentOS 서버에 NginX SSL 인증서를 설정하는 방법
Ncloud CentOS 서버에 NginX SSL 인증서를 설정하는 방법

ACG (방화벽) 설정

테스트로 생성했던 서버를 선택하고 [ACG 수정] 버튼을 클릭해서 적용된 ACG를 확인합니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • ACG 수정 화면에서 현재 적용된 ACG 이름을 확인할 수 있습니다.
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • [Server] - [ACG]에서 위에서 확인한 ACG를 선택하고 [ACG 설정]을 클릭합니다.
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

내부 테스트용 ACG 설정

내부 테스트용 설정은 ACG 규칙 설정 화면에서 [Inbound] 탭에서 [myIp] 버튼을 클릭해서 현재 접속한 PC나 회사 IP를 입력하고, HTTP용 80포트와 HTTPS용 443포트를 추가합니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

라이브 서비스용 ACG 설정

라이브 서비스용 설정은 접근 소스에는 [0.0.0.0/0]을 입력하고, 마찬가지로 HTTP용 80포트와 HTTPS용 443포트를 추가합니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

HTTP 접속 테스트

ACG 설정을 마쳤으면 웹브라우저에 테스트용 사이트의 주소 [http://rocky-https-test.com]으로 접속을 해보면 문제 없이 잘 접속되는 것을 확인할 수 있습니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

SSL 인증서 설정

mod_ssl 설치

~# dnf -y install mod_ssl
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • 우선 인증서 저장용 디렉토리를 생성합니다.
~# mkdir -p /root/ssl/
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

SSL 테스트 인증서 생성

여기서는 테스트용 인증서를 생성해서 사용하게 되는데, 정식 서비스의 경우 SSL 인증서 발급 기관에서 정식 인증서를 발급 받아 사용하게 됩니다.
정식 인증서를 사용하는 경우에는 테스트 인증서 생성 단계는 건너띄고 다음 단계로 이동하시면 되겠습니다.

~# openssl req -newkey rsa:2048 \
-nodes -keyout /root/ssl/rocky-https-test.com.key \
-x509 -days 365 -out /root/ssl/rocky-https-test.com.crt
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
  • 인증서 파일이 제대로 생성되었는지 확인합니다.
~# ls -al /root/ssl/
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

HTTPS용 환경 설정 추가

앞에서 생성했던 환경 설정 파일 [rocky-https-test.com.conf]에 HTTPS용 설정을 추가합니다.

~# vim /etc/httpd/conf.d/rocky-https-test.com.conf
<VirtualHost *:443>
    ServerName rocky-https-test.com
    DocumentRoot /ncloud/data/www/rocky-https-test.com
    DirectoryIndex index.htm index.html

    CustomLog "/var/log/httpd/rocky-https-test.com-ssl-access_log" combined
    ErrorLog  "/var/log/httpd/rocky-https-test.com-ssl-error_log"

    SSLEngine on
    SSLProtocol -all +TLSv1.2 +TLSv1.3 
    SSLHonorCipherOrder on
    SSLCipherSuite PROFILE=SYSTEM

    SSLCertificateFile /root/ssl/rocky-https-test.com.crt
    SSLCertificateKeyFile /root/ssl/rocky-https-test.com.key

    <Directory /ncloud/data/www/rocky-https-test.com>
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
- SSLProtocol: SSL Protocol에 대한 설정은 [TLS v1.2], [TLS v1.3] 만 허용하고, 나머지 Protocol은 모두 거부하도록 설정했습니다.
- 정식 인증서에서는 [SSLCertificateFile], [SSLCertificateKeyFile] 외에도 [SSLCertificateChainFile], [SSLCACertificateFile] 등의 키 설정이 필요하게 되는데, 자세한 내용은 인증서 발급 대행사에서 인증서를 발급 받을 때 포함되어 있는 가이드 문서를 참고하시면 됩니다.


  • 설정 파일을 저장한 후에 Apache 데몬을 재시작합니다.
~# systemctl restart httpd
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

HTTPS 접속 테스트

설정을 마쳤으면 웹브라우저에서 HTTPS로 [https://rocky-https-test.com]에 접속을 해보면 문제 없이 잘 접속되는 것을 확인할 수 있습니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

인증서 확인

HTTPS로 테스트 사이트에 접속 후에 인증서를 확인해보면 위에서 테스트로 생성했던 정보가 제대로 설정되어 있는 것을 확인할 수 있습니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

HTTP 접속 시 HTTPS로 리다이렉트

이제 HTTPS 설정까지 마쳤으니 HTTP로 접속하는 경우에 HTTPS로 리다이렉트 시키는 설정을 적용해보겠습니다.

방법 - 1

첫번째 방법은 [Redirect] 옵션을 이용하는 방법입니다.
앞에서 설정한 HTTP용 환경 설정에서 [ServerName]을 제외한 다른 항목들은 모두 삭제하거나 주석처리한 후에 리다이렉트 설정을 추가합니다.

~# vim /etc/httpd/conf.d/rocky-https-test.com.conf
<VirtualHost *:80>
    ServerName rocky-https-test.com

    Redirect permanent / https://rocky-https-test.com/
    # 또는
    # Redirect 301 / https://rocky-https-test.com/
</VirtualHost>    
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

리다이렉트 여부 확인

웹브라우저에서 [F12] 키로 개발자 모드로 변경한 후에 [http://rocky-https-test.com/]로 접속을 해보면 아래 스샷처럼 HTTP 301 상태코드를 반환하면서 [https://rocky-https-test.com/]로 리다이렉트된 것을 확인할 수 있습니다.

Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

방법 - 2

두번째 방법은 [RewirteRule] 옵션을 이용하는 방법입니다.
첫번째 방법이 더 간편하기는 하지만, 리다이렉트 시킬 때 HTTP 상태코드 뿐만 아니라 HTTP Header 값 등 다양한 설정이 필요한 경우에는 [RewirteRule]을 이용하는 두번째 방법을 사용해야 합니다.

<VirtualHost *:80>
    ServerName rocky-https-test.com

    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost> 
Ncloud Rocky Linux 서버 Apache에 HTTPS 접속을 위한 SSL 인증서 설정하는 방법

참고 URL

  1. Rocky Linux Apache Multiple Site 설정 가이드
  2. Rocky Linux Apache with ‘mod_ssl’ 가이드