Nginx 튜 토리 얼 \ # 3: SSL 설정

9369 단어
안녕하세요!나 눔 은 배려 입 니 다. 우 리 는 기꺼이 당신 과 다른 지식 을 나 누 겠 습 니 다.우 리 는 세 가지 시리즈 로 나 뉘 는 Nginx 안내 서 를 준비 했다.만약 당신 이 Nginx 지식 을 알 고 있 거나 경험 과 인 지 를 넓 히 고 싶다 면 이것 은 더 이상 적합 하지 않 습 니 다.
우 리 는 Nginx 의 운영 모델, 함 축 된 개념, 어떻게 Nginx 를 조정 하여 응용 성능 을 향상 시 키 거나 작 동 과 운행 을 어떻게 설정 하 는 지 알려 줄 것 이다.
이 강 좌 는 세 부분 이 있다.
기본 개념 —— 이 부분 은 Nginx 의 일부 명령 과 사용 장면, 계승 모델, 그리고 Nginx 가 server 블록, location 의 순 서 를 어떻게 선택 하 는 지 알 아야 한다.
성능 —— Nginx 속 도 를 개선 하 는 방법 과 기 교 를 소개 합 니 다. 우 리 는 여기 서 gzip 압축, 캐 시, buffer 와 시간 초과 에 대해 이야기 할 것 입 니 다.
SSL 설치 —— 서버 에서 HTTPS 를 사용 하도록 설정 하 는 방법 이 시 리 즈 를 만 듭 니 다. 하 나 는 참고서 로 서 관련 문제 (예 를 들 어 gzip 압축, SSL 등) 의 해결 방식 을 신속하게 찾 을 수 있 고 전문 도 직접 읽 을 수 있 기 를 바 랍 니 다.더 좋 은 학습 효 과 를 얻 기 위해 서, 우 리 는 당신 이 이 컴퓨터 에 Nginx 를 설치 하고 실천 을 시도 할 것 을 건의 합 니 다.
SSL 과 TLS
SSL (Socket Secure Layer 줄 임 말) 은 HTTP 를 통 해 보안 연결 을 제공 하 는 프로 토 콜 입 니 다.SSL 1.0 은 넷 스 케 이 프 가 개 발 했 으 나 심각 한 보안 취약 점 때문에 공개 적 으로 발 표 된 적 이 없다.SSL 2.0 은 1995 년 에 발표 되 었 는데 문제 가 있어 최종 SSL 3.0 이 1996 년 에 발표 되 었 다.TLS (Transport Layer Security 줄 임 말) 의 첫 번 째 버 전 은 SSL 3.0 업그레이드 버 전 으로 작 성 된 것 이다.이후 TLS 1.1 과 1.2 가 나 왔 다.이제 곧 TLS 1.3 이 출시 될 예정 이 며 일부 브 라 우 저 에 의 해 지원 되 고 있다.기술적 으로 SSL 과 TLS 는 다르다.
기본 SSL / TLS 설정
HTTPS 트 래 픽 을 처리 하기 위해 서 는 SSL / TLS 인증서 가 필요 합 니 다.무료 인증 서 를 만 들 기 위해 Let 's encrypt 를 사용 할 수 있 습 니 다.
인증 서 를 가지 고 있 으 면 다음 과 같은 방식 으로 HTTPS 로 쉽게 전환 할 수 있 습 니 다.
감청 포트 443 시작 (입력 할 때 https://sample.co 브 라 우 저가 사용 할 기본 포트 인증서 및 키 제공
server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;

  ssl_certificate /etc/nginx/ssl/netguru.crt;
  ssl_certificate_key /etc/nginx/ssl/netguru.key;
}

우리 도 설정 조정 을 통 해 실현 하고 싶 습 니 다.
TLS 프로 토 콜 만 사용 합 니 다.모두 가 알 고 있 는 빈틈 으로 인해 모든 SSL 버 전 은 더 이상 사용 하지 않 습 니 다 미리 정 의 된 보안 서버 암 호 를 사용 합 니 다 (프로 토 콜 과 유사 한 경우 - 그 날 에는 소수의 암호 만 안전 하 다 고 여 겨 집 니 다) 상술 한 설정 은 항상 변화 하고 있다 는 것 을 명심 하 세 요.시도 때 도 없 이 다시 갱신 하 는 것 은 좋 은 생각 이다.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
ssl_prefer_server_ciphers on;

server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;

  ssl_certificate /etc/nginx/ssl/netguru.crt;
  ssl_certificate_key /etc/nginx/ssl/netguru.key;
}

TLS 세 션 복구
HTTPS 를 사용 하면 TCP 위 에 TLS 악 수 를 추가 해 야 합 니 다.이 는 그동안 실제 데이터 전송 시간 을 크게 늘 렸 다.바르샤바 에서 / image. jpg 를 요청 하고 베를린 의 가장 가 까 운 서버 에 접속 한다 고 가정 하 십시오.
Open connection

TCP Handshake:
Warsaw  ->------------------ synchronize packet (SYN) ----------------->- Berlin
Warsaw  -  ->------------------- acknowledgement (ACK) ------------------->- Berlin

TLS Handshake:
Warsaw  ->------------------------ Client Hello  ---------------------->- Berlin
Warsaw  -  ->---------------------- Change Ciper Spec -------------------->- Berlin
Warsaw  -transfer:
Warsaw  ->---------------------- /image.jpg --------------------------->- Berlin
Warsaw  -

TLS 악수 기간 에 roundtrip 시간 을 절약 하고 새 키 를 만 드 는 계산 비용 을 절약 하기 위해 서 는 첫 번 째 요청 기간 에 생 성 된 세 션 인 자 를 다시 사용 할 수 있 습 니 다.클 라 이언 트 와 서버 는 세 션 인 자 를 세 션 ID 키 뒤에 저장 할 수 있 습 니 다.다음 TLS 악수 과정 에서 클 라 이언 트 는 세 션 ID 를 보 낼 수 있 습 니 다. 서버 가 캐 시 에 올 바른 항목 이 있다 면 이전 세 션 에서 생 성 된 인 자 를 다시 사용 합 니 다.
server {
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
}

OCSP Stapling
SSL 인증 서 는 언제든지 취소 할 수 있 습 니 다.브 라 우 저 는 주어진 인증서 가 더 이상 유효 하지 않 은 지 알 기 위해 온라인 인증서 상태 프로 토 콜 (Online Certificate Status Protocol) 을 통 해 ,OCSP) 추가 조 회 를 실행 합 니 다.사용자 가 지정 한 OCSP 조 회 를 실행 할 필요 가 없습니다. 저 희 는 서버 에서 이 작업 을 수행 하여 결 과 를 캐 시 하고 TLS 악수 기간 에 클 라 이언 트 에 OCSP 응답 을 제공 할 수 있 습 니 다.OCSP 라 고 불 립 니 다. stapling。
server {
  ssl_stapling on;
  ssl_stapling_verify on;                               # verify OCSP response
  ssl_trusted_certificate /etc/nginx/ssl/lemonfrog.pem; # tell nginx location of all intermediate certificates

  resolver 8.8.8.8 8.8.4.4 valid=86400s;                # resolution of the OCSP responder hostname
  resolver_timeout 5s;
}

Security headers
더 높 은 안전성 을 제공 하기 위해 서 는 확실히 조정 할 가치 가 있다.레이 블 과 그 에 대한 자세 한 정 보 는 OWASP 프로젝트 의 안전 레이 블 을 확인 해 야 합 니 다.
HTTP Strict-Transport-Security 
또는 HSTS 라 고 약칭 하여 사용자 에이전트 가 원본 에 요청 을 보 낼 때 HTTPS 를 사용 하도록 강제 합 니 다.
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

X-Frame-Options
브 라 우 저 가 한 프레임, iframe 또는 대상 탭 에 페이지 를 렌 더 링 해 야 하 는 지 여 부 를 표시 합 니 다.
add_header X-Frame-Options DENY;

X-Content-Type-Options
이 옵션 을 사용 하면 브 라 우 저가 파일 형식 을 판단 할 때 파일 을 탐색 하 는 것 을 막 을 수 있 습 니 다.파일 은 Content - Type 헤더 에서 설명 한 형식 으로 전 역 됩 니 다.
add_header X-Content-Type-Options nosniff;

Server tokens
또 다른 좋 은 방법 은 HTTP 응답 헤더 필드 에 웹 서버 에 대한 정 보 를 숨 기 는 것 입 니 다.
Server : nginx/1.13.2

이 기능 을 구현 하려 면 server 사용 하지 않 기 를 통 해tokens 명령 어:
server_tokens off;

부록 :: Let’s Encrypt
설치 하 다.
최신 설치 패 키 지 는 여기 서 찾 을 수 있 습 니 다.
임시 저장 환경 을 테스트 하기 위해 서 는 속도 제한 을 배제 하지 않 는 다.
새 인증서 생 성
certbot certonly --webroot --webroot-path /var/www/netguru/current/public/  \
          -d foo.netguru.co \
          -d bar.netguru.co

정확 한 업데이트 가 가능 하도록 확보 하 다.
certbot renew --dry-run

crontab 에 자동 업데이트 가 추가 되 었 는 지 확인 하 세 요.운행 하 다. crontab - e, 다음 줄 코드 추가
 3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/nginx -s reload"

SSL 통과 여부 확인 ssllabs 정상 운행.
총결산
읽 어 주 셔 서 감사합니다.만약 대량의 자원 이 없다 면 이 시 리 즈 는 완성 할 수 없 을 것 이다.이 일련의 글 쓰기 에서 우 리 는 특히 유용 한 사 이 트 를 발견 했다.
nginx 문서 nginx 블 로그 udemy (온라인 교육 사이트) 의 nginx 원리 Ilya Grigorik 의 블 로그 와 그의 놀 라 운 책: Martin Fjordvald 의 블 로그 Nginx 튜 토리 얼 \ # 1: 기본 개념
Nginx 튜 토리 얼 \ # 2: 성능
원래    글: Nginx Tutorial \ # 3: SSL 설정
번역 하 다.    중국 지역사회
하 다.    Tocy, 국장, madbooker, 남궁 빙 울, AsyDong 번역

좋은 웹페이지 즐겨찾기