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

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
번호 분류 제목 글쓴이 날짜 조회 추천
가이드 Ubuntu에서 Ubuntu Pro 로 전환하기 1 달소 12시간 전22:22 194 +2
가이드 Gaming Linux OS Garuda Linux 설치해보기. 1 달소 1일 전06:46 126 +1
Proxmox 8 레포 설정 및 패키지 설치방법. (The enterprise repository is enabled, but there is no active subscription!) 1 달소 1일 전05:50 134 +6
3884 가이드
image
달소 12시간 전22:22 194 +2
3883 가이드
image
ljr10 1일 전08:20 120 0
3882 가이드
image
달소 1일 전06:46 126 +1
3881
image
달소 1일 전05:50 134 +6
3880 정보
image
달소 1일 전05:38 77 0
3879 잡담
image
달소 1일 전05:20 271 0
3878 오픈소스
image
keiminem 1일 전17:43 289 +3
3877 질문
normal
purndal 1일 전14:32 212 0
3876 질문
image
초보나스 2일 전10:46 95 0
3875 후기
image
달소 2일 전10:03 245 0
3874 질문
normal
keiminem 2일 전09:29 288 0
3873 잡담
normal
kmw_ 2일 전09:11 143 0
3872 질문
normal
환경설정 2일 전13:31 377 0
3871 잡담
image
지축또타 3일 전23:02 321 +1
3870 질문
image
ljr10 3일 전20:47 366 0
3869 잡담
image
양미 3일 전18:34 182 0
3868 잡담
file
몰래컴퓨터 4일 전00:30 167 0
3867 질문
image
무백 4일 전21:45 181 0
3866 잡담
normal
kmw_ 5일 전21:52 571 0
3865 후기
normal
ljr10 5일 전21:18 161 0