CentOS 7 에서 SSL 인증 서 를 Nginx 암호 화 하 는 방법
Let 's Encrypt 는 Internet Security Research Group (ISRG) 이 개발 한 자 유 롭 고 자동화 되 며 개 방 된 인증서 발급 기관 이다.현재 거의 모든 현대 브 라 우 저 는 Let 's Encrypt 에서 발급 한 인증 서 를 신뢰 합 니 다.
이 튜 토리 얼 은 CentOS 7 에서 Certbot 을 통 해 SSL 보안 인증 서 를 만 들 고 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 인증서 업데이트 에 성 공 했 음 을 나 타 냅 니 다.
총결산
이 강 좌 를 통 해 당신 은 배 웠 습 니 다.
Certbot 에 대한 더 많은 정 보 를 알 고 싶다 면 공식 문 서 를 참고 하 세 요.
다음 에 당신 과 만 나 기 를 기대 합 니 다:)
개발 가이드: CentOS 7 에 Nginx 를 설치 하 는 방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
무료 다 중 도 메 인 이름 Let 's Encrypt 어댑터 인증 서 를 만 드 는 방법머리말 개인 애플 릿 이 제대로 열 리 지 않 아 사용자 가 신고 하 러 왔 습 니 다. 확인 한 결과 https 인증서 가 만 료 되 었 습 니 다.지난번 1 할 은 1 년 전이 니까 다시 만들어 야 겠 어 요.다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.