http를 https로 변경하기

Last updated on 2023. 06. 15.

http는 하이퍼 텍스트 전송 프로토콜(Hypertext Transfer Protocol)이고 https는 그 뒤에 보안(Secure)이 붙은 것입니다. 저도 잘은 모르지만 뭔가 보안이 강화되었다네요. 지금 보고 계시는 이 홈페이지도 https로 전환되었습니다. 구글에서 검색 도출에도 도움이 된다고 하길래 따라 해봤죠.

http를 https로 변경 과정을 글로 정리해 둔 겁니다. 전 라즈베리파이에 apache2 로 웹서버를 구축하였고, SSL 인증서는 무료 인증서 Let’s Encrypt 를 사용하였습니다.

1. SSL 모듈 작동시키기

sudo a2enmod ssl
sudo service apache2 restart

이걸 안 해주면 ssl 과 관련된 443번 포트가 동작을 안 합니다. 그것도 모르고 포트가 왜 안 열리지 가지고 한 시간 쯤 삽질을 했네요. ㅠ

2. letsencrypt 설치

위에서 이야기 한 SSL 인증서 Let’s Encrypt 를 설치합니다.

sudo apt-get update
sudo apt-get install letsencrypt

3. Apache2 일시 중지

인증서 발급하는 동안 80번 포트를 사용하기 때문에 apache2 를 잠시 중단해야 합니다.

sudo service apache2 stop

4. 인증서 발급

sudo letsencrypt certonly --standalone -d (내 도메인주소)

발급 요청하면 Email 주소를 입력하고 Agree, Yes 등 입력해 줘야 합니다. 그러면 뭔가 진행이 되고 마지막쯤에 다음과 같은 문구가 나오면 성공. 유효기간은 90일이고 계속 갱신해 줘야 합니다.

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at...(생략)

인증 위치는
/etc/letsencrypt/live/내도메인주소/fullchain.pem

인증 위치는
/etc/letsencrypt/live/내도메인주소/privkey.pem

입니다. 해당 폴더로 이동 권한이 없어서 chmod 를 사용해서 적당히 권한을 줍니다.

5. default-ssl.conf 심볼릭 링크

다음과 같이 입력해 줍니다. 저도 내용은 잘 모르지만 ssl 설정을 하기 위한 것으로 이해합니다.

cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/default-ssl.conf ./default-ssl.conf

주석 추가) site-available 폴더에서 아파치 가상 호스트를 설정할 수 있을 겁니다. 정확하진 않을 수 있으나 대강 드는 생각은 가상 호스트를 셋업하고 https 요청이 왔을 경우 인증을 수행하는 느낌이었습니다.

6. 인증서 위치와 인증키 위치 업데이트

심볼릭 링크한 파일을 vi 편집기로 열어 줍니다.

sudo vim default-ssl.conf

약간 아래쪽에 SSLCertificateFile 이 보이는데 4번에서 이야기한 fullchain.pem 이 있는 경로로 수정해 줍니다.
그리고 SSLCertificateKeyFile 은 privkey.pem 이 있는 경로로 수정해 줍니다.

그리고 서버를 재 시작 해 줍니다.

sudo service apache2 start

7. https 로 301 리디렉션 설정

301 리디렉션은 영구 리디렉션을 의미합니다. 301 리디렉션은 브라우저가 전달 주소를 캐시 할 수 있어 302 임시 리디렉션 대비 주소를 더욱 빠르게 확인할 수 있다고 합니다. 저는 아파치 웹 서버를 사용하고 있어서 .htaccess 를 수정하여 아래의 코드를 추가하였는데 워드프레스를 사용하고 있다면 really simple SSL 플러그인을 사용해서 설정하는 것이 편합니다.

# https redirection
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

워드프레스 플러그인을 사용한다면 가급적 직접 입력하지 말고 플러그인을 통해 설정하긴 권합니다. 이제 내 홈페이지에다가 https:// 로 주소를 입력해서 접속을 하면 http에서 https로 전환이 됩니다.

※ 인증서 갱신

인증서 만료 30일 전부터 아래와 같이 입력하여 갱신이 가능합니다. 갱신하는 동안에도 80번 포트를 사용하기 때문에 apache 를 잠시 중단 시키고 해야 합니다.

sudo letsencrypt renew

인증서 갱신 과정은 cron 을 사용해서 자동으로 설정할 수 있습니다. 다만 갱신하는 동안 httpd 를 잠시 정지시켜야 하는 단점이 있네요.