소프트웨어 환경에 보안 대책이 꾸준히 대두 됨에따라 깊이 있는 방식으로 디지털 인증서를 처리해야 할 확률이 시간이 지날수록 증가 하고 있습니다. 게다가, 플랫폼은 인증서의 사용을 요구 할 뿐만 아니라, 커다란 확장성을 가진 자체 서명 된 다양성을 피하고 신뢰성 있는 기관에서 발급 한 인증서를 고집하게 되었습니다.
이 인증서들을 관리 할 때 가장 많이 사용 할 가능성이 있는 Java 세계의 유틸리티가 바로 Java Development Kit의 필수 요소 인 keytool입니다.
keytool은 자체 서명 된 개인 / 공개 키 쌍을 생성하는 데 효과적으로 사용될 수 있지만, 신뢰할 수 있는 기관에서 생성 한 인증서들을 통합 하는 것에 대한 내용은 약간 부족합니다. [이 기사의 원래 게시 이후에 받은 피드백과 권고 사항을 바탕으로, 아래에 설명 된 원본에 대한 대안 솔루션을 설명하는 후기 섹션이 추가되었습니다.]
특히 이 툴에 대한 다음 두 가지 단점을 극복하는 데 초점을 맞추었습니다:
1. 신뢰할 수있는 인증 기관 (CA)에서 생성 한 기존 개인 키와 인증서는 적어도 CA에서 전통적으로 제공 한 형식이 아니면, keytool에서 가져올 수 없습니다.
2. 고유 한 개인 키를 키 저장소로 가져와야 할뿐만 아니라 루트 CA 인증서와 모든 중간 인증서 (인증서 체인이라고 함)를 포함해야 하며, 더 중요한 것은 올바른 순서로 포함 해야 합니다. 하지만 keytool 유틸리티는 유효한 순서를 보장하는 데 별로 도움이 되지 않습니다.
다음 예제는 실제 인증 기관의 실제 SSL 인증서 체인을 사용하며, Java Advanced Management Console 2.1 응용 프로그램의 컨텍스트에서 수행되었습니다.
Java AMC는 Java EE 응용 프로그램이므로 Oracle의 WebLogic 응용 프로그램 서버가 작동해야 합니다.
이 예에서는 WebLogic과 관련된 키 스토어를 업데이트 할 예정이지만 다른 곳에서도 이 단계와 똑같이 적용되어야하므로, 실 세계에서도 이 Java 키 저장소는 여타 다른 Java 키 스토어와 다르지 않습니다.
우리는 독자를 위한 예제로써 신뢰할 수 있는 인증서 신청의 세부 사항을 남겨 둘 것입니다. 인증서를 얻는 첫 번째 단계 중 하나는 CSR (Certificate Signing Request)을 작성하여 인증 기관에 제출하는 것입니다.
이 프로세스의 부산물은 CSR의 정보를 기반으로 개인 키 파일이 생성된다는 것입니다. 이 파일을 열면 다음과 같이 보입니다.
-----BEGIN PRIVATE KEY-----
encryptedgobbledygook line 1
...
encryptedgobbledygook line n
-----END PRIVATE KEY-----
이 개인 키 파일은 PEM (Privacy Enhanced Mail) 형식이며 .pem 접미사를 사용합니다. 예를 들면, 파일은 다음과 같은 형식에 저장됩니다:
▶ private-key.pem
이 기사에서는 인증 기관으로 Comodo (많은 대안 중 하나)를 사용했습니다. Comodo의 전체 프로세스가 완료되면 결과적으로 다음과 같은 증명서들을 보내주게 됩니다:
· amc-server_jtconnors_com.crt - amc-server.jtconnors.com의 FQDN (정규화 된 도메인 이름)을 사용하는 컴퓨터에 대한 Comodo에서 생성 한 호스트 별 SSL 인증서입니다.
· AddTrustExternalCARoot.crt - Comodo 루트 인증서
· COMODORSAAddTrustCA.crt - Comodo Intermediate Certificate 1
· COMODORSADomainValidationSecureServerCA.crt - Comodo Intermediate Certificate 2
이 파일을 사용하면 우리는 가져 오기 프로세스를 시작할 수 있습니다.
Java 6 릴리스 keytool에 추가 된 향상된 기능을 활용 할 것입니다.
즉, 이 기능은 PKCS12 인데, keytool은 이 형식으로 키 스토어를 병합하여 가져오기를 할 수 있습니다.
이 새로운 정보를 통해 우리의 어떻게 개인 키와 인증서 체인을 PKCS12 파일로 변환할 수 있을 지 파악하는 것만 남았습니다. 이 기능을 위해 거의 모든 대중적인 컴퓨팅 플랫폼에서 사용할 수 있는 유비쿼터스 OpenSSL 툴킷의 기능을 사용합니다. 다음 예제에서는 Windows 시스템에서 실행하고 Cygwin 환경을 사용하여 필요한 OpenSSL 명령을 실행합니다.
1 단계. (Cygwin에서) CA가 제공 한 루트 인증서 체인을 구성하는 인증서를 하나의 파일에 연결합니다. 루트 인증서와 중간 인증서 만 포함하고 호스트 별 SSL 인증서는 제외하십시오.
$ cat AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > BUNDLE.crt
2 단계. (Cygwin에서) PKCS12 키 저장소를 만듭니다. 이 명령은 인증서 체인과 SSL 개인 키 및 인증서를 모두 포함합니다. 암호가 다를 수 있습니다.
※Error unable to get issuer certificate getting chain.
에러 관련해서 나의 경우에는 msys2 쉘을 사용 하는 데 msys2 환경에서 하지 않고, mingw32 환경에서 openssl을 구동 하는 바람에 오류가 난 것이었고, crt 파일을 합칠 때, 개행 문자를 넣어 주었음.
$ openssl pkcs12 -export -chain -in amc-server_jtconnors_com.crt -inkey private-key.pem -out keystore.p12 -name amc-server -CAfile BUNDLE.crt
Enter Export Password: changeit
Verifying - Enter Export Password: changeit
3 단계. (Windows CMD에서) keytool을 사용하여 keystore.jks라는 결과 JKS 키 저장소에 PKCS12 키 저장소를 가져옵니다. 다시 한 번, 다른 암호를 넣어야 합니다.
"c:\Program Files\Java\jdk1.8.0_66\bin\keytool.exe" -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -alias amc-server
Enter destination keystore password: changeit
Re-enter new password: changeit
Enter source keystore password: changeit
4 단계. 키 스토어가 성공적으로 작성된 후 추가 검증 단계 (선택 사항)를 수행 할 수 있습니다. 예를 들어 Oracle WebLogic과 같은 특정 Java 기반 응용 프로그램 프레임 워크는 인증서 체인의 완전성과 순서에 대해 까다로울 수 있습니다.
키 스토어의 유효성을 확인하기 위해 WebLogic 12c에 번들로 제공되는 ValidateCertChain 프로그램을 사용할 수 있으며 배포판의 weblogic.jar 파일에서 찾을 수 있습니다.
최근 작성된 keystore.jks 파일에서 프로그램을 호출하는 예제는 다음과 같습니다 :
java -cp %MW_HOME%\wlserver\server\lib\weblogic.jar utils.ValidateCertChain -jks amc-server keystore.jks
Cert[0]: CN=amc-server.jtconnors.com,OU=PositiveSSL,OU=Domain Control Validated
Cert[1]: CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB
Cert[2]: CN=COMODO RSA Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB
Cert[3]: CN=AddTrust External CA Root,OU=AddTrust External TTP Network,O=AddTrust AB,C=SE
Certificate chain appears valid
이 예들이 여러분의 시간을 절약해주고, 더 중요하게는 약간의 수고를 덜어주기를 바라겠습니다.
덧붙이는 글
AMC와 WebLogic에 대해 더 정통한 엔지니어들이 권고한 사항을 가지고, 이번 섹션이 추가하여 위에서 언급 한 OpenSSL 솔루션에 대한 대안을 간략히 설명합니다.
대안 A : 인증서 생성 프로세스를 완벽하게 제어하는 사람들은 이전에 암시 된 것처럼 이 프로세스에 keytool만을 사용할 수 있습니다.
프로세스의 첫번째에서, 다음의 일반적인 방법 (keytool의 인수가 변화)으로 keytool를 사용해, keypair 와 증명서 요청를 생성 할 수 있습니다.
keytool -keystore keystore.jks -genkeypair -keyalg rsa
keytool -keystore keystore.jks -certreq
이 시나리오에서는 키 쌍이 이미 키 저장소에 저장되어 있기 때문에 OpenSSL이 필요하지 않습니다. 여기에서 다음과 비슷한 형식을 사용해서 인증서를 가져올 수 있습니다.
keytool -import -keystore keystore.jks -alias root -file AddTrustExternalCARoot.crt
keytool -import -keystore keystore.jks -alias intermediate1 -file COMODORSAAddTrustCA.crt
keytool -import -keystore keystore.jks -alias intermediate2 -file COMODORSADomainValidationSecureServerCA.crt
keytool -import -keystore keystore.jks -alias mykey -file amc-server_jtconnors_com.crt
마지막 명령에서 "-alias mykey"는 필수적이며 키스토어에서 키 쌍과 일치해야합니다. 간단히 말해, PEM으로 인코딩 된 모든 인증서를 큰 파일로 친 다음 호출 할 수도 있습니다.
keytool -import -keystore keystore.jks -alias mykey -file thebigfile
대안 B : ValidateChain 프로그램과 함께 WebLogic 12c의 weblogic.jar 파일에는 인증서 체인을 Java 키 저장소로 가져 오는 데 사용할 수도있는 ImportPrivateKey라는 유틸리티가 포함되어 있습니다.
이 유틸리티 명령은 다음과 같습니다.
Configuring Keystores 상 문서 중 Creatinga Keystore Using ImportPrivateKey 하위 섹션에 설명되어 있습니다.
키 스토어 구성에 대한 설명 명령은 다음과 같은 형식을 따릅니다.
java -cp %WL_HOME%\server\lib\weblogic.jar utils.ImportPrivateKey -keystore newkeystore -storepass **keystorepassword** -alias amctrust -certfile certificate.pem -keyfile privatekey.pem [-keyfilepass **privatekeypassword**]
이상.
'이것저것' 카테고리의 다른 글
가상머신 기반의 하이퍼바이저와 컨테이너 기반의 도커 개념과 두 기술 간의 차이점 (0) | 2023.01.09 |
---|---|
버추얼박스에 요세미티 설치하기 (0) | 2023.01.08 |
OpenSSL로 원격 인증서 체인 검증하기 (0) | 2023.01.05 |
[JMeter] 파일을 이용한 서버 성능 측정 사용 (1) | 2023.01.03 |
Windows에서 ASP.NET 임시 파일을 지우는 방법 (0) | 2022.12.23 |