[OpenSSL] 개인 키 PEM과 기본적인 X509 인증서 PEM 파일 생성

소스코드(Windows & Linux 지원)
ssl_pem

 

코드 설명

main 함수

  • Init_SSL() : OpenSSL API에서 사용되는 알고리즘과 문자열 등을 로드
  • Create_pkey() : 개인키 생성을 위해 EVP_PKEY 반환
  • X509_new() : API, X509 format 정보를 담는 X509 반환
  • Config_X509() : X509 format에 대한 정보 저장
  • Create_prkey_File() & Create_X509_Cert_File() : PEM 파일 생성
  • EVP_PKEY_free() & X509_free() : API, 사용한 구조체 포인터의 메모리 정리

 

Init_SSL 함수

  • OpenSSL_add_all_algorithms() : API, OpenSSL의 API를 위한 모든 알고리즘 로드
  • ERR_load_CRYPTO_strings() : API, Crypto API를 위한 에러 관련 문자열 로드

 

Create_pkey 함수

  1. 29번째 줄 : 키 쌍과 사용된 알고리즘을 저장할 EVP_PKEY 생성
  2. 33번째 줄 : RSA 키 쌍 생성, 다른 공개키 함수를 사용해도 된다.
  3. 37번째 줄 : RSA의 키 쌍을 EVP_PKEY에 세팅, 알고리즘은 자동 세팅된다.
  4. 40번째 줄 : 키 쌍과 알고리즘이 저장된 EVP_PKEY 반환

 

Config_X509 함수

  • X509 format에 맞춰 세팅해주면 된다.
  • 해당 소스코드에서는 버전, 일련번호, 발행기관, 유효기간, 공개키, 서명 만을 세팅한다.

  • 65번째 줄 : X509_set_version을 통해 version을 세팅한다. 2번째 인자가 버전이다.
  • 68번째 줄 : ASN1_INTEGER_set을 통해 일련 번호를 세팅한다. X509_get_serialNumber를 호출하면 X509 내부의 ASN1_INTEGER 주소가 반환되는데, 여기에 2번째 인자를 세팅함으로써 일련 번호가 세팅된다.

  • 73번째 줄 : Issuer를 세팅하기 위한 X509_NAME 반환
  • 74~80번째 줄 : text로 “C(Country)”, “O(Organization)”, “CN(Common Name)”에 대한 entry를 추가
  • 84번째 줄 : X509_NAME의 값을 X509에 세팅

   

  • 88번째 줄 : 유효 기간 설정을 위한 기준점 세팅
  • 89번째 줄 : 유효 기간 설정(초 단위)

  • 96번째 줄 : 서명을 위한 Hash 알고리즘 결정
  • 100번째 줄 : 개인 키와 Hash 알고리즘을 사용하여 서명하고 세팅
  • 103번째 줄 : 필요한 정보가 설정된 X509를 반환

 

Create_prkey_File 함수

  • 137번째 줄 : 키 쌍을 저장하고 있는 EVP_PKEY를 인자로 받음
  • 147번째 줄 : 고수준 파일 입출력을 위한 포인터와 개인키를 안전하게 보관하기 위해 사용하는 암호 알고리즘, passphrase를 함께 사용해 PEM 파일 생성

 

Create_X509_Cert_File 함수

 

  • 159번째 줄 : 인증서 정보를 저장하고 있는 X509를 인자로 받음
  • 169번째 줄 : X509를 사용하여 PEM 파일 생성, 필수 정보가 제대로 세팅되어 있다면 무사히 생성

 

이렇게 만들어진 PEM 파일은 SSL 소켓 통신을 위한 SSL handshake에서 사용된다.
지금의 코드로는 기본적인 정보만을 세팅하여 만든 셀프 인증서이다. 

Attachments

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다