본문 바로가기
👾개발지식/DevOps

letsencrypt사용해서 ssl인증서 달기

by 서버요정 호토론 2021. 11. 8.

 

사전지식

웹루트란?

쉽게 말해 웹서버가 사용할 수 있는 바탕화면이다.

웹서버가 가용할 수 있는 최상위 루트 디렉토리이다. 일반적으로 웹 브라우저에서 도메인에 접근했을 때 로드되는 컨텐츠가 웹루트에 위치해있다.

nginx의 경우 /var/www/html이 루트 디렉토리이며 설정파일에서 변경 가능하다

루트 디렉토리 찾기

nginx의 config파일에서 root디렉토리의 위치를 확인할 수 있다.

$ cat /etc/nginx/sites-available/default
  • 출력화면

Let's Encrypt 인증서 적용하기

인증서는 2가지 방법으로 받을 수 있습니다!

  1. standalone : 서버 자체에서 인증을 시도하는 방식
  2. webroot : 외부 웹에서 사이트에 접속해 문제가 없는지를 확인해 인증하는 방식

여기서는 webroot방식을 사용하여 인증서를 받아보겠습니다

1. let's encrypt 설치하기

$ `sudo apt-get -y install letsencrypt

2. let's encrypt 실행

$ sudo letsencrypt certonly --webroot --webroot-path=/var/www/html -d "test-domain.com" -m "test@gmail.com" --agree-tos

letsencrypt certonly : 인증서 받기 위한 인증서 프로그램 실행
--webroot : webroot방식으로 인증을 하겠다
--webroot-path=/var/www/html : 웹루트 경로 알려줌
-d "test-domain.com" : 인증할 도메인 명시
-m "test@gmail.com" : 인증서 만료되었을경우 알림 받을 메일 주소 명시
--agree-tos : 약관 어쩌구는 다 동의하겠다

3. 인증서 발급 화면

fullchain.pem키와 privkey.pem키의 위치 기억해놓기!

4. nginx의 설정파일(/etc/nginx/sites-available/default)을 다음과 같이 변경

server {
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    root /var/www/html;
    server_name chat.live-md.com;
    index index.html;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/test-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test-domain.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    client_max_body_size 20m;
    add_header Strict-Transport-Security "max-age=63072000" always;
    ssl_stapling on;
    ssl_stapling_verify on; 
    location / {   
        try_files $uri $uri/ =404;
    }   
}

return 301 : http응답 상태코드, 영구적인 url 리다이렉션을 위해 사용
https://$host$request_uri : 무조건 https://요청한주소로 리다이렉션
listen 443 ssl http2; : https 기본 포트인 443으로 듣겠다
root /var/www/html; : 원하는 웹루트 경로 명시
server_name test-domain.com; : 도메인 이름을 서버이름으로 쓰겠다
index index.html; : index.html을 웹루트로 들어왔을 때 보여줄 웰컴페이지로 쓰겠다
ssl_certificate : 공개키 위치 설정, [3-1] fullchain.pem키 위치로 설정
ssl_certificate_key : 개인키 위치 설정, [3-2] privkey.pem키 위치로 설정
ssl_session_timeout : ssl 인증 기다리는 시간
ssl_protocols : 사용할 프로토콜
ssl_ciphers : 암호화할 때 사용할 알고리즘
client_max_body_size: 받을 수 있는 최대 바디 사이즈
add_header Strict-Transport-Security "max-age=63072000" always; : https통신만 수용하겠다는 헤더

5. 웹 루트의 인덱스 파일명 변경하기

/var/www/html/index.html

6. https://도메인에서 암호화 되는지 확인하기

끝!!!

댓글