본문 바로가기

STUDY & Sharing Information/NetWork

[인증서]SSL 인증서를 직접 발행해보자. (Windows)

2018.10.24 업무 시간에 프로그램 개발에 대한 프로세스를 생각을 하고 있었다.

그러다 문뜩, 데이터를 주고 받을 데몬이 필요로 하다는 것을 알게되었다.


그래서 이전에 한국 지사만 있었을 때에 만들었던 데몬이 생각이 났고, 해당 소스를 분석하기 시작하였다.


해당 소스를 만들 적에 들은 이야기로 네티라는 용어를 기억하고 있었고, 소스를 보면서 이해하려고 노력을 하였으나, JAVA 계열의 전문가는 아니다 보니, 이해를 못하고 넘어갔다.


그리고, JAVA 계열의 소스를 확인하던 차에, 혹시 닷넷도 있지 않을까라는 생각을 하게 되었다.


그리고 VPN을 실행 후, WPF Netty, C# Netty 등을 검색하다가, DotNetty라는 용어가 있다는 사실을 알게 되었다.


그리고 바로 DotNetty를 검색하여 Open Source라는 것을 알게 되었다.


그리고, DotNetty 개발 소스와 함께, 샘플 파일을 이용하여 이것저것 해보았고,

DotNetty에 포함되어 있던 샘플 소스를 이용하여, 테스트 겸 소스 분석을 해보았다. 물론, 소스 분석은 샘플에서 이용된 관계 쪽에서 깊이까지는 안 들어갔지만 말이다.


그러다가 찾게된 것이 있으니,, 보안과 관련된 인증서를 사용한다는 것을 알게 되었다.


그렇다. 그것이 바로 이 포스터의 주재로 선정한 SSL 인증서 발급에 대한 내용이다.


내가 SSL 인증서 발급을 직접 테스트를 해 보았고,

내가 참고했던 블로그들의 사이트 링크 역시 남길 예정이다.


사설이 길어졌고 이제 SSL 인증서 발급을 이미지와 함께 차례대로 따라하면,

누구나 SSL 인증서를 발급할 수 있게 될 것이다.


다만, 공인된 업체를 이용하는 부분이 더 신뢰를 얻을 수 있다는 것을 참고하자.

또한, SSL 인증서 발급 관련 내용을 찾다가, SSL 인증서에 대한 위험성을 적은 글도 있으니, 해당 사이트도 링크로 남겨놓을 예정이다.

====================================================


필자가 작성하는 포스터는 직접 캡쳐를 찍었으나, 일부 미미한 설명이 있을 수 있다. 그러니 이 포스터를 따라해도 안되는 경우, 출처에 있는 블로그로 가서 확인 해보자.


====================================================


Open SSL 프로그램을 이용하여 SSL 인증서를 발급하기.


1. Open SSL 프로그램을 다운로드 받는다.

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


위 사이트에 접속을 한다면 다음과 같은 화면이 나오고, 약 3초정도 있다가 다운로드가 시작이 된다. 만약 다운로드가 안된다면 Download를 찾아 클릭하자.


2. 다운로드가 완료되었다면, 압축파일[.zip]이 제대로 되어 있는지 확인 후 파일 압축을 풀도록 하자.


3. 위와 같이 압축이 모두 풀렸다면, OpenSSL 폴더를

   복사[ctrl + c] 또는 잘라내기[ctrl + v]를 한 뒤, 자신이 알 수 있는 경로에 풀도록 하자.

  【출처 블로그에는 C에 하라고 표기는 되어 있으나, 명령어 치는 창의 위치는 크게 변경되지 않는다.】



4. 위와 같이 경로에 붙였다면, OpenSSL > bin 폴더로 들어가자.


5. bin 폴더에 들어갔다면, 본인이 발급한 파일을을 한눈에 알아보기 쉽도록 새로운 폴더를 하나 생성하도록 하자.

【필자는 명령 프롬프트에서 입력하기 편하게 test 폴더로 생성했다.】


6. 하기 이미지를 참고하여 OpenSSL 실행파일 선택 후 마우스 우측 클릭, 관리자 권한으로 실행 시키자.


관리자 권한을 실행시키면 컴퓨터 설정에 따라 위 이미지와 같이 팝업이 노출 될 수 있다. 이 때, 예를 클릭 하도록 하자. 【단, OS 언어에 따라 달라진다.】


7. Open SSL이 실행이 된 것을 확인하자.

위 내용 중 [OpenSSL > ]의 문구가 있는 창이 노출이 되었다면, 정상적으로 실행이 된 것이다.


위 이미지 중 WARNING: can't open config file: C:/OpenSSL/openssl.cnf 라는 것이 보일 것인데 해당 문구는 무시해도 되나, 해당 파일이 필요할 때, 수동으로 추가할 수 있다.


참고로 해당 파일은 OpenSSL 실행 위치에도 존재한다.


[하기 내용부터는 필자가 찾아본 블로그 내용의 순서와 동일하게 작성될 것이다.

 다만, 필자는 더 상세하게 하기 위해 직접 테스트하면서 찍은 캡쳐 본으로 보여줄 것이다. ]

출처 : https://namjackson.tistory.com/24

> 개인키 및 공개키를 발급하자.


8. OpenSSL 실행 파일이 실행이 되면, 개인키 발급을 위한 명령어를 입력하도록 하자.


명령어 : genrsa -des3 -out [./경로/]파일명 bit수

genrsa -des3 -out ./test/private.pem 2048

Tip1. 출처 블로그에는 경로가 private.pem으로 입력이 되어 있다. 이런 경우, OpenSSL이 실행되고 있는 위치에 파일이 생성 되니 참고하자.

Tip2. 필자가 작성한 경로를 본다면 ./test라고 입력이 되어 있다.

여기서 [./] 가 의미하는 것은 현재 실행 중인 프로그램 위치에서 경로가 시작된다는 의미이다. 그 뒤에 test 폴더에 private.pem 이라는 파일을 생성하라는 의미이다.


9. 위 명령어를 입력하였다면, 엔터를 눌러 명령어를 실행하자.

명령어가 실행되면, 위와 같이 [Enter pass phrase for ./test/private.pem:] 이라는 문구가 노출이 될 것이다.


이 때, 본인이 기억할 수 있는 암호로 입력하자. 해당 암호는 잊어서는 안된다.

Tip. 암호 입력 시에 도스에 아무런 표기가 안된다. 참고하자.


10. 암호를 입력하였다면, 다시 암호를 묻는 문구가 노출이 된다. 이전에 입력한 암호를 또 입력 후 엔터를 눌러 완료 하자.

완료가 된다면 위와 같이 OpenSSL > 로 변경이 된다.

생성된 결과물을 확인하고 싶다면 OpenSSL을 실행한 폴더에서 본인이 입력한 경로로 따라 들어가 파일이 생성되었는지 확인하자.


11. 10번까지 완료되었다면, 패스워드가 없는 key 파일을 생성하자.

명령어 : genrsa -out [./경로/] 비트 수

genrsa -out ./test/private.key 2048

비트 수는 처음과 동일한 비트 수로 지정하자. 경로 역시 원하는 곳으로 지정 후 마지막 확장자는 key로 하자.


12. key 파일 생성 완료

위와 같이 표기가 되었다면 key 파일이 생성 완료가 되었다.


13. Key 파일까지 생성된 내역을 확인해 보자. 【필자 경로는 /Test 폴더 안에 있다.】


14. 공개키를 발급하자.

     【필자가 출처의 글을 읽다가 누락을 시킨 부분이다.】

     【현재 ssl인증서 발행 공개키는 중요하지 않다만, 있으니 학습할 겸 배워보자.】

명령어 : rsa -in [./경로/]개인키 -pubot -out [./경로/]키이름

rsa -in ./test/private.key -pubout -out ./test/public.key


15. 명령어 입력 후 엔터키를 눌러 실행하자.


> CSR 생성하기


16. CSR을 만들기 위한 명령어를 입력하자.

명령어 : req -new -key [./경로/]Key이름 -out [./경로/]파일명.csr

req -new -key ./test/private.key -out ./test/private.csr

위 명령어는 기본적으로 실행이 된다, 하지만 필자의 경우 현재 C:/OpenSSL/openssl.cnf 라는 것이 없어서 오류가 날 것이다.


17. 위 명령어를 그대로 실행 시 오류가 발생 될 수 있다. 다음 화면을 보자.

위 내용을 보면, [Unable to load config into from C:/OpenSSL/openssl.cnf] 라고 된다. 즉, cnf 파일이 없다라는 예기이다.


이런 경우 다음과 같이 실행하여 진행하자.


18. CNF 파일이 없는 경우, 수동으로 추가하여 CSR 파일 만들기

명령어 : req -new -key [./경로/]Key이름 -config [./]openssl.cnf -out [./경로/]CSR파일명


req -new -key ./test/private.key -config ./openssl.cnf -out ./test/private.csr


Tip1. 이전의 명령어와 이번의 명령어의 차이를 보면, -config 옵션이 포함이 되었냐 안되었냐의 차이가 있다. -config를 이용하여 cnf 파일을 수동으로 지정할 수 있다.


Tip2. -config에 파일 경로를 지정할 때 필자는 [./]를 입력하였다.

필자가 받은 소스와 동일한 곳이라면, open ssl 실행파일이 실행되는 위치에 존재하므로, [./]를 붙여 실행 중인 위치에서 cnf 파일을 찾으라고 알려주는 역할을 한다.


19. CSR 명령어 실행하기


명령어를 실행한다면, 위와 같이 정보를 입력하라고 노출이 된다.

테스트로 하는 중이니, 임의의 데이터를 입력하자.

또한, 위 이미지에는 1개로 나오나, 입력하면 다음 질문, 그 다음 질문으로 해서 노출이 되니, 참고하자.


20. 정보를 모두 입력하였다면 아래와 같이 [OpenSSL> ]이 노출이 된다.

필자는 패스워드를 입력하지 않았다. 해당 정보에 대한 설명은 필자도 더 찾아보고 추후에 다시 포스트 하도록 하겠다.


21. 다시 TEST 폴더로 들어가 CSR 파일이 정상적으로 생성이 되었는지 확인하자.


> CRT를 생성하자.

    ※ 필자는 출처 내용을 따라하며, 상세 캡쳐를 찍은 과정이므로, 출처 내용과 동일하게 진행된다. 참고하자.

22. 최상위 CRT를 생성하자. CRT 생성 명령어를 입력하자.

명령어 : genrsa 암호화 알고리즘 -out [./경로/]파일이름 비트수

genrsa -aes256 -out ./test/rootCA.key 2048

tip. 해당 과정의 경우, private를 이용하여 만들 CRT 파일에 대한 보증을 해줄 최상위의 CRT 파일이다. 참고하자. 상세 내용은 출처 블로그를 이용하자.


23. CRT 명령어를 실행하자.

위와 같이 사용할 암호를 입력하라고 뜬다.

암호를 입력하자.


24. 암호를 다시 입력 후 아래 이미지와 같이 [OpenSSL >]이 되었다면 성공적으로 발급이 된 것이다.


25. 최상위 CA키를 이용하여 CSR을 생성하기 위한 명령어를 입력 후 실행하자.

위 이미지는 처음에 발생된 오류와 동일한 사유로 인한 것이다.

명령어 : req -x509 -new -nodes -key [./경로/]key이름 -days 유효기간 -out [./경로/]pem파일명

req -x509 -new -nodes -key ./test/rootCA.key -days 365 -out ./test/rootCA.pem

tip1. 유효기간에 입력되는 단위는 [일] 기준이다.

tip2. 현재는 기본적으로 사용하는 명령어이며, 오류에 대한 부분은 다음 파트를 보자.


26. CSR 생성 시 config 파일 오류인 경우 다음과 같이 실행하자.

명령어 : req -x509 -new -nodes -key [./경로/]key이름 -days 유효기간 -config cnf파일경로 -out [./경로/]pem파일명

req -x509 -new -nodes -key ./test/rootCA.key -days 365 -config ./openssl.cnf -out ./test/rootCA.pem


명령어를 모두 실행을 완료하면, key 파일에 대한 암호를 물어본다.

그러면, rootCA.key 발행시 입력하였던 암호값을 입력하자.


27. 실행을 하면, 정보를 물어보기 시작한다.


28. 하기 이미지와 같이 정보를 모두 입력하자.


29. 최상위 CA를 이용하여, 초기에 만든 파일에서 CRT 파일을 만들자

명령어 : x509 -req -in [./경로/]csr파일명 -CA [./경로/]pem파일명 -CAkey [./경로/]CAKey명칭 -CAcreateserial -out [./경로/]crt 파일명 -days 유효기간

x509 -req -in ./test/private.csr -CA ./test/rootCA.pem -CAkey ./test/rootCA.key -CAcreateserial -out ./test/private.crt -days 365


30. 명령어를 입력하면, rootCA에 대한 암호를 물어본다. 암호 입력 후 발행을 완료하자.


31. 그러면 private에 대한 보안 인증서가 발행이 완료 되었다.


========> 여기까지는 SSL 발행의 기본인 것 같다.

다음에 나올 내용에 대한 부분은 각 프로그램에서 요구하는 내용에 맞도록 변환하는 과정이다.


위에서 나온 출처에서는 내용이 빈약한 부분이 있어, 해당 블로그에 대한 출처 남겨 놓는다.

출처 : https://www.securesign.kr/guides/SSL-Certificate-Convert-Format


> 확장자 PFX 파일을 만들어 보자.


32. pfx를 만들기 위한 명령어를 입력하자.

명령어 : pkcs12 -export -in [./경로/]crt파일명 -inkey [./경로/]key파일명 -out [./경로/]pfx파일명

pkcs12 -export -in ./test/private.crt -inkey ./test/private.key -out ./test/private.pfx

Tip1. PFX를 만들 때, 항상 CRT 파일과, CRT를 만들 때 사용한 Key 파일을 이용하여야 한다. 그러므로, 위 과정에서 생성된 파일은 잊지 않도록 하자.


33. pfx 명령어 실행 후 pfx 파일에 대한 암호를 묻는다. 암호를 모두 입력 후 발행을 완료하자.


34. 발행이 완료되었다면, 해당 폴더에 가서 개인 정보 교환 파일을 찾아보자.


35. 개인 정보 파일을 실행을 하면, 하기 이미지와 같이 노출이 된다.


위 이미지가 노출이 되면 PFX 파일은 정상적으로 만들어진 것이라고 봐도 된다.


여기까지 SSL 인증서를 발행하는 방법에 대하여 알아봤습니다.


각 출처에 대한 정보를 다시 한번 나열해 드리도록 하겠습니다.

SSL 인증서 발행 기본 순서 : https://namjackson.tistory.com/24


SSL 인증서 파일 확장사 변환 :

https://www.securesign.kr/guides/SSL-Certificate-Convert-Format


출처에 대한 부분은 잘 남겨놓고 잘 보이게 하기 위해 굵게 적용하였다. 참고하자.


====================================================


네이버 블로그 : https://dlrmf3390.blog.me


'STUDY & Sharing Information > NetWork' 카테고리의 다른 글

컴퓨터(노트북)을 활용한 VPN 공유!  (0) 2018.10.05