https 인증서 발급을 받아봅시다!🧊

우선, 저는 개인적으로 구축해둔 홈서버가 있습니다.

mini PC에 Ubuntu 24.04.2 LTS를 사용해서 구축해두었습니다.

따라서, 모든 명령어는 Ubuntu 24.04.2 LTS를 기반으로 하고 있습니다!

http와 https의 차이🧐

http는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이기 때문에 제 3자가 정보를 조회할 수 있습니다.

이러한 http의 취약점 때문에 https가 등장하게 되었습니다.

https는 데이터 암호화를 지원해서 제 3자가 정보를 조회할 수 없기 때문에 http보다 훨씬 안전합니다.

따라서, 민감한 정보를 관리할 때는 https가 필수입니다!!

정리
http: 80번 포트 사용. 평문 데이터 전송
https: 443번 포트 사용. 암호화된 데이터 전송
웬만하면, https를 쓰자!!

그리고, http 같은 경우는 사이트의 신뢰도 평가 점수가 낮아 검색 엔진에서 안전하지 않은 사이트로 처리를 하기 때문에 상단 주소창에 ‘안전하지 않은 사이트’ 와 같은 문구가 뜨기도 하고요, 특정 네트워크에서는 접속이 막히기도 합니다.

예를 들면… 저희 학교 네트워크가 있겠네요…

보안 측면으로 보면 좋은거지만, 초반에 제 사이트가 http만 지원하고 있었기 때문에 학교에서 작업할 때는 무조건 핫스팟으로 인터넷 연결을 했어야 했습니다…

https 인증서 발급 받기🔐

https 인증서를 발급 받기 위해서 저는 certbot을 사용했습니다.

certbot은 인증서를 발급해주는 소프트웨어인데, 90일마다 만료되는 인증서를 자동으로 갱신해주기 때문에 아주 편리합니다!

아래는 제가 사용하고 있는 apache와 certbot 버전입니다.

사용하는 버전
Apache/2.4.58 (Ubuntu)
certbot 2.9.0

과정은 정말 어렵지 않습니다.

apache 설정은 이미 되어 있다고 가정하고, 인증서 발급 과정만 설명하겠습니다.

0. 443번 포트 열기

모든 과정을 시작하기에 앞서, 포트포워딩을 먼저 해야합니다.

홈서버를 구축한 PC와 연결된 공유기 페이지에 접속하셔서 포트를 열고, 서버의 방화벽도 오픈해주세요!

공유기 포트포워딩은 공유기 업체 별로 접속하는 주소와 접속한 페이지의 구성이 약간씩 다릅니다.

그래도 인터넷에 치면 잘 나와있으니 한 번 찾아보세요!

서버 방화벽은 sudo ufw allow 443/tcp 이 명령어를 입력하시면 열립니다.

1. certbot 설치하고, 인증서 발급받기

저는 이 서버에서 명령을 실행할 때 root 계정으로 로그인 후 작업하는 것보다 sudo 명령어로 작업하는 걸 선호해서 등장하는 모든 커멘드에는 sudo가 포함되어 있습니다.

만약, root 계정으로 설정하신다면 sudo 제외하고 입력하시면 됩니다!

sudo apt install certbot python3-certbot-apache

이 명령어를 입력하면 certbot이 설치됩니다!

그리고, 아래 명령어로 certbot을 실행합니다.

sudo certbot --apache

이후에, 여러 입력 사항들이 등장하는데요, 아래 사이트에 들어가셔서 Step4를 확인하시면 자세하게 설명되어 있어서 똑같이 따라하시면 됩니다.

certbot 가이드

근데 여기서 한 가지 주의해야 할 부분이 있습니다.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

이 과정에서 저는 1 2 이렇게 입력했었는데, 그 경우 인증서가 따로따로 발급됩니다.

이렇게 되면 문제가, 도메인과 서브 도메인의 인증서가 불일치해 브라우저에 경고가 뜨며 제대로 접속되지 않습니다.

그래서, 처음에 저는 www.swlee.net에만 접속이 되었었어요.

이 경우, 제가 해결한 방법은 ([]안의 내용은 수정하셔야 합니다!)

sudo certbot --apache -d [yourdomain] -d [www.yourdomain]

이 명령어를 입력해 두 개의 도메인을 포함하는 인증서를 새로 발급 받았습니다.

그리고, 아래 명령어를 입력해서 기존에 발급받은 인증서를 삭제해줬어요.

sudo certbot delete --cert-name [yourdomain]

그러면 아래와 같이 인증서가 발급되고, 관련 파일들이 생성됩니다.

 Certificate Name: [yourdomain]
    Serial Number: 
    Key Type: ECDSA
    Domains: [yourdomain] www.[yourdomain] # 도메인이 두 개 다 포함되어 있습니다.
    Expiry Date: 2025-09-27 13:56:21+00:00 (VALID: 74 days)
    Certificate Path: /etc/letsencrypt/live/[yourdomain]/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/[yourdomain]/privkey.pem

2. VirtualHost 설정하기

자, 이제 인증서를 모두 발급 받았습니다.

그러면, 이제 제가 공개할 페이지를 연결해두고 http로 접속 시에도 https로 전환되도록 리디렉션 설정을 해봅시다!

sudo vi /etc/apache2/sites-available/[yourdomain]-le-ssl.conf

certbot 설정이 제대로 진행되어 인증서가 올바르게 발급되었다면 위의 파일이 생성되어 있을 거예요.

해당 파일을 vi 편집기로 열어주었으니 수정을 해보겠습니다.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName [yourdomain] 
    ServerAlias www.[yourdomain]

    # 웹페이지 코드 경로
    DocumentRoot "/var/www/https"
    # 첫 페이지 파일명
    DirectoryIndex index.html     

    <Directory "/var/www/https">
        AllowOverride All
        Require all granted
    </Directory>

    # 로그 경로 설정
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/swlee.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/swlee.net/privkey.pem
</VirtualHost>
</IfModule>

아마 대부분은 이미 적혀있을 거예요. 위의 몇 가지 개인적으로 설정해야 하는 부분들만 적어주고 저장하면 됩니다!

그리고, 리디렉션 설정을 해줍시다.

sudo vi /etc/apache2/sites-available/[yourdomain].conf 로 편집기를 다시 열어주고,

<VirtualHost *:80>
    ServerName [yourdomain]  
    ServerAlias www.[yourdomain] 

    DocumentRoot "/var/www/html"
    DirectoryIndex mainpage.html

    <Directory "/var/www/html">
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # 리디렉션 설정

    # 활성화
    RewriteEngine on
    # 작동 조건
    RewriteCond %{SERVER_NAME} =www.swlee.net [OR]
    RewriteCond %{SERVER_NAME} =swlee.net
    # 서버 이름과 경로를 유지한 채, 리디렉션
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

이렇게 아래 4줄을 추가해주면 됩니다.


모든 과정이 끝났습니다!

apache2 설정을 바꿔주었으니 아래의 명령어로 재실행 시켜주면 웹페이지가 https로 호스팅되는 것을 확인할 수 있을 거예요!!

sudo systemctl restart apache2

보안 점수 확인하기💯

보안 점수 확인 사이트

이 사이트에 접속하셔서 도메인을 입력하신 후 조금 기다리시면 사이트 보안 등급이 나옵니다!

참고 사이트 🔎

🏠홈서버 만들기🏠 보안

이 사이트는 제가 홈서버 구축할 때부터 참고했던 블로그입니다!

ubuntu 22 : apache 2 + certbot : https 띄우기

요즘은 nginx를 많이 사용하는 추세인 것 같은데, 저는 apache를 사용해서 그에 맞는 과정이 설명되어 있어서 참고했습니다.

Categories:

Updated: