- [Network | Rocky Linux] Let’s Encrypt를 통한 SSL 인증서 발급2024년 07월 18일 12시 23분 07초에 업로드 된 글입니다.작성자: 이주여이
내가 배포했던 프로젝트는 이전까지 HTTP를 사용하고 있었다. HTTP에서 전송하는 데이터는 일반 텍스트로 보안에 취약했으나 이번에 SSL 인증서를 발급하며 적용한 HTTPS는 암호화 및 인증이 존재한다. 이것은 TLS(SSL) 때문인데 일반 HTTP 요청을 암호화하고 해당 요청 및 응답에 디지털 서명을 함으로써 보안 기능을 추가했기 때문에 보안에 더욱 더 강력하다.
1. EPEL 저장소 추가
EPEL은 기본 운영체제에서 제공하지 않는 패키지를 다운 받을 수 있도록 도와주는 추가 패키지 저장소라고 한다.(Let’s Encrypt라는 기관이 비영리기관이라 따로 이렇게 설치를 해줘야하는건가?)
[root@localhost ~]# dnf install epel-release -y
2. Certbot 및 Certbot Apache 플러그인 설치
Certbot은 Let’s Encrypt라는 기관에서 사용하는 프로그램이며 Let’s Encrypt는 사용자에게 무료로 SSL 인증서를 발급해주는 비영리 기관이다.
[root@localhost ~]# dnf install certbot python3-certbot-apache -y
3. Certbot을 사용한 SSL 인증서 발급
나는 도메인이 3개이므로 -d 명령어를 통해 3개의 도메인을 지정했다.
--apache
옵션 명령어는 해당 명령어를 통해 SSL이 발급되면 자동으로 Apache 웹 서버 설정 파일(httpd.conf …)을 자동으로 수정하여 SSL/TLS 인증서를 설정해준다.[root@localhost ~]# certbot --apache -d ljy.r-e.kr -d replay.o-r.kr -d ttoganjip.kro.kr
[root@localhost ~]# certbot --apache -d ljy.r-e.kr -d replay.o-r.kr -d ttoganjip.kro.kr Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): ${이메일 } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Requesting a certificate for ljy.r-e.kr and 2 more domains An unexpected error occurred: Error creating new order :: too many certificates already issued for "kro.kr". Retry after 2024-07-18T06:00:00Z: see https://letsencrypt.org/docs/rate-limits/ Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
보다시피 제일 밑에 에러가 발생했다.
이유인 즉슨
too many certificates already issued for "[kro.kr](http://kro.kr)"
kro.kr 도메인으로 등록한 SSL 인증서가 너무 많아서 오후 3시 이후에 시도하라고 한다.김빠진다.
~ 1시간 후 ~
생각해보니 kro.kr 도메인만 빼고 다른 건 발급받을 수 있을 것 같아 다시 시도해봤다.
이번엔 -d 옵션 명령어를 뺐다.
[root@localhost ~]# certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Which names would you like to activate HTTPS for? We recommend selecting either all domains, or all domains in a VirtualHost/server block. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: ttoganjip.kro.kr 2: replay.o-r.kr 3: ljy.r-e.kr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 3 Requesting a certificate for ljy.r-e.kr Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/ljy.r-e.kr/fullchain.pem Key is saved at: /etc/letsencrypt/live/ljy.r-e.kr/privkey.pem This certificate expires on 2024-10-16. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for ljy.r-e.kr to /etc/httpd/conf/httpd-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://ljy.r-e.kr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
내가 만든 개인 프로젝트 중 요새 작업 중인 블로그는 뒤에 r-e.kr이 붙기 때문에 kro.kr과는 다르게 인증서 발급이 완료됐다는 문구가 떴다.
그럼 o-r.kr이 붙은 것도 등록해줘야겠다!
[root@localhost ~]# certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Which names would you like to activate HTTPS for? We recommend selecting either all domains, or all domains in a VirtualHost/server block. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: ttoganjip.kro.kr 2: replay.o-r.kr 3: ljy.r-e.kr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 2 Requesting a certificate for replay.o-r.kr Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/replay.o-r.kr/fullchain.pem Key is saved at: /etc/letsencrypt/live/replay.o-r.kr/privkey.pem This certificate expires on 2024-10-16. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for replay.o-r.kr to /etc/httpd/conf/httpd-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://replay.o-r.kr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
이로써 문제가 있었던 kro.kr만 빼고 다른 도메인은 SSL 인증서 발급이 완료되었다.
4. 인증서 확인
[root@localhost ~]# certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Found the following certs: Certificate Name: ljy.r-e.kr Serial Number: 31d63facc197da3805164597f8f120767c8 Key Type: ECDSA Domains: ljy.r-e.kr Expiry Date: 2024-10-16 00:07:12+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/ljy.r-e.kr/fullchain.pem Private Key Path: /etc/letsencrypt/live/ljy.r-e.kr/privkey.pem Certificate Name: replay.o-r.kr Serial Number: 4339877116c9dc7bc9b5a67028a8ca0be54 Key Type: ECDSA Domains: replay.o-r.kr Expiry Date: 2024-10-16 00:09:47+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/replay.o-r.kr/fullchain.pem Private Key Path: /etc/letsencrypt/live/replay.o-r.kr/privkey.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4. httpd-le-ssl.conf 확인
SSL 인증서 발급 후 /etc/httpd/conf에 들어가보면 이전과 달리 httpd-le-ssl.conf가 생성된 것을 확인할 수 있다.
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName ljy.r-e.kr ProxyPreserveHost On ProxyPass / http://192.168.56.103:5221/ ProxyPassReverse / http://192.168.56.103:5221/ SSLCertificateFile /etc/letsencrypt/live/ljy.r-e.kr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/ljy.r-e.kr/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName replay.o-r.kr ProxyPreserveHost On ProxyPass / http://192.168.56.103:5222/ ProxyPassReverse / http://192.168.56.103:5222/ SSLCertificateFile /etc/letsencrypt/live/replay.o-r.kr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/replay.o-r.kr/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
4. Apache(httpd) 재시작
[root@localhost ~]# systemctl restart httpd
이렇게까지만 하고 SSL 인증서를 발급받은 도메인으로 들어가보자.
그럼 아직까지 https의 기본 포트인 443을 안열어줬기 때문에 아래와 같이 뜬다.
이제 어떻게 하냐?
포트를 열어주면 된다..
일단 방화벽부터 열자.
[root@localhost conf]# firewall-cmd --permanent --add-service=https success [root@localhost ~]# firewall-cmd --reload success [root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s3 enp0s8 sources: services: cockpit dhcpv6-client https ssh ports: 30000/tcp 80/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost ~]#
공유기 포트도 열어주고..
그리고 외부에서 들어온 443 포트를 받아야하니 포트 포워딩 규칙에 추가해주자.
이제 확인해보면 아래와 같이 나온다!
뭐 꾸민 것도 없고 기능도 없긴한데.. 이렇게까지 해놓고 나니까 열심히 작업해서 배포하고 싶다는 생각이 든다. 이제 기능만 잘 만들 줄 알면 서비스도 만들겠네..
+ 추가
오후 3시 넘어서 다시 SSL 인증서 발급을 시도했고 3시 넘은지 얼마 안돼서 그런가 정말로 SSL 발급에 성공했다.
참고 레퍼런스
https://sysdocu.tistory.com/1730
https://blog.naver.com/zsknight/100157542215
'Network > Rocky Linux' 카테고리의 다른 글
[Network | Oracle] Oracle 11g 외부 원격 접속 (0) 2024.07.10 [Network | Rocky Linux] SSH, SFTP 외부 원격 접속 (0) 2024.07.06 [Network | Rocky Linux] 공인 IP 포트포워딩 (0) 2024.06.23 [Network | Rocky Linux] SSH 설치 (0) 2024.06.23 [Network | Rocky Linux] Spring war 배포 (1) 2024.06.20 다음글이 없습니다.이전글이 없습니다.댓글