Nginx 설정 Let 's Encrypt TLS 인증서

8460 단어
본 고 는 제 가 인터넷 에서 HTTPS 관련 글 을 참고 한 다음 에 실천 한 주요 내용 은 * * 인증서 획득, nginx TSL 설정 * * 두 부분 으로 구성 되 었 습 니 다.
프로젝트 환경 구축
  • Git (Git 설치)
  • Nginx (Nginx 설치 설정)
  • 인증서 가 져 오기
    Git 설치 후 certbot (* 본명 letsencrypt *) 프로젝트 복제
    $ git clone https://github.com/certbot/certbot
    $ cd certbot
    

    클론 이 완료 되면 명령 을 통 해 인증 서 를 가 져 올 수 있 습 니 다.
  • Webroot 이 방식 은 이 컴퓨터 에서 실행 중인 항목 에 적용 되 며 서버 를 정지 하지 않 아 도 신청 할 수 있 습 니 다
  • $ ./certbot-auto certonly --webroot -w /usr/local/nginx/html --email [email protected] -d example.com -d www.example.com -d other.example.com
    
    --webroot 신청 방식 유형 -w /usr/local/nginx/html 으로 도 메 인 이름 프로젝트 를 신청 하 는 Webroot 과 경 로 를 설정 하고 정적 페이지 를 예 로 들 면
    location / {
        root   /usr/local/nginx/html;
        index  index.html;
    }
    

    이 방식 은 /usr/local/nginx/html 디 렉 터 리 아래 .well-known/acme-challenge 폴 더 를 만 든 다음 무 작위 파일 을 생 성하 여 접근 합 니 다. 예 를 들 어http://example.com/.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX 프로젝트 가 역방향 대 리 를 했 을 경우 -w 매개 변수 뒤에 있 는 경 로 를 대리 프로젝트 가 있 는 루트 디 렉 터 리 --email [email protected] 가 신청자 의 * * 메 일 박스 * 로 확보 하 십시오. 인증서 가 만 료 될 때 알림 메 일 -d example.com 을 * * * 신청 하 는 도 메 인 이름 * 으로 여러 개가 존재 할 수 있 습 니 다. 형식 -d -d , * * 단 도 메 인 이름 방문 주 소 는 본 컴퓨터 * * 로 보 냅 니 다.
  • Standalone 이 방식 은 * * 80, 443 포트 가 점용 되 지 않도록 확보 해 야 합 니 다 * *
  • $ ./certbot-auto certonly --standalone --email [email protected] -d example.com -d www.example.com -d other.example.com
    
    --standalone 신청 방식 유형 --email [email protected] -d example.com 매개 변수 참조 Webroot 방식 으로 검증 에 문제 가 없 으 면 잠시 후 페이지 에 프로 토 콜 대화 상자 가 나타 나 Agree 를 클릭 하면 됩 니 다.
  • Manual 이 방식 은 인증서 서버 가 도 메 인 이름 이 있 는 서버 가 아 닌 경우
  • 에 적 용 됩 니 다.
    $ ./certbot-auto certonly --manual --email [email protected] -d example.com -d www.example.com -d other.example.com
    
    --standalone 신청 방식 유형 --email [email protected] 매개 변수 참조 Webroot 방식 -d example.com 은 신청 해 야 할 도 메 인 이름 으로 이 도 메 인 이름 이 있 는 기계 에 대한 읽 기와 쓰기 권한 이 있어 야 실행 되면 도 메 인 이름 이 있 는 서버 의 프로젝트 와 디 렉 터 리 에 문 서 를 만 들 고 파일 내용 을 지정 하도록 요구 합 니 다.
    Make sure your web server displays the following content at
    http://example.com/.well-known/acme-challenge/VE_oSzihad5ZNYPnE_OLT2aQ-BdT_M3z5ITj53wQ-Oc before continuing:
    VE_oSzihad5ZNYPnE_OLT2aQ-BdT_M3z5ITj53wQ-Oc.JhmxNt13DUzzmC4_7VfnfWh1gmePbExxQygAMf9KTSo
    #   
    # /tmp/certbot/public_html                
    mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
    #        
    cd /tmp/certbot/public_html
    #             
    printf "%s" VE_oSzihad5ZNYPnE_OLT2aQ-BdT_M3z5ITj53wQ-Oc.JhmxNt13DUzzmC4_7VfnfWh1gmePbExxQygAMf9KTSo > .well-known/acme-challenge/VE_oSzihad5ZNYPnE_OLT2aQ-BdT_M3z5ITj53wQ-Oc
    #   
    Press Enter to Continue
    

    조작 완료 후 리 턴 버튼 을 누 르 면 됩 니 다.
    신청 작업 이 성공 하면 인터페이스 에서 인증서 의 저장 경로 와 인증서 의 만 료 시간 (* * 90 일 * *) 을 출력 합 니 다.
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/example.com/fullchain.pem. Your cert
       will expire on 2017-08-17. To obtain a new or tweaked version of
       this certificate in the future, simply run certbot-auto again. To
       non-interactively renew *all* of your certificates, run
       "certbot-auto renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    

    인증서 생 성 중 /etc/letsencrypt 폴 더 를 만 듭 니 다. 인증서 파일 은 기본적으로 /etc/letsencrypt/live/example.com 폴 더 에 저 장 됩 니 다. 이 중 example.com 첫 번 째 도 메 인 이름 에서 추출 한 것 은 example.com 폴 더 에 4 개의 파일 cert.pem chain.pem fullchain.pem privkey.pem 을 포함 합 니 다.
  • cert. pem 도 메 인 네 임 인증서
  • chain. pem 루트 인증서 및 중간 인증서
  • fullchain. pem 은 cert.pemchain.pem 을 합병 하여
  • prickey. pem 인증서 비밀 키
  • * * 2048 비트 의 Diffie - Hellman 파일 을 만 듭 니 다 * * (nginx 는 기본적으로 1024 비트 의 Diffie – Hellman 을 사용 하여 키 교환 을 합 니 다. 보안 이 너무 낮 습 니 다)
    openssl dhparam -out /etc/letsencrypt/live/dhparams.pem 2048
    

    nginx TSL 설정
    우선 http 프로 토 콜 301 을 https 프로 토 콜 로 재 설정 합 니 다.
    server {
      listen 80;
      server_name example.com www.example.com;
      return 301 https://example.com$request_uri;
    }
    

    https 관련 설정
    server {
        listen 443 ssl;
        server_name example.com www.example.com;
        
        #           
        ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
        #       
        ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
        
        #    Diffie-Hellman         
        ssl_dhparam          /etc/letsencrypt/live/dhparams.pem;
        
        #              
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    
        #                      ,   SSLv3   TLS   
        ssl_prefer_server_ciphers  on;
        
        # ssl       SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2 
        # ie6     SSLv2,SSLv3         ,     
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        
        #    TLS        session        1m       4000   session
        ssl_session_cache          shared:SSL:50m;
        # session     
        ssl_session_timeout        1d;
        
        #                    https://imququ.com/post/optimize-tls-handshake.html 
        # 1.5.9      
        ssl_session_tickets off;
        
        #           TLS             ,     TLS   ,      。OCSP stapling        ,                       OCSP(Online Certificate Status Protocol)  ,            。      OCSP      (               ),                   https://imququ.com/post/my-nginx-conf-for-wpo.html
        # 1.3.7      
        ssl_stapling               on;
        ssl_stapling_verify        on;
        #     +     
        ssl_trusted_certificate    /etc/letsencrypt/live/example.com/fullchain.pem;
        
        # HSTS        ,     max-age  ,     HTTPS      。         HTTP    ,      HTTP   ,            HTTPS             https://imququ.com/post/sth-about-switch-to-https.html
        add_header Strict-Transport-Security max-age=60;
        
        #        http       
    }
    

    이상 설정 이 완료 되면 nginx 를 다시 시작 하면 https 전환 을 완료 할 수 있 습 니 다.
    다음 명령 을 사용 하면 * * 연장 * * 을 진행 할 수 있 으 며, 연장 성공 후 서버 가 필요 합 니 다
    $ ./certbot-auto renew
    

    이 명령 은 만 료 될 인증서 만 업데이트 할 수 있 습 니 다. 강제 업 데 이 트 를 원한 다 면 --force-renewal 인 자 를 추가 할 수 있 습 니 다.
    Qualys SSL labs 가 제공 하 는 SSL Server Test 서 비 스 를 통 해 사이트 의 현재 설정 과 테스트 사이트 의 안전 평 점 을 볼 수 있 습 니 다. 또한 이 사 이 트 는 유명 사이트 의 테스트 결 과 를 캐 시 했 습 니 다. 아래 링크 를 클릭 하면 볼 수 있 습 니 다.
  • Google
  • GitHub
  • Stack Overflow
  • Twitter
  • Facebook

  • 기타 설명
    한 IP 에 여러 개의 인증 서 를 설정 해 야 한다 면 HTTPS 사용 에 대한 경험 치 공유 (2) * * SNI 확장 * * 부분 문 중 ssl_ciphers 을 보십시오.설정 은 Mozilla SSL Configuration Generator 의 일반적인 설정 을 참고 하여 Mozilla 에 오 는 동시에 TSL 설정 설명 문서 Security / server Side TLS 를 제공 합 니 다. 또한 ciperli 가 제공 하 는 TSL 설정 모델 은 ssl_ciphers 설정 을 제외 하고 모두 Jerry Qu 의 본 블 로 거 Nginx 설정 의 전체 편 을 참고 하여 다른 설정 의 상세 한 내용 과 역할 을 참고 할 수 있 습 니 다.원 리 는 그의 블 로그 에서 알 수 있 는 글 을 검색 하 는 동시에 다음 과 같은 블 로그 도 참고 할 수 있다.
  • HTTPS 업그레이드 안내
  • SSL 인증서 교체: Let 's Encrypt 사용
  • Let 's Encrypt SSL 인증서 설정 은 별도로 설정 완료 후 * * 아래 블 로 그 를 볼 수 있 습 니 다 * *, TSL, nginx 에 대한 이 해 를 강화 합 니 다
  • 보안 과 관련 된 HTTP 응답 헤더
  • 콘 텐 츠 보안 정책 소개
  • HTTPS 사용 에 대한 경험 치 공유 (1)
  • HTTPS 사용 에 대한 경험 치 공유 (2)
  • HTTPS 사용 에 대한 경험 치 공유 (3)
  • HTTP Public Key Pinning 소개
  • 본 블 로그 Nginx 설정 의 안전 편
  • 본 블 로그 Nginx 설정 의 성능 편
  • 좋은 웹페이지 즐겨찾기