• 2020. 11. 17.

    by. 문익점

    반응형

    Let’s encrypt 를 이용해서nginx 웹 서버에 HTTPS를 적용하는 방법입니다. 도메인을 등록하는 방식으로 진행되기 때문에 *도메인이 필수적으로 필요합니다. ubuntu 16.04, nginx version: nginx/1.10.3 (Ubuntu)에서 진행 하였습니다.

    인증서

    Let’s encrypt 역시 CA(Certificate Authority)입니다. certbot을 통해서 간편하고 무료로 등록 할수 있어서 많이 이용합니다.  certbot-auto로 진행 하겠습니다. 먼저 공식문서에 나온대로 설치를 진행합니다.

    공식문서: certbot.eff.org/docs/install.html#certbot-auto

    wget https://dl.eff.org/certbot-auto
    sudo mv certbot-auto /usr/local/bin/certbot-auto
    sudo chown root /usr/local/bin/certbot-auto
    sudo chmod 0755 /usr/local/bin/certbot-auto

    그 다음 디렉토리를 하나 생성합니다.

    # 디렉토리 생성
    $ sudo mkdir -p /var/www/letsencrypt
    # proxy.conf vim이나 vi으로 실행
    $ sudo vim /etc/nginx/sites-available/default

    default 파일을 수정합니다.

    server {
      listen  80;
      server_name *자신의 도메인*;
    
      ...
        
      location ~ /\.well-known/acme-challenge/ {
          allow all;
          root /var/www/letsencrypt;
      }
      
      ...
    }

    nginx 를 다시 실행시킨 후 인증서 발급을 시작합시다. default에 적어뒀던 도메인을 적어야 합니다.

    $ service nginx restart
    $ certbot-auto certonly --webroot -w /var/www/letsencrypt -d 도메인 --agree-tos -m 본인의 이메일
    ex) certbot-auto certonly --webroot -w /var/www/letsencrypt -d naver.com --agree-tos -m  a@a.com

     

    인증서 발급에 성공 했다면 /etc/letsencrypt/live/{도메인명}에 4가지 파일이 존재합니다. 

    $ sudo ls /etc/letsencrypt/live/{도메인명}
    1. cert.pem: 도메인 인증서
    2. chain.pem: Let’s Encrypt chain 인증서
    3. fullchain.pem: cert.pem + chain.pem
    4. privkey.pem: 인증서의 개인키

    /etc/nginx/sites-available/default 파일을 다시 수정해야합니다. http로 접근하면 https로 리다이렉트해주고 발급받은 인증서를 적용해야합니다. 아래처럼 server를 추가해주세요.

    server {
      listen  80;
      server_name *도메인*;
    
      location ~ /\.well-known/acme-challenge/ {
        allow all;
        root /var/www/letsencrypt;
      }
    
      location / {
        # http 로 들어올 경우 https 로 리다이렉트 한다.
        return 301 https://$server_name$request_uri;
      } 
    }
    
    server {
      # http2 를 활성화 시키기 위해 http2 추가
      listen  443 ssl http2;
      server_name *도메인*;
      
      root /html;
      index index.html index.htm;
    
      ssl_certificate /etc/letsencrypt/live/{도메인명}/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/{도메인명}/privkey.pem;
    
      location / {
         try_files $uri $uri/ 404;
      }
    }

    다시 nginx를 재시작합니다

    $ service nginx restart

    이제 접속해서 확인해보세요!

    적용 성공!

    반응형