개요
Ncloud (네이버 클라우드) Rocky Linux (록키 리눅스) 서버에 Apache 웹서버를 설치하고, HTTPS 접속을 위한 SSL 인증서 설정하고, HTTP로 접속 시에 HTTPS로 리다이렉트하는 방법까지 정리해보겠습니다.
테스트 환경
테스트에 사용할 서버 환경은 다음과 같습니다.
⁃ 웹서버: Apache 2.4
⁃ 테스트 사이트: rocky-https-test.com
패키지 업데이트
우선 패키지 관련한 보안-버그 수정 사항만 최소한으로 업데이트를 해보겠습니다.
~# dnf -y upgrade-minimal
~# man dnf
#--- 중략 ---#
Upgrade-Minimal Command
Command: upgrade-minimal
Aliases: up-min
Deprecated aliases: update-minimal
Apache 웹서버 설치
- Apache 버전 확인
[Rocky Linux 8.6]에서 기본으로 지원하는 Apache 버전을 확인해보면 [Apache 2.4]인 것을 확인할 수 있습니다.
~# dnf module list httpd
- Apache 2.4 설치
~# dnf -y install httpd
- Apache 실행, 상태 확인
설치를 마쳤으면 Apache를 실행하고 상태를 확인합니다.
~# systemctl start httpd
~# systemctl status httpd
테스트용 웹사이트 생성
테스트에 필요한 웹사이트 홈 디렉토리와 웹페이지를 생성합니다.
~# 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>
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>
- 설정 파일을 저장한 후에 Apache 데몬을 재시작합니다.
~# systemctl restart httpd
hosts 파일 수정
지금과 같이 테스트용으로 임의 설정한 도메인(rocky-https-test.com)으로 접속하게 될 경우에는 hosts 파일을 수정해야 합니다.
실제 도메인을 사용할 경우에는 아래 과정이 필요 없기에
다음 단계로 바로 이동하시면 됩니다.
윈도우 10에서 hosts 파일은 C:\Windows\System32\drivers\etc 에 존재하는데 직접 수정할 수가 없으므로 다음과 같은 단계를 거쳐야 합니다.
- C:\Windows\System32\drivers\etc\hosts 파일을 임의의 작업 폴더 (예: D:\Work)로 복사합니다.
- 복사한 hosts 파일을 수정해서 123.456.789.123 rocky-https-test.com 처럼 접속할 IP 주소와 도메인을 추가합니다.
- 수정한 파일을 C:\Windows\System32\drivers\etc 위치로 덮어쓰기 합니다.
- 덮어쓰기 할 때 관리자 권한이 필요하다는 안내 메시지가 나타나면 [계속] 버튼을 클릭합니다.
ACG (방화벽) 설정
테스트로 생성했던 서버를 선택하고 [ACG 수정] 버튼을 클릭해서 적용된 ACG를 확인합니다.
- ACG 수정 화면에서 현재 적용된 ACG 이름을 확인할 수 있습니다.
- [Server] - [ACG]에서 위에서 확인한 ACG를 선택하고 [ACG 설정]을 클릭합니다.
내부 테스트용 ACG 설정
내부 테스트용 설정은 ACG 규칙 설정 화면에서 [Inbound] 탭에서 [myIp] 버튼을 클릭해서 현재 접속한 PC나 회사 IP를 입력하고, HTTP용 80포트와 HTTPS용 443포트를 추가합니다.
라이브 서비스용 ACG 설정
라이브 서비스용 설정은 접근 소스에는 [0.0.0.0/0]을 입력하고, 마찬가지로 HTTP용 80포트와 HTTPS용 443포트를 추가합니다.
HTTP 접속 테스트
ACG 설정을 마쳤으면 웹브라우저에 테스트용 사이트의 주소 [http://rocky-https-test.com]으로 접속을 해보면 문제 없이 잘 접속되는 것을 확인할 수 있습니다.
SSL 인증서 설정
mod_ssl 설치
~# dnf -y install mod_ssl
- 우선 인증서 저장용 디렉토리를 생성합니다.
~# mkdir -p /root/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
- 인증서 파일이 제대로 생성되었는지 확인합니다.
~# ls -al /root/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>
- 정식 인증서에서는 [SSLCertificateFile], [SSLCertificateKeyFile] 외에도 [SSLCertificateChainFile], [SSLCACertificateFile] 등의 키 설정이 필요하게 되는데, 자세한 내용은 인증서 발급 대행사에서 인증서를 발급 받을 때 포함되어 있는 가이드 문서를 참고하시면 됩니다.
- 설정 파일을 저장한 후에 Apache 데몬을 재시작합니다.
~# systemctl restart httpd
HTTPS 접속 테스트
설정을 마쳤으면 웹브라우저에서 HTTPS로 [https://rocky-https-test.com]에 접속을 해보면 문제 없이 잘 접속되는 것을 확인할 수 있습니다.
인증서 확인
HTTPS로 테스트 사이트에 접속 후에 인증서를 확인해보면 위에서 테스트로 생성했던 정보가 제대로 설정되어 있는 것을 확인할 수 있습니다.
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>
리다이렉트 여부 확인
웹브라우저에서 [F12] 키로 개발자 모드로 변경한 후에 [http://rocky-https-test.com/]로 접속을 해보면 아래 스샷처럼 HTTP 301 상태코드를 반환하면서 [https://rocky-https-test.com/]로 리다이렉트된 것을 확인할 수 있습니다.
방법 - 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>
참고 URL
- Rocky Linux Apache Multiple Site 설정 가이드
- Rocky Linux Apache with ‘mod_ssl’ 가이드