웹서버

[Tips] HTTPS 자체서명(Self-Signed) 또는 테스트 인증서 생성 및 적용하기

투칼론 2022. 10. 25. 21:29
반응형

개발 및 테스트 단계에서 비용이 발생하는 정식 인증서 대신에 테스트용으로 HTTPS 인증서를 생성하고, 이를 웹서버에 적용이 필요할 때, 방법을 정리해보고자 한다.

Windows 플랫폼에 OpenSSL 툴을 통해 인증서를 생성하여, Apache 웹서버에 설정하는 것을 예시로 한다.

OpenSSL 설치 및 실행 >> 인증서 요청(CSR) 파일 생성 >> 서버 인증서 생성 >> 웹서버에 서버 인증서 설치 단계로 수행하면 된다.

 

1. OpenSSL 설치 및 실행

 

1) OpenSSL 다운로드

https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect

Windows 64 비트 파일 : openssl-1.0.2j-fips-x86_64.zip

 

2) OpenSSL 설치

다운로드 받은 zip 파일을 설치하고자 하는 디렉터리에 압축을 푼다.

예) D:\Utility 디렉터리에 압축을 푸는 경우,

      D:\Utility\OpenSSL 하위 디렉터리에 아래와 같은 하위 디렉터리가 생성됨

 

 

 

 

 

 

3) OpenSSL 실행

"관리자 권한"으로 cmd를 실행하고, 아래와 같이 Config 파일 위치를 설정한다. Config 파일을 설정하지 않는 경우, 기본적으로 C: 에서 Config 파일 찾아 오류가 발생할 수 있음.

d:\utility\OpenSSL\bin>set OPENSSL_CONF=d:\Utility\OpenSSL\bin\openssl.cnf
d:\utility\OpenSSL\bin>openssl
OpenSSL>

 

2. 인증서 요청(CSR) 파일 생성

이 단계는 HTTPS 웹서버를 운영하는 회사(예, ABC 회사)에서 서버 인증서를 발급받기 위해 CSR 파일을 생성하는 단계이다. 생성한 CSR 파일 또는 내용을 인증서 발급회사에 인증서 신청 시에 송부한다.

 

1) 개인키(Private Key) 생성

OpenSSL> genrsa -out ABC_private.key 2048
Generating RSA private key, 2048 bit long modulus
...................................+++
............+++
e is 65537 (0x10001)

결과물 : ABC_private.key

 

2) CSR(Certificate Signing Request) 생성

SSL 서버를 운영하는 회사의 정보를 암호화하여 인증 기관으로 보내 인증서를 발급받게 하는 일종의 신청서이다.

OpenSSL> req -new -key ABC_private.key -out ABC_private.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
결과물 : ABC_private.csr

 

CSR 파일 생성 시에 신청사 정보를 요청하는데, 영문으로 정확하게 입력해야 한다. 

 

Country Name (2 letter code) [AU]:KR                                   // 국가코드 (예, KR)
State or Province Name (full name) [Some-State]:SEOUL     // 지역 (예, SEOUL)
Locality Name (eg, city) []:SEOUL                                           // 시/군/구(예, SEOUL)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ABC Co.   // 사업자등록증에 등록되어 있는 영문회사명
Organizational Unit Name (eg, section) []:Accounting              // 부서명
Common Name (e.g. server FQDN or YOUR name) []:www.abc.co.kr       // 서비스 도메인명 (예, www.abc.co.kr)
Email Address []:abc@gmail.com                                             // 이메일 주소

 

추가로 입력이 요구되는 'extra' 속성(challenge password, optional company name)은 입력하지 않아도 된다.

 

3. 서버 인증서(CRT) 생성

이 단계는 인증기관(CA)(예, rSecurity)에서 CSR로 요청받은 회사의 인증서 파일(CRT)을 생성하는 단계이다. 발급 후에, 신청회사(예, ABC)에 송부한다. 물론 테스트 인증서는 직접 생성하니 해당 파일을 웹서버에 설정된 위치에 놓아두면 된다.

 

1) 인증기관(CA) 대칭키 생성

OpenSSL> genrsa -aes256 -out rSecurity_CA.key 2048
Generating RSA private key, 2048 bit long modulus
........................+++
..........................+++
e is 65537 (0x10001)
Enter pass phrase for rSecurity_CA.key:
Verifying - Enter pass phrase for rSecurity_CA.key:

결과물 : rSecurity_CA.key

암호를 2번 입력함.

 

2) 인증기관(CA) 대칭키를 통해 PEM 파일 생성

OpenSSL> req -x509 -new -nodes -key rSecurity_CA.key -days 3650 -out rSecurity_CA.pem
Enter pass phrase for rSecurity_CA.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----

결과물 : rSecurity_CA.pem

위에서 입력한 암호를 입력해야함.

 

인증기관(CA) 정보를 요청하는데, 영문으로 정확하게 입력해야 한다.

 

Country Name (2 letter code) [AU]:KR                                   // 국가코드 (예, KR)
State or Province Name (full name) [Some-State]:SEOUL     // 지역 (예, SEOUL)
Locality Name (eg, city) []:SEOUL                                           // 시/군/구(예, SEOUL)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:rSecurity Co. // root CA 영문회사명
Organizational Unit Name (eg, section) []:Security                 // 부서명
Common Name (e.g. server FQDN or YOUR name) []:www.rsecurity.co.kr       // root CA 도메인명 (예, www.rsecurity.co.kr)
Email Address []:rsecurity@gmail.com                                             // 이메일 주소

 

3) 신청사 CRT 인증서 생성

OpenSSL> x509 -req -in ABC_private.csr -CA rSecurity_CA.pem -CAkey rSecurity_CA.key -CAcreateserial -out ABC.crt -days 365
Signature ok
subject=/C=KR/ST=SEOUL/L=SEOUL/O=ABC Co./OU=Accounting/CN=www.abc.co.kr/emailAddress=abc@gmail.com
Getting CA Private Key
Enter pass phrase for rSecurity_CA.key:

결과물 : ABC.crt (신청사 CRT 인증서 파일), rSecurity_CA.srl(시리얼 관리하기 위한 파일)

위에서 입력한 암호를 입력해야함.

 

4. 생성된 신청사 CRT 인증서 파일 확인

1) 위의 작업에 의해 생성된 파일

 

2) 인증서 파일(CRT) 확인

인증서 파일(CRT)를 열어보면, 위의 과정에서 입력한 발급대상, 발급자, 유효기간을 확인할 수 있음.

 

참고로, 요즈음 무료로 인증서를 발급해주는 해외 사이트가 있음. 아래 URL 참조

https://foxydog.tistory.com/39

 

* 웹서버에  서버 인증서(CRT) 설정 및 테스트

1) SSL 설정

2) 인증서 설정

3) 웹서버 재기동

4) HTTPS 테스트

 

다음 단계로 웹서버(Apache)에 SSL 설정 과정은 아래 블로글 참고하면 됨.

https://blueyikim.tistory.com/2490