아마존 리눅스 2023 SSL 인증서 쉬운 발급 방법을 알려드립니다. 워드프레스나 티스토리 혹은 네이버등의 블로그를 운영하려면 나만의 도메인 주소를 만들고 이를 안전하게 연결하기 위해 SSL 인증서를 발급받게 됩니다. 흔히, ‘https://도메인주소’ 의 형식으로 접속을 하게 되는데 여기에서 https가 바로 SSL 인증서가 발급 되었다는 뜻입니다.
카페24나 클라우드 웨이즈 등의 서버를 이용하는 경우에는 SSL 인증서 발급이 비교적 수월한 편입니다. 그러나 아마존 리눅스 서버의 경우는 서버세팅을 세세하게 직접 만져야 하고 절차도 까다로워 타 플랫폼에 비해 난이도가 높은 편입니다.
필자 역시 아마존 리눅스 2023 서버를 운영중이며 SSL 발급에 어려움을 겪었던 바, 초기 서버세팅을 했던 경험을 바탕으로 최대한 쉽게 SSL 발급방법에 대해 소개하겠습니다.
[함께 보면 좋은 글 추천]
1. SSL 인증서란?
SSL 인증서는 웹 브라우저와 서버 간의 안전한 연결을 제공하는 디지털 인증서로 웹사이트를 개설하고 운영한다면 반드시 발급받아야 하는 필수 항목입니다. Secure Sockets Layer의 약자로 TLS (Transport Layer Security)로 알려진 보안 프로토콜의 전신입니다. 그러나 흔히 SSL 로 알려져 있습니다.
SSL 인증서의 특징은 아래와 같습니다.
- 암호화: SSL 인증서는 사용자와 서버 간의 데이터를 암호화하여 중간자 공격 (Man-in-the-Middle Attack)이나 데이터 도청을 방지합니다.
- 인증: 인증서는 웹사이트의 진위를 확인합니다. 이로 인해 사용자는 자신이 방문하는 웹사이트가 그 웹사이트의 실제 소유자가 운영하는 것임을 확신할 수 있습니다.
- 신뢰: SSL 인증서는 사용자에게 사이트가 안전하다는 신뢰를 제공합니다. 웹 브라우저의 주소창에 보안 잠금 아이콘이 표시되며, 보통 “https://”로 시작하는 URL을 사용합니다.
- 데이터 무결성: 전송 중인 데이터가 변경되거나 손상되지 않았음을 보장합니다.
SSL 인증서의 주요 종류는 아래와 같습니다.
- 도메인 유효성 검사 (DV) 인증서: 도메인의 소유권만 확인합니다. 가장 기본적인 SSL 인증서로, 일반적으로 가장 저렴합니다.
- 조직 유효성 검사 (OV) 인증서: 도메인 소유권 뿐만 아니라 해당 조직의 실체성도 검증합니다.
- 확장 유효성 검사 (EV) 인증서: 가장 높은 수준의 인증을 제공하며, 도메인, 조직, 그리고 조직의 법적, 물리적, 운영적 존재를 확인합니다. 이 인증서는 주소 표시줄에 녹색으로 회사 이름이 표시되는 특별한 시각적 표시를 제공합니다.
2. 아마존 리눅스 2023 SSL 인증서 설치 사전 작업
아마존 리눅스 2023 서버에 SSl 인증서를 설치하기 위해서 먼저, 윈도우는 Xshell, Mac OS Termius 프로그램을 통해 SSH에 로그인 및 접속을 해야합니다. Xshell과 Termius는 UI만 다를뿐 경로 및 명령어는 동일함을 알려드립니다.
또한, SSL 인증서 발급은 무료로 이용할 수 있고 안정성이 뛰어난 Let’s Encrypt 인증서 발급기관을 이용합니다.
1. 데이터베이스의 최상위 사용자의 권한 부여:
sudo su
설명: 보통 root 권한을 주기 위해 명령어 작성시 ‘sudo 명령어’의 형태로 적게 되는데 ‘sudo su‘를 가장 먼저 입력하게 되면 입력란이 $에서 #으로 바뀌면서 root 권한이 부여되기 때문에 명령어 마다 sudo를 입력할 필요가 없어집니다. 다시 root 권한을 없애려면 exit 명령어를 입력하면 됩니다.
2. 필요한 패키지 설치:
dnf install openssl mod_ssl
설명: openssl
및 mod_ssl
패키지를 설치하는 명령어 입니다. mod_ssl
은 Apache 웹 서버에서 SSL 및 TLS 암호화를 지원합니다.
3. Python3 및 관련 라이브러리 설치:
dnf install -y python3 augeas-libs pip
설명: python3
, augeas-libs
, 그리고 pip
를 설치하는 명령어 입니다. 이들은 certbot 설치 및 작동에 필요한 도구들 입니다. certbor은 Let’s Encrypt 인증서 발급기관에서 제공하는 무료 SSL/TLS 인증서를 쉽게 얻고 설치할 수 있도록 도와주는 도구입니다.
4. Python 가상 환경 생성:
python3 -m venv /opt/certbot/
설명: /opt/certbot/
디렉토리에 Python 가상 환경을 생성하게 하는 명령어로 파이썬 언어를 사용합니다.
5. 가상 환경 내용 확인:
ls /opt/certbot
설명: /opt/certbot/
디렉토리의 내용을 나열하여 확인합니다. ls 명령어는 폴더안의 파일을 나열해주는 명령어 입니다.
6. pip 업그레이드:
/opt/certbot/bin/pip install --upgrade pip
설명: 가상 환경에서 pip를 최신 버전으로 업그레이드합니다. 3번 항목에서 설치했던 pip를 업그레이드 시키는 명령어로 pip란 “Pip Installs Packages”의 약자로, Python 프로그래밍 언어의 패키지 관리 시스템입니다. pip
를 사용하면 Python 패키지 저장소인 PyPI(Pythom Package Index)에서 Python 라이브러리와 도구를 쉽게 설치하고 관리할 수 있습니다. 마치, node js의 npm 패키지와 비슷하다고 생각하면 됩니다.
7. Certbot 설치:
/opt/certbot/bin/pip install certbot
설명: 가상 환경에서 Certbot을 설치하는 명령어 입니다.
8. Certbot 바이너리 심볼릭 링크 생성:
ln -s /opt/certbot/bin/certbot /usr/bin/certbot
설명: ln 은 단축 파일을 만드는 명령어이며 위의 명령어로 가상환경에 설치했던 certbot의 위치를 알려줍니다. 그렇지 않으면 certbot의 위치를 찾지 못해 certbot not found 라는 에러메세지가 생성됩니다.
이를 심볼릭 링크라 하며 Certbot을 설치하고 사용하려면 종종 바이너리 파일에 대한 심볼릭 링크(symbolic link)를 생성해야 합니다.
심볼릭 링크는 한 파일을 다른 파일로 가리키는 ‘포인터’와 같은 역할을 합니다. 파일 시스템에서 원본 파일과 같은 방식으로 동작하며, 실제로는 원본 파일을 가리키는 경로에 불과합니다. 실제 데이터는 원본 파일에만 저장되므로 심볼릭 링크를 삭제해도 원본 파일에는 영향을 주지 않습니다.
9. Apache 서버 중지:
systemctl stop httpd
설명: Apache 웹 서버를 중지합니다. --standalone
옵션을 사용하여 certbot을 실행하려면 웹 서버가 중지된 상태여야 합니다.
2. 아마존 리눅스 2023 SSL 인증서 발급 방법
이제 certbot을 통해 SSL 인증서를 발급받고 우리 도메인과 연결시켜 주겠습니다.
1. certbot을 사용해 인증서를 발급받습니다.
certbot certonly --standalone
설명: --standalone
옵션을 사용하여 SSL 인증서를 발급 받습니다. 프롬프트가 나타나면 이메일 주소를 입력한 뒤 Y, N 입력 이후에 도메인 이름(들)을 입력합니다.
www.도메인명.com 과 도메인.com(www없이) 이렇게 두 개의 도메인에 둘 다 ssl 인증서를 발급 받습니다. 만약 오류가 나게 되는 경우를 대비하기 위해서 입니다. 이메일 주소와 첫 번째 도메인을 입력한 뒤 다시 certbot certonly –standalone 입력하면 추가로 두 번째 도메인을 입력할 수 있습니다.
2. Apache 서버 시작:
systemctl start httpd
설명: Apache 웹 서버를 다시 시작합니다.
3. SSL 설정 파일 편집:
vi /etc/httpd/conf.d/ssl.conf
설명: Apache의 SSL 설정 파일을 열어 편집하는 명령어 입니다.
1번에서 인증서는 발급받았지만 Apache의 설정 프로그램에 설정을 하지 않았기 때문에 아직 https로 연결이 안됩니다. 여기에서 인증서 파일 경로, 개인 키 경로 등을 지정하고 다른 SSL 관련 설정을 조정할 수 있습니다. 위 명령어를 입력하면 편집 화면으로 넘어가게 됩니다.
4. SSL 설정 파일 편집:
ssl.conf 파일이 열리면 설정 파일이 열리면 페이지 다운 키(혹은 방향키)로 문서의 제일 하단으로 이동합니다. i 를 입력하여 insert모드로 편집할 수 있습니다. i를 누르고 아래의 편집 문구를 도메인명을 넣어서 추가하면 됩니다. www.도메인명.com 과 도메인명.com 두 가지 경우 둘 다 설정하는 편집 문구입니다. 해당 자리에 본인 소유의 도메인 명을 넣으면 됩니다.
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName 도메인명.com
ServerAlias www.도메인명.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/도메인명.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/도메인명.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/도메인명.com/chain.pem
</VirtualHost>
<VirtualHost *:80>
ServerName 도메인명.com
ServerAlias www.도메인명.com
Redirect permanent / https://도메인명.com/
</VirtualHost>
수정이 완료되면 esc 를 누른 후 :wq(콜론 wq) 를 눌러서 설정 파일에서 빠져 나옵니다. 그리고 Apache 서버를 재 시작 합니다.
위의 명령어에서 <VirtualHost *:80> 부분은 서브도메인 으로 접속시 Redirect 도메인으로 연결되게 해주는 명령어 입니다.
Apache 서버 재시작:
sudo systemctl restart httpd
설명: Apache 웹 서버를 재 시작합니다. 서버를 재 시작하여 새로운 설정이 적용해 줍니다.
3. SSL 인증서 자동갱신 설정 방법
Let’s Encrypt 무료 인증서이기 때문에 유효 기간이 3개월 밖에 되지 않습니다. 때문에 3개월 마다 계속 갱신을 해주어야 합니다. 이 부분을 자동으로 갱신하는 방법을 알아보겠습니다.
1. cronie-noanacron 패키지 설치:
sudo dnf install cronie-noanacron
설명: cronie-noanacron
패키지를 설치합니다. 이 패키지는 cron
작업 스케쥴러와 관련된 것으로, 주기적인 작업을 자동으로 실행하기 위해 사용됩니다. Is this ok 를 물으면 [y/N] y를 선택합니다.
2. crontab 파일 편집:
sudo vi /etc/crontab
설명: 시스템의 crontab
파일을 열어 편집합니다. crontab
은 cron
작업 스케쥴러를 위한 설정 파일로, 이 파일을 통해 주기적으로 실행할 작업을 설정할 수 있습니다.
3. 자동 갱신 설정 추가:
웹서버가 꺼져있을 때에만 유효한 코드 :
30 1 * * 2 root /usr/bin/certbot renew --post-hook "systemctl reload httpd”
웹서버가 켜져있을 때에만 유효한 코드 :
30 1 * * 2 root /usr/bin/certbot renew --webroot -w /var/www/html --post-hook "systemctl reload httpd"
설명: 매주 화요일 새벽 1시 30분에 인증서 갱신을 시도하는 작업을 추가합니다. 위의 코드에서 /var/www/html 부분은 자신의 사이트가 설치된 디렉토리를 지정해 주면 됩니다.
i를 입력하여 insert 모드로 편집을 하고 설정이 완료되면 esc 를 누른 후 :wq(콜론 wq) 를 눌러서 설정 파일에서 빠져 나옵니다.
30 1 * * 2
: 이 부분은 cron의 시간 및 날짜 표현 방식으로, 매주 화요일 새벽 1시 30분을 의미합니다.root
: 작업을 실행할 사용자를 의미합니다. 여기서는root
사용자로 설정되어 있습니다./usr/bin/certbot renew
:certbot
을 사용하여 인증서 갱신을 시도합니다.--webroot -w /var/www/html
: 인증서 갱신을 위한 웹 루트 디렉토리를 지정합니다. 여기서는/var/www/html
디렉토리를 사용합니다.--post-hook "systemctl reload httpd"
: 인증서 갱신 후에 실행될 명령입니다. 여기서는 Apache 서버의 설정을 다시 불러오는reload
명령을 실행하도록 설정되어 있습니다.
4. SSL 수동 갱신 방법:
혹 사이트를 운영하시다가 크론탭에 문제가 있거나 혹은 다른 문제로 SSL이 갱신이 되지 않을때는 아래의 코드로 수동 갱신이 가능합니다.
sudo /usr/bin/certbot renew –webroot -w /var/www/calccombo –post-hook “systemctl reload httpd”
–webroot 이부분에서 -가 2개 입니다.
–post-hook 이부분에서 -가 2개 입니다.
이로써, 아마존 리눅스 2023서버에 SSL 인증서 발급 및 설치를 하였고 자동 갱신까지 설정하였습니다.