read

SSL 인증서… 1년마다 갱신하는거 너무 귀찮습니당 ㅠ

Nginx 웹서버에 신규 SSL 인증서파일을 적용해보겠습니다.

Server Spec.

$ ./nginx -V
nginx version: nginx/1.22.0 

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

$ arch
x86_64

SSL 인증서 비밀키 암호화 해제

암호화된 key 파일 인증서를 사용하면 nignx 를 재구동할때마다 비밀번호를 입력해줘야 합니다.
그래서 복호화된 인증서를 적용하기로 합니다.


먼저 암호화 인증서인지 확인해볼까요?
인증서 key 파일을 열어보니 ENCRYPTED 라고 암호화되어 있다고 알려주는군요.

$ vi nginx.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,B483E552B16F30BD

5JxAe8PkJdtwzPpJhvc1POimpdWY4E2QiUr3ONMteNhaRwx3lEGDRy4PSBjw++72
~ 생략
XcG4kXNa6UGwZR35QjtdeK7ovWNaewoYTnLn4MM1mXslAsFQwSNYAvrpy2h1Fw24
-----END RSA PRIVATE KEY-----

그럼 복호화를 해봅시다.

기존 key 파일을 백업해주고~

$ cp nginx.key nginx_original.key

OpenSSL로 이용해서 복호화를 해줍니다.
OpenSSL은 Linux 서버나 MacOS 에 기본으로 설치되어 있습니다.

openssl rsa -in [암호화된 key 파일] -passin pass:[비밀번호]  -out [복호화될 key 파일] 

key파일이 복호화 되어 있다는것을 강조하기 위해 key 파일명에 _NOPASS를 붙여줍니다.
서버를 운영하다보면 파일이나 디렉토리 네이밍이 아주 중요합니다.
일일히 다 파헤치지 않아도 이서버는 복호화된 인증서를 사용하는구나~ 라고 알 수 있는것이지요.

$ openssl rsa -in nginx.key -passin pass:passwd1234 -out ngix_NOPASS.key

복호화된 key 파일을 확인해봅니다.

$ ll *.key
-rw-r--r--@ 1 tree  willow   1.7K  7 25 10:00 ngix_NOPASS.key
-rw-r--r--@ 1 tree  willow   1.7K  7 25 10:00 nginx_original.key

복호화된 key 파일 내용도 한번 볼까요?
암호화 안내 상단 부분이 없군요. 복호화 성공~

$ vi ngix_nopass.key
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwDiMT32Jg3OkLdTgPpYqyIWdCRrd2mAsTRDD1/e8epfKK3w/
~ 생략
OHIqzmYOdAxKiZ2jR9KRXSTNeGLsQEIXbzBrWAwFhtMw4wodbmO3HtM=
-----END RSA PRIVATE KEY-----

SSL 인증서 갱신

갱신한 인증서 파일을 준비합니다.
key 파일명에 _NOPASS를 보니 복호화파일이겠군요.

$ ll nginx.*
-rw-r--r--@ 1 tree  willow   1.7K  7 25 09:43 nginx_NOPASS.key
-rw-r--r--@ 1 tree  willow   2.4K  7 25 09:43 nginx.pem

제가 작업한 순서는 회사 인프라 구성에 따라 다르답니다.
참고만 해주세요~
인증서 파일(key, pem)을 로컬PC 에서 게이트웨이 서버에 전송합니다.

$ scp ~/Downloads/nginx.* 사용자@게이트웨어서버:~/

인증서 파일(key, pem)을 게이트웨이 서버에서 웹서버로 전송합니다.
웹서버가 여러대인경우 모두 전송합니다.

$ scp nginx.* 사용자@웹서버:~/

인증서 파일을 사용하고 있는 설정파일을 찾아보겠습니다.

$ egrep -rni "ngix_nopass.key" ~/nginx/conf/*
~/apps/nginx/conf/toast.com.ssl:2: ssl_certificate_key ssl/nginx_nopass.key;

혹시 모를 롤백을 대비해서 기존인증서를 백업합니다.
전임자가 확장자를 반대로 (내용은 copy) 해놓아서 롤백하는일이 일어났습니다. ㅠ (왜?!!)

$ cp -r ssl ssl_20230724

파일명을 동일하게 수정한 신규 인증서 파일을 덮어씌워줍니다.
mv 명령은 동일한 파일명이 있는경우 덮어씌웁니다.

$ mv nginx.* ~/apps/nginx/conf/ssl/

웹서버가 여러대인경우
인증서 갱신한 웹서버의 아이피를 /etc/hosts 에 설정합니다.

xxx.xxx.xxx.xx1	site.didalgus

인증서 갱신한 웹서버의 nginx 설정을 리로드 해줍니다.

$ ~/nginx/sbin/nginx -s reload

브라우저에서 새로고침 후 인증서 보기로 만료일을 확인합니다.

변경전 변경후
발급일:2022년 6월 30일 목요일 오전 9:00:00
만료일:2023년 8월 1일 화요일 오전 8:59:59
발급일:2023년 7월 10일 월요일 오전 9:00:00
만료일:2024년 8월 10일 토요일 오전 8:59:59

이제 이 작업을 웹서버 개수만큼 반복합니다.
삽질 시작~!

Nginx CentOS

Blog Logo

Weeping Willow


Published

Image

Willow's Blog

Welcome!

Back to Overview