[Linux] 자체 서명 사설 SSL 인증서 만들기
웹 브라우저에서 https로 접속 시 서버 인증서를 발급한 CA(루트 인증 기관)를 식별한 서버 인증서를 SSL 통신에 사용한다. 나는 개발/테스트 환경에서 사용하기 위해 CA 서명된 인증서를 구입하지 않고 사용자 지정 CA를 직접 만들고 자체 서명된 인증서를 만들기 위해 아래와 같이 작업했다.
* 자체 서명된 인증서는 기본적으로 신뢰할 수 없는 인증서로 출력된다.
* 해당 작업은 CentOS 8에서 작업했다.
1. 루트 인증서(CA) 만들기
1-1. 루트 인증서 키 만들기
(1) rootca.key 파일 만들기
openssl ecparam -out rootca.key -name prime256v1 -genkey
2. 루트 인증서 CSR(인증 서명 요청) 만들기
(1) rootca.csr 인증 서명 요청 파일 만들기
openssl req -new -sha256 -key rootca.key -out rootca.csr
...
-----
Country Name (2 letter code) [XX]: KR (국가 코드)
State or Province Name (full name) []: Gyeonggi-do (지역 이름)
Locality Name (eg, city) [Default City]: Anyang (도시 이름)
Organization Name (eg, company) [Default Company Ltd]: Ari (회사 이름)
Organizational Unit Name (eg, section) []: Cloud
Common Name (eg, your name or your server's hostname) []: Ari.Cloud CA Root Certificate
Email Address []: sdbwlss004@gmail.com
...
A Challenge password []: (Enter 누르기)
An optional company name []: (Enter 누르기)
3. 루트 인증서(CA)를 만들고 자체 서명하기
(1) rootca.crt SSL 인증서 파일 만들기
openssl x509 -req -sha256 -days 999999 -in rootca.csr -signkey rootca.key -out rootca.crt
4. 서버 인증서 만들기
(1) server.key 파일 만들기
openssl ecparam -out server.key -name prime256v1 - genkey
5. 서버 인증서 CSR(인증 서명 요청) 만들기
* 서버 인증서의 CN(일반 이름)은 발급자의 도메인과 달라야 한다. 예를 들어, 이 경우 발급자의 CN은 Ari.Cloud CA Root Certificate이며 서버 인증서의 CN은 *. in.ari.cloud이다.
(1) server.csr 인증 서명 요청 파일 만들기
openssl req -new -sha256 -key server.key -out server.csr
...
-----
Country Name (2 letter code) [XX]: KR
State or Province Name (full name) []: Gyeonggi-do
Locality Name (eg, city) [Default City]: Anyang
Organization Name (eg, company) [Default Company Ltd]: Ari
Organizational Unit Name (eg, section) []: Cloud
Common Name (eg, your name or your server's hostname) []: *. in.ari.cloud
Email Address []: sdbwlss004@gmail.com
...
A Challenge password []: (Enter 누르기)
An optional company name []: (Enter 누르기)
6. 서버 인증서를 만들고 자체 서명하기
(1) server.crt SSL 인증서 파일 만들기
인증기간은 최대 6자리로 설정할 수 있다. 일반적으로 365(1년)로 생성하거나 3650(10년)으로 생성할 수 있다.
이 문서에서는 최대 기간인 999999(2739년)로 인증서를 생성한다.
openssl x509 -req -sha256 -days 999999 -in server.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server.crt
7. 웹 서버에 SSL 인증서 적용하기
cat 명령어를 사용하여 server.crt와 rootca.crt 파일 내용을 합친 인증서 파일을 생성한다.
(1) cat server.crt rootca.crt > server.pem
8. NGINX SSL 설정하기
NGINX 기본 설치 후 SSL 인증서를 복사하고 적용한다.
(1) SSL 인증서 복사하기
cp -arp /root/ssl /etc/nginx/
(2) /etc/nginx/nginx.conf 파일에 SSL 설정 추가하기
다음 구문의 주석(#)을 해제하고 server.key와 server.pem 파일 경로를 설정한다.
vi /etc/nginx/nginx.conf
...
ssl_certificate "/etc/nginx/ssl/server.pem";
ssl_certificate_key "/etc/nginx/ssl/server.key";
...
(3) NGINX 서비스 재실행하기
systemctl restart nginx
** 출처 : https://www.runit.cloud/2020/04/https-ssl.html