* 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. 인증서, 개인키, 공개키 등등) 특히나 보안 및 인증에 대한 공부가 더욱 필요하다는 생각이 들었다.
참고)
New-SelfSignedCertificate (pki)
Use this topic to help manage Windows and Windows Server technologies with Windows PowerShell.
learn.microsoft.com
https://jjig810906.tistory.com/81
OpenSSL을 이용하여 pfx에서 private key와 crt 추출
윈도우용 SSL 인증서를 cer파일, pfx파일로 관리하나, 리눅스에서는 crt, private key로 SSL 통신을 위한 인증서 세팅을 할 수 있다. IIS에서 pfx파일로 인증서 내보내기 한 뒤 pfx파일을 이용하여 private key
jjig810906.tistory.com
'컴퓨터공학 > 보안' 카테고리의 다른 글
암호화(encrytion) & 복호화(decryption) (0) | 2023.03.16 |
---|