HTTP
하이퍼 텍스트 전송 프로토콜(Hypertext Transfer Protocol)
서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜
HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 전송되는 정보를 엿볼 수 있다.
HTTPS
Let's Encrypt
Let’s Encrypt는 SSL 인증서를 무료로 발급해주는 CA(Certificate Authorities). 베리사인(VeriSign)이나 코모도(Comodo)와 같은 유명 인증 업체와 같은 신뢰도를 가지며 SSL 암호화 기술 방식과 동작도 정확히 동일하다. 단지 다른 것은 사이트의 인증에 문제가 있어 최종 웹사이트 방문자가 피해를 입었을 경우 배상 여부만 차이가 있다.
certbot
Certbot은 수동으로 관리되는 웹사이트에서 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구
필수 전제조건
- Ubuntu 18.04 서버 1개
- 완전히 등록 된 도메인 이름
- 서버에 대해 다음과 같이 설정된 DNS 레코드.
- example.com이라는 서버의 공용 IP 주소를 가리키는 A 레코드.
- 서버의 공용 IP 주소를 가리키는 A 레코드(www.example.com).
Certbot 설치
1. Certbot 패키지는 Ubuntu내에 존재하지만 Certbot 개발자들이 최신 버전의 Ubuntu 소프트웨어 저장소를 기준으로 꾸준히 제공해주기 때문에 최신 버전의 저장소를 사용한다. 우선 Certbot를 위한 repository(저장소)를 추가한다.
$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot
2. certbot의 nginx 패키지를 설치한다.
$ sudo apt install python-certbot-nginx
Nginx 설정
1. Nginx 기본설정 파일에 들어가서 인증서를 적용할 도메인 이름을 설정한다.
$ sudo vim /etc/nginx/sites-available/default
2. 변경이 잘 되었는지 테스트
$ sudo nginx -t
3. 잘되었으면 다시 리로드
sudo systemctl reload nginx
방화벽을 통한 HTTPS 허용
기본적으로 Ubuntu는 ufw라는 기본적인 방화벽을 가지고 있다. 하지만 AWS EC2 인스턴스의 경우는 기본으로 방화벽이 비활성화되어 있다.
따라서 이부분은 생략하도록 한다.
$ sudo ufw status
SSL 인증서 받기
Certbot은 다양한 플러그인을 통해 SSL 인증서를 획득하는 다양한 방법을 제공한다. Nginx 플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드한다.
1. 원하는 도메인을 지정해서 Nginx플러그인을 통해 인증서를 획득한다.
$ sudo certbot --nginx -d isileeserver.shop -d www.isileeserver.shop
만약 도메인을 더 추가하고 싶다면 -d 옵션을 주고 더 추가하면 된다(물론 설정 파일에 server_name 부분을 변경한 부분에도 추가되어 있어야 한다).
2. 이메일을 입력해주고 동의한다.
3. 에러가 발생했다.
isileeserver.shop을 등록안해서 그런듯 하다. 등록 해주자.
다시 설치 명령어를 입력한다.
4. 두가지 선택사항이 뜬다.
- 1을 입력한다면 HTTP 연결을 HTTPS로 리다이렉트 하지 않습니다.
- 2를 입력한다면 HTTP 연결을 HTTPS로 리다이렉트 합니다.
필자는 2를 선택했다.
5. 설정을 테스트 하라고 뜬다. www.ssllabs.com/ssltest/ 로 들어가 테스트를 해주자
6. 테스트를 하면 다음처럼 에러가 뜬다.
HTTPS에 대해 포트 포워딩을 안해줬기 때문이다. aws에 들어가서 보안 설정을 해줘야 한다.
7. 다음과 같이 추가한다.
8. 다시 테스트한다. 등급을 확인할 수 있다.
Certbot 자동갱신 확인
Let's Encrypt의 인증서는 90일 동안만 유효하므로, 90일마다 갱신시켜줘야 한다. 하지만 설치하는 과정에서 /etc/cron.d에 자동으로 갱신시켜주는 커맨드가 추가되어 있다. 다만, 갱신 프로세스가 잘 동작하는지 테스트를 해보고 싶다면 다음과 같은 명령어를 입력해서 테스트를 진행할 수 있다.
$ sudo certbot renew --dry-run
오류가 없으면 잘 된것이다.
잘 되었으므로 restart하고 들어가면 된다.
$ sudo service nginx restart
HTTPS가 잘 되었으면 자물쇠 표시가 뜬다.