본문 바로가기

카테고리 없음

NGINX docker - SSL(LET'S ENCRYPT) 설치 하기 - MANUAL

개요

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를 연동하기 위해 필요한 부분은

  1. 위에서 발급한 인증서 fullchain1.pem, privkey1.pem
  2. nginx의 conf 파일
  3. 위의 설정을 이용해 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