0%

개발시 HTTPS 테스트를 위한 SSL인증서(OpenSSL) 생성하기

들어가기

이 예제는 Nginx등과 같은 웹서버에 HTTPS를 적용하기 위한 테스트용 SSL 인증서를 생성하는 예제이다.

실습환경

  • Windows10
  • OpenSSL
  • cmd

테스트용 HTTPS 인증서 생성하기

웹서버에 HTTPS를 적용하려면, CA에서 발급하는 SSL인증서가 필요하다.
보통 사설업체에 Domain을 기준으로 돈을 주고 인증서를 신청하는데, 지금은 테스트 용이므로 로컬에서 가짜 인증서를 만들어 보자.

Windows10에 OpenSSL 설치하기

인증서를 생성하기 위해서는 OpenSSL이라는 툴이 필요하다. 아래 링크해서 해당 툴을 다운 받자.

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

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled.png

광고를 좀 봐주면서 시간이 지나면, OpenSSL zip파일이 다운로드가 된다.

아래처럼 zip파일 압축을 풀어주자.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%201.png

압축이 풀린 폴더 내부에 bin폴더 내부로 들어가 보면 아래처럼 openssl.exe 파일이 있다.
해당 파일을 관리자 권한으로 실행한 cmd로 실행해보자.

1
openssl-1.0.2j-fips-x86_64\OpenSSL\bin\openssl.exe

내 경우 문제가 발생했는데, openssl.exe 실행시 openssl.cnf 파일을 읽어오시 못한다는 경고가 나온다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%202.png

1
WARNING: can't open config file: C:/OpenSSL/openssl.cnf

경고 메세지를 보면 OepnSSL 폴더가 C 드라이브 바로 아래에서 읽어 오고 있다.

따라서 OpenSSL 폴더를 C 드라이브 경로로 옮겨서 다시 실행해보자.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%203.png

OpenSSL 폴더를 C 드라이브로 옮겼다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%204.png

C:\OpenSSL\bin\openssl.cnf 파일을 복해서 C:\OpenSSL로 옮겨주자.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%205.png

다시 C:\OpenSSL\bin\openssl.exe 파일을 관리자 권한 cmd로 실행해보자.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%206.png

아래처럼 정상적으로 openSSL이 실행된다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%207.png

RSA 개인키를 생성하자.

OpenSSL 커멘드에 아래 명령어를 입력해서 개인키를 생성하자.

1
genrsa -out private.key 2048

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%208.png

아래처럼 openSSL.exe 실행경로에 private.key 파일이 생성된 것을 확인 할 수 있다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%209.png

파일을 열어보면 아래처럼 개인키가 보인다.

테스트 용도라서 이렇게 노출하지만, 실제 절대 외부로 노출되서는 안되는 개인키 이다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2010.png

RSA 개인키를 이용해서 RSA 공개키를 생성하자.

개인키가 있는 경로에서 아래 명령어를 입력해서 공개키를 생성하자.

1
rsa -in private.key -pubout -out public.key

아래처럼 public.key 가 생성된다. (이미지에서는 명령어 입력시 오타를 쳐서 파일명이 이상하다.)

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2011.png

공개키 파일을 열어보면 아래와 같다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2012.png

CSR(인증요청서) 생성하기

CA 인증기관에게 인증서를 받기위한 인증요청서를 생성해야 한다.
신청할 때에는 국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소등 다양한 정보를 입력 받게된다.

이 CSR은 앞서 생성한 RSA 개인키를 이용해서 생성 할 수 있다.

openSSL커맨드로 아래 명령어를 입력하자.

1
req -new -key private.key -out private.csr

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2013.png

아래처럼 국가 코드를 입력하라고 나온다. kr 이라고 입력하고 넘어가면

아래처럼 추가정보를 입력하라고 주르륵 나온다. 테스트 용이니 대충 입력하고 넘기자.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2014.png

아래처럼 private.csr 인증 요청서가 생성 되었다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2015.png

CRT(인증서)만들기

이제 인증요청서로 테스트 용도의 가짜 CRT를 만들어보자.

CA 역할을 할 CA 대칭키 생성

아래 명령어로 CA역할을 할 CA 대칭키(aes256)를 생성하자.

(사실 왜 대칭키를 생성하는지 모르겠다.)

1
genrsa -aes256 -out rootCA.key 2048

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2016.png

아래처럼 rootCA.key 가 생성 되었다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2017.png

rootCA.key를 이용해서 rootCA.pem 생성

(사실 이녀석도 뭔지 잘 모르겠다.)

1
req -X509 -new -nodes -key rootCA.key -days 2650 -out rootCA.pem

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2018.png

비밀번호등 국가코드, 도시 기타 등등 정보를 입력해야 한다.(테스트니 대충 넣자)

아래처럼 rootCA.pem 파일이 생성된다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2019.png

웹서버에 HTTPS적용을 위해 필요한 CRT 인증서를 생성

이제 마지막으로 CRT를 즉 웹서버에 HTTPS를 적용하기 위한 인증서를 생성해보자.

아래 명령어를 이용해서 앞서 생성한, 인증 요청서(private.csr) , rootCA.pem, rootCA.key 를 이용해서 웹서버에 등록할 CA 인증서 private.crt 를 생성하자.

1
x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2020.png

아래처럼 private.crt 파일이 생성되었다. 모양세도 지금까지 생성한 파일과는 좀 다르다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2021.png

파일을 열어보면 아래처럼 나온다.

HTTPS%20SSL%20OpenSSL%2080f6b0d2700149518b84d5d8a5a4509e/Untitled%2022.png

실습 끝!!!

ps

사실 이런 인증서 부분에 대해 정확히 알지 못해, 실습을 하면서도 다 이해하지 못했다.
특히 CA 인증서 생성부분… 시간이 좀 나면 해당 내용을 공부해서 보충 해야 겠다.

참고자료

https://namjackson.tistory.com/24
https://opentutorials.org/course/228/4894