본문 바로가기

컴퓨터공학/보안

[인증서] CodeSign 인증서 생성하기

* CodeSign 이란?

: 추가기능(ActiveX, JAVA Applet 등)을 사용자 컴퓨터에 설치하려고 할 때, 설치하려는 프로그램이 신뢰할 수 있고 안전하다는 사실을 공인된 인증기관으로부터 입증받은 디지털 서명

 

인증서를 새롭게 생성하게 된 이유: 회사에서 보안 서비스에 대한 CC(Common Criteria) 인증을 받으려고 하는데 기업 표기명이 심사 기준과 상이해 수정된 새로운 이름으로 인증서를 발급해야하는 상황

 

목차

1. CA 인증서로 서명된 인증서 발급

2. 인증서 path 확인

3. test 변수에 인증서 저장

4. signer $test 로 인증서 서명

5. 인증서 추출

6. 개인키 추출

7. 개인키 패스워드 제거

8. public key 추출

* #1~4까지는 PowerShell을, #5~8은 openssl을 사용했다.


PowerShell

1. CA 인증서로 서명된 인증서 발급

New-SelfSignedCertificate -CertStoreLocation "Cert:\CurrentUser\My" 
-Type Custom -TextExtension @("2.5.29.19={critical}{text}ca=TRUE") 
-Subject "CN=ClientROOT,OU=IT Team,O=기업명,L=지역구,S=Seoul,C=KR" 
-FriendlyName "www.도메인주소.com" -KeyUsage CertSign,DigitalSignature,KeyEncipherment 
-KeyAlgorithm RSA -KeyLength 2048 -NotAfter (Get-Date).AddDays(364)

주의) 기업명에 comma 가 들어가는 경우, 기존의 구분자였던 comma 대신 세미콜론(;)으로 표기해준다.

결과>

 

 

2. 인증서 path 확인

get-childitem -path "cert:\currentuser\my"

결과> 위와 같음

 

 

3. test 변수에 인증서 저장

$test = (get-childitem -path cert:\currentuser\my\$Thumbprint)

 

4. signer $test 로 인증서 서명

New-SelfSignedCertificate -CertStoreLocation "Cert:\CurrentUser\My" 
-Type Custom -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.3") 
-Subject "CN=기업명,OU=IT Team,O=기업명,L=지역구,S=Seoul,C=KR" 
-FriendlyName "www.도메인주소.com" -KeyUsage DigitalSignature 
-KeyAlgorithm RSA -KeyLength 2048 -NotAfter (Get-Date).AddDays(364) -Signer $test

 

결과>

 

 

OpenSSL

openSSL 사용을 위해서는 openSSL을 다운로드 해야한다.

 

 

5. 인증서 추출 (pfx -> crt)

openssl pkcs12 -in 인증서파일명.pfx 
-clcerts -nokeys -out 인증서파일명.crt --password pass:패스워드

 

6. 개인키 추출

openssl pkcs12 -in 인증서파일명.pfx 
-nocerts -nodes -out codesign_pri.pem --password pass:패스워드

 

7. 개인키 패스워드 제거

openssl rsa -in codesign_pri.pem -out codesign_pri2.pem
openssl rsa -in codesign_pri.pem -out codesign_pri2.pem
openssl rsa  -inform PEM -in codesign_pri2.pem -outform DER -out codesign_pkcs1.der

 

8. public key 추출

openssl x509 -pubkey -noout -in 인증서파일명.crt  > codesign_pub.pem
openssl rsa  -inform PEM -pubin -in codesign_pub.pem -outform DER -out codesign_pub.der

 

 

사용자 인증서 관리> 목록에 있는 인증서 우클릭 > 내보내기

>> "가능한 경우 인증 경로에 있는 인증서(ex: ClientROOT) 모두 포함해서 내보내기"를 하면 이후 이후 설치 파일에 인증서를 생성할 때 multi certificates 오류가 발생하므로 선택 해제

 

>> 이후 저장시 지정한 경로로 가면 pfx, crt, pem, der 의 확장자를 가진 인증서 및 키들이 만들어져 있는 것을 볼 수 있다.

 

 

 

 

더보기

느낀점)

개발을 함에 있어 보안 이슈는 워낙 중요한 것이니 보안 관련 서비스를 개발하는 것이 아니라 해도 잘 아는 것이 맞겠지만,

곁가지로 접하게 되는 업무에도 처음 접하는 내용이 많기 때문에 (ex. 인증서, 개인키, 공개키 등등) 특히나 보안 및 인증에 대한 공부가 더욱 필요하다는 생각이 들었다.

더보기

'컴퓨터공학 > 보안' 카테고리의 다른 글

암호화(encrytion) & 복호화(decryption)  (0) 2023.03.16