• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
질문

centos7 nginx에 ssl 설치 매뉴얼 문제점 좀 파악해 주세요.

올리고당 180

0

3

아직 확실하지 않은 메뉴얼(?)이라서 잘못된 정보가 나갈까봐 쪽지로 드린다고 했던겁니다. 

뭐 이게 대단한거라고 폐쇄적으로 할려고 했던건 아니구요. ㅋㅋ

 

Centos7+Nginx Lets Encrypt 무료인증서

설치 & 설정

1. 인증서 발급

1) EPEL 리포지토리에서 certbot 패키지를 설치 (명령어 : yum install epel-release).

 

2) Certbot 설치 (명령어 : yum install certbot)

(Let's SSL 인증서 획득 및 갱신 및 웹 서버 구성 작업을 자동화할 수 있는 사용하기 쉬운 도구)

 

3) 443 방화벽 오픈 (firewall-cmd --permanent --add-service=https, firewall-cmd –reload)

 

4) 웹서버 nginx 정지 (systemctl stop nginx)

standalone 옵션으로 인증서 생성시 오류가 나기 때문에 잠깐 nginx를 끈다.

 

5) 인증서 생성 인증서 생성 (명령어 : certbot certonly --standalone -d 생성할 도메인)

# ex : certbot certonly --standalone -d example.com

이메일 입력하라 그라고 이것저것 몇 번 묻는데 다 y 로 하면 된다.

 

6) 작업이 성공적으로 끝나면 인증서는 /etc/letsencrypt/live/도메인명 에 생성된다.

 

 

 

 

2. Strong Dh(Diffie-Hellman) 그룹 생성

1) 개요 : DH(Diffie-Hellman 키 교환)는 보안되지 않은 통신 채널을 통해 암호화 키를 안전하게

교환하는 방법입니다. 다음 명령을 입력하여 새 2048비트 DH 매개변수 집합을 생성

합니다.  원하는 경우 크기를 최대 4096비트까지 변경할 수 있지만 이 경우 시스템

엔트로피에 따라 생성 시간이 30분 이상 걸릴 수 있습니다.

2) 명령어 : openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

 

3. SSL 암호화 인증서 가져오기

1) 개요 : 도메인에 대한 SSL 인증서를 얻으려면 ${webroot-path}/.well-known/acme-challenge

디렉토리에서 요청된 도메인의 유효성을 검사하기 위한 임시 파일을 생성하여 작동하는

Webroot 플러그인을 사용합니다. Let's Encryption 서버는 임시 파일에 HTTP 요청을

하여 요청한 도메인이 certbot이 실행되는 서버로 결정되는지 확인합니다.

보다 간단하게 하기 위해 .well-know/acme-challerge에 대한 모든 HTTP 요청을 단일

디렉토리 /var/lib/lets 암호화로 매핑합니다.

 

2) 디렉터리를 만들고 Nginx 서버에 대해 쓰기 가능하도록 설정

(명령어 : -.mkdir -p /var/lib/letsencrypt/.well-known

-.chgrp nginx /var/lib/letsencrypt

-.chmod g+s /var/lib/letsencrypt

 

3) 코드 복제를 방지하려면 Nginx 서버 블록 파일에 포함할 다음과 같은 두 개의 스니펫을

만듭니다

(만들 위치 : mkdir /etc/nginx/snippets)

 

-. 첫번째 파일 생성 : vi /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {

  allow all;

  root /var/lib/letsencrypt/;

  default_type "text/plain";

  try_files $uri =404;

}

-. 두번째 파일 생성 : vi /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;

4) 위의 코드 조각에는 Mozilla에서 권장하는 지퍼가 포함되어 있으며, OCSP Stapling, HTTP Strict

Transport Security(HSTS)를 사용하도록 설정하고 보안 중심 HTTP 헤더를 거의 적용하지

않습니다. 코드 조각이 생성되면 도메인 서버 블록을 열고 다음과 같이 letsecrypt.conf 코드

조각을  포함시킵니다.( 명령어 : # vi/etc/nginx/conf.d/example.com.conf)

server {

  listen 80;

  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;

}

 

5) 변경 내용을 적용, Nginx 구성 재로드 (systemctl reload nginx)

 

6) Webroot 플러그인으로 Certbot을 실행하고 다음을 실행하여 도메인의 SSL 인증서 파일을

가져올 수 있습니다. (명령어 : certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com)

SSL 인증서를 성공적으로 획득한 경우 certbot은 다음 메시지를 인쇄합니다.

7) 인증서 파일이 있으므로 다음과 같이 도메인 서버 블록을 편집할 수 있습니다.

(vi /etc/nginx/conf.d/example.com.conf)

server {

    listen 80;

    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;

    return 301 https://$host$request_uri;

}

server {

    listen 443 ssl http2;

    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    include snippets/ssl.conf;

    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;

}

server {

    listen 443 ssl http2;

    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    include snippets/ssl.conf;

    include snippets/letsencrypt.conf;

    # . . . other code

}

위의 구성에서는 HTTPS를 강제 적용하고 www를 non www 버전으로 리디렉션합니다.

8) Nginx 서비스를 재로드하여 변경내용을 적용(명령어: systemctl reload nginx)

SSL 인증서를 자동 갱신

1) 개요 : 암호화 인증서는 90일 동안 유효합니다. 만료되기 전에 인증서를 자동으로 갱신하기

위해 하루에 두 번 실행되며 만료 30일 전에 인증서가 자동으로 갱신되는 cronjob을

만듭니다.

2) crontab 명령을 실행하여 새 cronjob을 생성 (명령어 : crontab -e)

 

3) 다음 줄을 붙여넣습니다.

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"

 

4) 파일을 저장한 후 닫기.

 

5) 갱신 프로세스를 테스트하려면 certbot 명령과 함께 --dry-run 스위치를 사용 가능

certbot renew --dry-run

 

6) 오류가 없으면 테스트 갱신 프로세스가 성공적이었음을 의미합니다.

 

(참조사항)

이 튜토리얼에서는 Let's Encrypt 클라이언트, certbot을 사용하여 도메인의 SSL 인증서를 다운로드했습니다. 또한 코드 복제를 방지하기 위해 Nginx 스니펫을 만들고 인증서를 사용하도록 Nginx를 구성했습니다. 마지막으로 인증서 자동 갱신을 위한 cronjob을 설정합니다. Certbot 사용 방법에 대해 자세히 알고 싶다면 Certbot의 설명서를 참조해주세요.

본인의 도메인에 https를 적용하기 위해서, 위 예제에 적용된 example.com을 본인의 도메인을 잘 변경해주셔야 합니다.

 

현재 이렇게 작성을 했습니다. 

제 위주로 적어 놓아서 보시기 어떨지...

암튼, 2가지 블로그를 참조하였습니다. 크게 보면 발급과정, 이후 과정으로 나눱니다. (블로그 참조 사항도 그렇구요)

고견 좀 부탁드리겠습니다.

 

신고공유스크랩
3
profile image 1등
달소 2021.07.21. 13:49

제가 Cent OS를 메인으로 사용하고있지않아서 인증서 발급단계에서 다른부분이 꽤 많은거 같은데요.(Ubuntu 대비)

nginx domain 블럭에서 443에대한 설정에 301은 저렇게 안들어가도 문제없을거같습니다!

Cent OS쪽은 클라우드에 올려서 직접 테스트해봐야겠네요.

전체적으로 상세히 적어주셨는데 조금더(?) 간결하게도 될것같기도...아닐거같기도..합니다 ㅠ

올리고당 글쓴이 2021.07.21. 13:52
달소

저는 좀 매뉴얼 같은걸 만들때 아주 단계별로 쓰는 습관이라서요. 테스트 해주신다니 고맙습니다.

단순하다면 더 좋죠.

profile image 2등
달소 2021.07.21. 16:22

https://svrforum.com/svr/52964

글을한번 작성해보았는데 이대로해도 문제없는거같습니다.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
가이드 나만의 구독 관리하기 Wallos 서버 구축하기. 6 달소 1일 전17:19 211 +2
후기 네트워크 구성도와 상세 스펙 공유 3 맘맘 1일 전16:17 227 +1
정보 NPM에서 Tailscale IP로 역방향 프록시 안 되는 문제 해결 방법 2 fenfen 1일 전11:36 138 +5
3926 정보
image
달소 20.12.24.17:58 472 +1
3925
image
달소 20.12.24.18:04 1761 +4
3924
image
달소 20.12.24.18:04 644 +2
3923
image
달소 20.12.25.17:18 16300 +5
3922
image
달소 20.12.25.17:18 3161 +5
3921
image
달소 20.12.25.17:20 971 +3
3920
image
달소 20.12.25.17:20 405 +2
3919
image
달소 20.12.26.22:29 232 0
3918
image
달소 20.12.26.22:31 250 +1
3917
image
달소 20.12.26.22:52 86 +1
3916
image
달소 20.12.27.00:16 196 0
3915
image
달소 20.12.27.00:58 167 0
3914
image
달소 20.12.31.12:29 315 0
3913
image
달소 20.12.31.12:29 142 0
3912
image
달소 20.12.31.12:30 1107 0
3911
image
달소 20.12.31.12:30 111 0
3910
image
달소 21.01.02.13:32 8192 0
3909
image
달소 21.01.02.13:32 1714 0
3908
image
달소 21.01.02.14:13 292 +2
3907
image
달소 21.01.02.15:03 485 0