CentOS 7 에서 SSL 인증 서 를 Nginx 암호 화 하 는 방법

개발 가이드: CentOS 7 에 Nginx 를 설치 하 는 방법
Let 's Encrypt 는 Internet Security Research Group (ISRG) 이 개발 한 자 유 롭 고 자동화 되 며 개 방 된 인증서 발급 기관 이다.현재 거의 모든 현대 브 라 우 저 는 Let 's Encrypt 에서 발급 한 인증 서 를 신뢰 합 니 다.
이 튜 토리 얼 은 CentOS 7 에서 Certbot 을 통 해 SSL 보안 인증 서 를 만 들 고 Nginx 에 설정 하 는 방법 을 차근차근 알려 줄 것 입 니 다.
시작 전 준비
이 강 좌 를 계속 하기 전에 다음 과 같은 두 가지 조건 을 만족 시 켰 는 지 확인 하 십시오.
  • 도 메 인 이름 을 가지 고 있 는 지 확인 하 십시오. 서버 IP 에 분석 되 었 습 니 다. 다음 튜 토리 얼 에서 저 는 kaifazhinan. com 을 본 튜 토리 얼 의 도 메 인 이름 으로 사용 할 것 입 니 다.
  • EPEL 창 고 를 사용 하고 Nginx 가 설치 되 어 있 는 지 확인 하 십시오. Nginx 가 설치 되 어 있 지 않 으 면 CentOS 7 에 Nginx 를 설치 하 는 방법 을 먼저 읽 을 수 있 습 니 다.

  • Certbot 설치
    Certbot 은 SSL 인증 서 를 만 들 고 SSL 인증 서 를 자동 으로 업데이트 하 며 웹 서비스 에 인증 서 를 설정 하 는 데 매우 간단 하고 편리 한 도구 입 니 다.
    다음 명령 을 실행 할 수 있 습 니 다. EPEL 창고 에 Certbot 를 설치 할 수 있 습 니 다.
    sudo yum install certbot

    Dh (Diffie - Hellman) 그룹 생 성
    Diffie – Hellman 밀 스푼 교환 은 안전 하지 않 은 통신 채널 에서 키 를 안전하게 교환 할 수 있 는 방법 입 니 다.
    현재 다음 명령 을 실행 하면 2048 비트 의 DH 인 자 를 생 성 할 수 있 습 니 다.
    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

    2048 비트, 생 성 시간 은 약 3 - 5 분 정도 입 니 다.물론 원 하신 다 면 크기 를 4096 비트 로 바 꿀 수도 있 습 니 다. 그러나 이렇게 되면 생 성 되 는 시간 은 최소 30 분 이 걸 릴 수 있 습 니 다. 이 작업 의 구체 적 인 시간 은 시스템 엔트로피 에 달 려 있 습 니 다.
    SSL 인증서 생 성
    도 메 인 이름 의 SSL 인증 서 를 만 들 려 면 웹 루트 플러그 인 을 사용 하여 ${webroot-path}/.well-known/acme-challenge 디 렉 터 리 에 요청 한 도 메 인 이름 을 검증 하 는 임시 파일 을 만 들 것 입 니 다.Let 's Encrypt 서버 는 요청 한 도 메 인 이름 이 Certbot 을 실행 중인 서버 로 올 바 르 게 해석 되 었 는 지 검증 하기 위해 임시 파일 에 HTTP 요청 을 보 냅 니 다.
    간편 하 게 접근 .well-known/acme-challenge 한 모든 HTTP 요청 을 /var/lib/letsencrypt 디 렉 터 리 에 표시 합 니 다.
    다음 명령 은 이 디 렉 터 리 를 만 들 고 Nginx 가 읽 기와 쓰기 권한 을 가 집 니 다.
    sudo mkdir -p /var/lib/letsencrypt/.well-known
    sudo chgrp nginx /var/lib/letsencrypt
    sudo chmod g+s /var/lib/letsencrypt

    코드 세 션 만 들 기
    Nginx 프로필 에 중복 되 는 코드 가 존재 하지 않도록 다음 두 개의 코드 세 션 (Nginx 프로필 코드) 을 만 드 십시오. 저 희 는 관련 Nginx 프로필 에 이 세 션 을 포함 할 것 입 니 다.
    1. 우선, Nginx 설정 코드 세 션 파일 을 저장 할 디 렉 터 리 를 만 듭 니 다.
    sudo mkdir /etc/nginx/snippets

    2. 첫 번 째 세 션 파일, letsencrypt. conf 를 만 듭 니 다. 모든 경 로 는 / etc / nginx / snippets / letsencrypt. conf 입 니 다.
    location ^~ /.well-known/acme-challenge/ {
      allow all;
      root /var/lib/letsencrypt/;
      default_type "text/plain";
      try_files $uri =404;
    }

    3. 두 번 째 세 션 파일, ssl. conf 를 만 듭 니 다. 전체 경 로 는 / etc / nginx / snippets / ssl. conf 입 니 다.
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    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';
    ssl_prefer_server_ciphers on;
    
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 30s;
    
    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    위의 코드 에는 Mozilla 의 추천 부분 이 포함 되 어 있 습 니 다.OCSP Stapling 을 지원 합 니 다. HTTP 는 보안 (HSTS) 을 엄 격 히 전송 하고 보안 중심의 HTTP 헤드 몇 개 를 강제 합 니 다.
    letsencrypt. conf 불 러 오기
    코드 세 션 생 성 이 완료 되면 Nginx 의 도 메 인 이름 독립 프로필 을 열 어 letsencrypt. conf 파일 을 가 져 올 수 있 습 니 다.
    여기 서 우리 의 도 메 인 이름 은 kaifazhinan. com 이기 때문에 우리 의 설정 파일 은 kaifazhinan. com. conf 이 고 파일 의 전체 경 로 는 / etc / nginx / conf. d / kaifazhinan. com. conf 입 니 다.
    server {
      listen 80;
      server_name kaifazhinan.com www.kaifazhinan.com;
    
      include snippets/letsencrypt.conf;
    }

    메모: 서로 다른 도 메 인 이름 에 대해 서로 다른 독립 프로필 을 만 드 는 것 을 권장 합 니 다.이렇게 하면 비교적 뚜렷 하고 대응 하 는 설정 을 관리 하고 찾기 쉽다.
    Nginx 의 주 프로필 중 한 줄 의 코드 는 include /etc/nginx/conf.d/*.conf 입 니 다. 이 줄 의 코드 는 /etc/nginx/conf.d/ 디 렉 터 리 에 있 는. conf 로 끝 나 는 모든 프로필 을 불 러 오 는 것 을 의미 하기 때문에 독립 된 프로필 을 /etc/nginx/conf.d/ 디 렉 터 리 에 저장 하면 자동 으로 도 입 됩 니 다.
    인증서 생 성
    Nginx 설정 을 다시 불 러 오 면 변경 사항 이 적 용 됩 니 다.
    sudo systemctl reload nginx

    현재 Certbot 에서 Webroot 플러그 인 을 사용 하여 도 메 인 이름 에 SSL 인증 서 를 생 성 할 수 있 습 니 다.
    sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d kaifazhinan.com -d www.kaifazhinan.com

    기억 하 다[email protected]메 일 로 바 꿔 주세요. 그리고 kaifazhinan. com 과 www. kaifazhinan. com 도 메 인 으로 바 꿔 주세요.
    SSL 인증 서 를 성공 적 으로 생 성 했다 면 Certbot 은 다음 과 같은 내용 을 인쇄 합 니 다.
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/kaifazhinan.com/privkey.pem
       Your cert will expire on 2019-02-11. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot
       again. To non-interactively renew *all* of your certificates, run
       "certbot 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

    Nginx 설정
    현재 SSL 인증 서 를 성공 적 으로 생 성 했 습 니 다. Nginx 도 메 인 이름 설정 을 수정 할 수 있 습 니 다. 여기 서 도 메 인 이름 은 설정 파일 은 kaifazhinan. com. conf 이 고 파일 의 전체 경 로 는 / etc / nginx / conf. d / kaifazhinan. com. conf 입 니 다.
    server {
        listen 80;
        server_name www.kaifazhinan.com kaifazhinan.com;
    
        include snippets/letsencrypt.conf;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name www.kaifazhinan.com;
    
        ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem;
        include snippets/ssl.conf;
        include snippets/letsencrypt.conf;
    
        return 301 https://kaifazhinan.com$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name kaifazhinan.com;
    
        ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem;
        include snippets/ssl.conf;
        include snippets/letsencrypt.conf;
    
        #         ,      
    }

    위의 코드 는 HTTP 요청 을 HTTPS 로 재 설정 하고 www. kaifazhinan. com 을 kaifazhinan. com 으로 재 설정 합 니 다.
    마지막 으로 아래 명령 을 통 해 Nginx 를 다시 불 러 와 위의 설정 을 적용 합 니 다.
    sudo systemctl reload nginx

    Let 's Encrypt SSL 인증서 자동 업데이트
    Let 's Encrypt 에서 발급 하 는 SSL 인증서 의 유효 시간 은 90 일 입 니 다.인증서 가 만 료 되 기 전에 인증 서 를 자동 으로 연장 해 야 합 니 다. 하루 에 두 번 씩 실행 되 는 정시 작업 을 만 들 고 인증서 가 만 료 되 기 30 일 전에 자동 으로 연장 합 니 다.crontab 명령 을 실행 하여 정시 작업 을 만 듭 니 다:
    sudo crontab -e

    위의 명령 은 자동 으로 파일 을 만 들 고 편집 상태 로 들 어가 기 때문에 아래 내용 을 복사 하여 붙 여 넣 으 면 됩 니 다.
    0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

    파일 을 저장 하고 닫 습 니 다.
    인증 서 를 정상적으로 업데이트 할 수 있 는 지 테스트 하려 면 certbot 명령 뒤에 --dry-run 이 인 자 를 추가 하여 업데이트 명령 을 주동 적 으로 실행 할 수 있 습 니 다.
    sudo certbot renew --dry-run

    출력 오류 가 없 으 면 SSL 인증서 업데이트 에 성 공 했 음 을 나 타 냅 니 다.
    총결산
    이 강 좌 를 통 해 당신 은 배 웠 습 니 다.
  • Let 's Encrypt 클 라 이언 트 Certbot 를 사용 하여 도 메 인 이름 에 SSL 인증 서 를 만 드 는 방법;
  • Nginx 의 코드 세 션 을 만들어 Nginx 설정 파일 의 코드 가 불필요 하지 않도록 하고 SSL 인증 서 를 Nginx 서비스 에 설정 합 니 다.
  • 마지막 으로 SSL 인증 서 를 자동 으로 업데이트 하여 기한 이 지나 지 않도록 정기 적 인 작업 을 만 들 었 습 니 다.

  • Certbot 에 대한 더 많은 정 보 를 알 고 싶다 면 공식 문 서 를 참고 하 세 요.
    다음 에 당신 과 만 나 기 를 기대 합 니 다:)
    개발 가이드: CentOS 7 에 Nginx 를 설치 하 는 방법

    좋은 웹페이지 즐겨찾기