개요
1. nginx에 lets encrypt certbot으로 인증서를 발급
2. nginx에 ssl을 연결
환경
- docker
- docker-compose
- dns
- dns와 연결된 서버
- ubuntu
1. 인증서 발급
cert bot 설치
1. certbot 설치
sudo snap install --classic certbot
2. 인증서 발급
dns가 명령어를 실행하는 서버와 80포트로 연결이 되어 있어야 함
sudo certbot certonly --standalone
인증서 발급시에 나머지는 y를 누르고 이메일 주소와 dns를 묻는 화면에서 이메일과 dns를 입력한다.
/etc/letsencrypt/live/YOUR_DOMAIN_ADDRESS 에 발급되었다는 말과 함께 발급이 완료 된다.
하지만 그 경로에 접근하면 링크가 있다.
sudo ls -al
lrwxrwxrwx 1 root root 39 Jan 13 13:28 cert.pem -> ../../archive/YOUR_DOMAIN_ADDRESS/cert1.pem
lrwxrwxrwx 1 root root 40 Jan 13 13:28 chain.pem -> ../../archive/YOUR_DOMAIN_ADDRESS/chain1.pem
lrwxrwxrwx 1 root root 44 Jan 13 13:28 fullchain.pem -> ../../archive/YOUR_DOMAIN_ADDRESS/fullchain1.pem
lrwxrwxrwx 1 root root 42 Jan 13 13:28 privkey.pem -> ../../archive/YOUR_DOMAIN_ADDRESS/privkey1.pem
위 명령어로 확인하면 실제 파일 경로로 가볼 수 있다.
이 파일을 docker에 올려야 한다.
2. nginx docker에 ssl연결
nginx에 lets encrypt certificate를 연동하기 위해 필요한 부분은
- 위에서 발급한 인증서 fullchain1.pem, privkey1.pem
- nginx의 conf 파일
- 위의 설정을 이용해 nginx를 띄울 docker-compose.yaml
인증서를 cert 폴더에 위치 시킨다.
sudo cp /etc/archive/YOUR_DOMAIN_ADDRESS/fullchain1.pem /test_folder/cert/fullchain1.pem
sudo cp /etc/archive/YOUR_DOMAIN_ADDRESS/privkey1.pem /test_folder/cert/privkey1.pem
nginx의 conf 파일을 수정한다.
docker image에서 /etc/nginx/conf.d/default.conf 파일을 꺼내서 편집한다.
mkdir conf.d
id=$(docker create image-name)
docker cp $id:/etc/nginx/conf.d/default.conf conf.d/default.conf
docker rm -v $id
default.conf 파일 수정
default.conf 파일 수정
server {
# listen 80;
listen 443 ssl;
listen [::]:80;
listen [::]:443;
#server_name localhost;
server_name YOUR_DOMAIN_ADDRESS;
# certificate 파일을 위치시킬 docker 내의 경로 docker-compose의 volume과 일치 해야함
ssl_certificate /etc/nginx/certs/fullchain1.pem;
ssl_certificate_key /etc/nginx/certs/privkey1.pem;
#access_log /var/log/nginx/host.access.log main;
....
}
docker-compose.yaml 파일 생성
service:
image: nginx
ports:
- 80:80
- 443:443
volumes:
- ./cert:/etc/nginx/certs
# 앞은 host의 certificate 파일 경로, 뒤는 docker 내의 certificate 경로로 conf 파일내의 cert 경로와 일치 해야함
- ./conf.d:/etc/nginx/conf.d
https//YOUR_DOMAIN_ADDRESS 로 접속 가능하면 성공
참조
let's encrypt란?
무료 https 인증서 발급 비영리 기관으로 세계최대 인증기관 모든 웹사이트의 https사용을 목표로함
https://en.wikipedia.org/wiki/Let's_Encrypt
Let's Encrypt - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Certificate authority which provides free domain-validated certificates Let's Encrypt is a non-profit certificate authority run by Internet Security Research Group (ISRG) that provides
en.wikipedia.org
cert bot
https://certbot.eff.org/instructions?ws=webproduct&os=ubuntufocal
Certbot Instructions
Tagline
certbot.eff.org