공부중/작업하기

[Linux] 자체 서명 사설 SSL 인증서 만들기

서규Dev 2022. 9. 7. 16:42

웹 브라우저에서 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