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

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

올리고당 178

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
번호 분류 제목 글쓴이 날짜 조회 추천
후기 서버포럼 덕분에 proxmox 이사 완료 했습니다 ㅎㅎ 5 N4100 3일 전18:56 381 +3
가이드 SAS3008 칩셋 카드 IT 펌웨어 먹이기 4 펜타네스트 3일 전18:39 277 +1
후기 오랜만에 immich 이미지 업데이트 후기/가이드(?). 1.86 -> 1.101 3 달소 5일 전21:35 273 +1
3842 질문
normal
bass9030 7시간 전00:43 28 0
3841 잡담
normal
칼룬 13시간 전18:12 107 0
3840 질문
normal
늘맑음 17시간 전15:10 126 0
3839 질문
image
게르노 19시간 전12:26 48 0
3838 잡담
normal
bong90a 21시간 전10:50 278 0
3837 후기
image
추주비 21시간 전10:33 185 0
3836 질문
normal
angrynerd 1일 전14:11 364 0
3835 오픈소스
image
달소 3일 전23:00 351 0
3834 후기
normal
N4100 3일 전18:56 381 +3
3833 가이드
file
펜타네스트 3일 전18:39 277 +1
3832 질문
image
똥쓰똥쓰 3일 전17:02 261 0
3831 후기
image
동도리군 3일 전10:27 299 0
3830 질문
image
칼룬 4일 전11:56 74 0
3829 질문
image
초보나스 4일 전11:13 311 0
3828 질문
image
kmw_ 5일 전22:29 204 0
3827 후기
image
달소 5일 전21:35 273 +1
3826 질문
normal
ljr10 5일 전21:33 168 0
3825 질문
normal
서버구축하자 5일 전16:35 158 0
3824 질문
image
서버가갖고싶어요 6일 전09:07 345 0
3823 질문
image
sH. 24.04.12.05:35 166 0