도커를 잘 모르는 상태에서.. 매우 많은 삽질끝에 적용을 성공시켰습니다! 과정을 기록해보려고 해요 ~
먼저 ZeroSSL 사이트에 접속합니다. (https://app.zerossl.com/dashboard)
그 다음 인증서를 발급받는 페이지까지 드루와주세요.
위 이미지의 Enter Domain에는 인증서를 발급받을 도메인을 입력하시고 Next Step을 누릅니다.
그러면 이제 인증서의 유효기간을 선택하라는 옵션이 나오는데, 저는 무료플랜이라 90일을 선택했습니다.
이건 .. 잘 모르는데 그냥 디폴트로 체크되있길래 체크 된 상태로 넘겼습니다.
Finalize Your Order는 플랜 고르는건데.. Free 체크하시고 다음 절차 넘어가시면 됩니다!
위 절차는 내 도메인을 검증받는 단계 라고 생각하시면 됩니다!
인증절차가 여러가지가 있는데요. 저는 HTTP File Upload가 편해서 이걸로 했습니다.
Download Auth File을 다운로드 받고 nginx의
/usr/share/nginx/html/.well-known/pki-validation
경로에 위치시켜주시면 되는데요!
그 전에 nginx
설정파일에 다음과 같은 블록을 추가해주셔야합니다!
location /.well-known/pki-validation/ {
alias /usr/share/nginx/html/.well-known/pki-validation/;
}
이걸 추가를 안하면 zeroSSL 쪽에서 제 도메인으로
/usr/share/nginx/html/.well-known/pki-validation/
경로에 인증파일이 있는지 없는지 확인을 못해서 오류가 자꾸 뜨더라구요.
꼭 추가해줍시다!
그 다음 /usr/share/nginx/html/.well-known/pki-validation
경로에 인증파일을 넣어야하는데, 저희는 지금 도커로 진행을 하고있기때문에 컨테이너에 주입(?)을 해줘야하죠.
docker-compose.yml에서 volumes로 주입(?) 해줍시다.
저의 docker-compose.yml nginx 부분 내용입니다.
nginx:
build: ./data/nginx
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./data/nginx/pki-validation:/usr/share/nginx/html/.well-known/pki-validation
- ./data/nginx/ssl:/etc/ssl/mydomain.com
volumes
외에도 ports
부분에 443:443 도 추가해주세요.
저는 볼륨을 이용해서 컨테이너에 파일을 주입하고있는데요.
./data/nginx/pki-validation:/usr/share/nginx/html/.well-known/pki-validation
위 절은 다음을 나타냅니다.
호스트 파일 시스템 경로 : ./data/nginx/pki-validation
컨테이너 파일 시스템 경로 : /usr/share/nginx/html/.well-known/pki-validation
쉽게 표현하면 내 컴퓨터의 ./data/nginx/pki-validation
경로는 도커 컨테이너의 /usr/share/nginx/html/.well-known/pki-validation
경로이다 라는 의미에요.
내 컴퓨터의 ./data/nginx/pki-validation
경로에 123.txt 파일을 생성하면, nginx 도커 컨테이너 내의 /usr/share/nginx/html/.well-known/pki-validation
경로에 123.txt가 생기는거죠~
따라서 이렇게 볼륨을 설정하시고, (호스트 파일 시스템 경로는 자유롭게 환경에 맞게 자유롭게 설정해주시면 됩니다.)
본인의 호스트 파일 시스템 경로에 아까 다운로드 받은 인증 파일을 넣고, 도커를 컨테이너들을 재실행 한 다음 ZeroSSL 홈페이지 내에서 인증받기 버튼을 누르고 성공하면 인증서를 적용할 수 있는 파일을 다운로드 받을 수 있게 해줍니다! 와!
이제 다음 사진과 같은 절차에 접어들어셨을텐데요!
Server Type을 고를 수 있는데, 저는 nginx로 했습니다! (Default Format으로 하셔도 아마 문제 없으실거에요)
그 다음 인증서를 다운로드 받아주세요. (Download Certificate)
그 다음 압축을 풀면
ca_bundle.crt / certficate.crt / private.key 세 파일이 있습니다.
여기서 한번 편집을 해줘야해요.
ca_bundle.crt의 내용을 전부 복사해서, certficate.crt의 맨 끝에 붙여 넣기 해주시고 저장해주세요.
이렇게 👇
-----BEGIN CERTIFICATE-----
어쩌고 저쩌고
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
어쩌고 저쩌고 from ca_bundle.crt
-----END CERTIFICATE-----
이 작업이 완료됬으면 이제 추가적인 nginx 설정과, 인증서를 옮겨주시면 되는데요!
우선 이 인증서도 nginx 도커 컨테이너 내부에 주입(?) 해주셔야합니다.
nginx:
build: ./data/nginx
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./data/nginx/pki-validation:/usr/share/nginx/html/.well-known/pki-validation
- ./data/nginx/ssl:/etc/ssl/mydomain.com
아까 pki-validation과 같은 원리입니다.
저는 /etc/ssl/mydomain.com 경로에다가 위치 시켰어요.
이것까지 해줬으면 이제 nginx 설정 파일 건드는것만 남았어요. 저의 nginx 설정 파일 일부는 다음과 같습니다. (SSL 관련만)
server {
listen 80 default_server;
server_name yourdomain.co.kr;
server_tokens off;
location /.well-known/pki-validation/ {
alias /usr/share/nginx/html/.well-known/pki-validation/; # 도메인 검증 파일이 위치하는 실제 경로로 변경
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name yourdomain.co.kr;
ssl_certificate /etc/ssl/yourdomain.co.kr/certificate.crt;
ssl_certificate_key /etc/ssl/yourdomain.co.kr/private.key;
......
......
......
}
여기서 핵심은
server {
listen 443 ssl;
server_name yourdomain.co.kr;
ssl_certificate /etc/ssl/yourdomain.co.kr/certificate.crt;
ssl_certificate_key /etc/ssl/yourdomain.co.kr/private.key;
......
......
......
이 블록을 추가하는 것이에요.. nginx를 공부해보질 않아서 잘 모르지만
SSL을 적용하려면 꼭 추가해줘야하는 블록으로 이해를 하고 있어요.
그 다음 ssl_certificate, ssl_certificate_key 는 각각 certificate.crt 와
private.key 가 있는 경로를 설정해주시면 됩니다!
이제 도커 컨테이너들을 다시 실행시키고 도메인에 들어가보시면
이렇게 자물쇠가 걸려있는걸 보실 수 있을겁니다! ( 저의 경우 이렇게 했어요 ! )
도커도, nginx도 잘 모르는 상태에서 적용하고 부랴부랴 포스팅하는거라 이해가 잘 안될 수 있지만 도움이 됬으면 좋겠네요~
- 유의점 : 갱신 주기맞춰서 다시 해줘야해요!