How To Secure Nginx with Let's Encrypt on Ubuntu 16.04

3703 단어
발단
위 챗 애플 릿 을 만들어 아이들 의 사 이 트 를 위 챗 에서 노인 들 에 게 보 여주 고 위 챗 애플 릿 을 만들어 웹 사이트 가 https 라 고 요구 하고 싶 었 습 니 다. 저도 인증 서 를 사기 가 아까워 서 Let 's Encrypt 에서 제공 하 는 무료 인증 서 를 사용 하려 고 했 습 니 다.
환경.
  • Ubuntu 16.04.1 LTS
  • NGINX 1.10
  • kernel 4.9.4-040904-generic

  • 순서
    소프트웨어 를 설치 하 다
    apt-get -y install letsencrypt;
    # letsencrypt   Let's Encrypt     
    # certbot   Ubuntu 16.04     
    

    인증서 가 져 오기
    letsencrypt certonly \
        --webroot \
            -w /opt/www/blog.xiaoyuer.cn \
            -d blog.xiaoyuer.cn;
    letsencrypt certonly 
        --webroot \
            -w /opt/www/blog.lukeyang.us \
            -d blog.lukeyang.us;
    #    blog.xiaoyuer.cn   blog.lukeyang.us      
    #               -w      -d   ,
    #                         ,
    #               ......
    # 
    #                     ,
    #          
    

    Generate Strong Diffie-Hellman Group(optional)
    openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048;
    #            2048    
    

    NGINX 의 ssl 인자 설정 (optional)
    cat </etc/nginx/snippets/ssl-params.conf
    # from https://cipherli.st/
    # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    #resolver 8.8.8.8 8.8.4.4 valid=300s;
    #resolver_timeout 5s;
    # Disable preloading HSTS for now.  You can use the commented out header line that includes
    # the "preload" directive if you understand the implications.
    #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    EOF
    
    #         ,   ssl_dhparam       
    

    NGINX 의 가상 컴퓨터 설정
    vim /etc/nginx/sites-enabled/blog.xiaoyuer.cn;
    

    server {} 설정 블록 에 다음 내용 을 추가 합 니 다:
    listen 443 ssl http2 default_server;
    include snippets/ssl-params.conf;
    ssl_certificate /etc/letsencrypt/live/blog.xiaoyuer.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.xiaoyuer.cn/privkey.pem;
    
    location ~ /.well-known {
        allow all;
    }
    

    마찬가지 로
    vim /etc/nginx/sites-enabled/blog.lukeyang.us;
    

    server {} 설정 블록 에 다음 내용 을 추가 합 니 다:
    listen 443 ssl http2;
    include snippets/ssl-params.conf;
    ssl_certificate /etc/letsencrypt/live/blog.lukeyang.us/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.lukeyang.us/privkey.pem;
    
    location ~ /.well-known {
        allow all;
    }
    

    주의:
    이 설정 의 listen 443 ssl httpd 2 줄 에는 default 가 없습니다.server 글꼴, 그것 은 하나의 포트 입 니 다. default 만 있 기 때 문 입 니 다.server, 앞 에 있 는 허 기 는 443 포트 에 default 를 지정 하 였 습 니 다.server, 그래서 여 기 는 중복 지정 할 수 없습니다.
    NGINX 서비스 다시 시작
    systemctl restart nginx.service;
    

    인증서 자동 업데이트 설정
    Let 's Encrypt 인증 서 는 3 개 월 후에 만 료 되 기 때문에 공식 도 구 는 자동 으로 업데이트 되 는 기능 을 제공 합 니 다. cron 으로 정기 적 으로 호출 하면 됩 니 다.
    cat </etc/cron.d/renew_ssl
    25 3 * * 3 root /usr/bin/letsencrypt renew>/var/log/le-renew.log"
    35 3 * * 3 root /bin/systemctl reload nginx
    EOF
    
    

    이 논 리 는 일주일 에 한 번 씩 인증 서 를 업데이트 해 야 하 는 지, 필요 하 다 면 자동 으로 인증 서 를 업데이트 하 는 것 이다.검사 가 끝나 면 nginx 의 reload 작업 을 한 번 더 하고 새 인증 서 를 다시 불 러 옵 니 다 (있 으 면).
    레 퍼 런 스
  • How To Secure Nginx with Let's Encrypt on Ubuntu 16.04
  • 좋은 웹페이지 즐겨찾기