이 가이드에서는 PKCS#11 및 Jsign을 통해 서명하는 Microsoft Authenicode의 Cloud HSM 키를 만드는 방법을 설명합니다.
사용 사례
이 문서에 설명된 워크플로는 다음 기업 보안 요구사항을 해결하는 데 도움이 됩니다.
- FIPS140-2 Level 3 HSM으로 보호되는 비공개 키로 펌웨어에 서명합니다.
- 서명 도구를 사용하지 않고 Windows 아티팩트에 서명합니다.
시작하기 전에
이 튜토리얼을 완료하려면 다음이 필요합니다.
- 서명할 아티팩트가 있는 Windows 머신이 필요합니다. 이 머신에 Java가 설치되어 있는지 확인합니다.
인증서 서명 요청 또는 인증서를 생성할 Cloud Shell 또는 자체 Linux 머신이 필요합니다. 이 머신에서 OpenSSL 설정에 설명된 구성을 완료합니다.
아직 실행하지 않았다면 gcloud auth application-default login
을 실행해야 합니다.
Windows 머신에서 다음 powershell 명령어를 사용하여 최신 Jsign 버전 JAR 파일을 다운로드합니다.
wget https://github.com/ebourg/jsign/releases/download/JSIGN.VERSION/jsign-JSIGN.VERSION.jar -O jsign.jar
구성
Cloud KMS 호스팅 서명 키 만들기
Cloud Shell 또는 자체 머신을 사용하여 다음 명령어를 통 Google Cloud 프로젝트에 Cloud KMS 키링을 만듭니다.
gcloud kms keyrings create "KEY_RING" --location "LOCATION"
그런 다음 방금 만든 키링에 Google Cloud 프로젝트의 Cloud KMS EC-P256-SHA256
하드웨어 서명 키를 만듭니다.
gcloud kms keys create "KEY_NAME" --keyring "KEY_RING" \
--project "PROJECT_ID" --location "LOCATION" \
--purpose "asymmetric-signing" --default-algorithm "ec-sign-p256-sha256" \
--protection-level "hsm"
HSM 증명 다운로드
HSM 증명은 키가 HSM에 있음을 입증합니다. 인증 기관(CA)에서 EV(Extended Validation) 인증서를 발급할 때 이 증거가 필요할 수 있습니다.
Cloud KMS 키와 연결된 HSM 증명을 다운로드하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
증명하려는 키가 포함된 키링을 선택한 다음 키를 선택합니다.
증명할 키 버전의 더보기 more_vert를 클릭한 다음 증명 확인을 클릭합니다.
증명 확인 대화상자에서 증명 번들 다운로드를 클릭합니다. 이렇게 하면 증명 및 인증서 체인이 포함된 ZIP 파일이 다운로드됩니다.
다운로드한 증명을 확인하는 방법에 대한 자세한 안내는 증명 파싱을 참조하세요.
OpenSSL로 자체 서명 인증서 만들기
이 단계는 선택사항이지만 인증 기관에서 서명한 인증서를 구매하기 위한 프로세스를 진행하고 관련 비용을 지불하기 전에 후속 단계를 숙지하는 데 도움이 됩니다.
Cloud Shell 또는 자체 머신을 사용하여 Cloud KMS 호스팅 서명 키로 자체 서명 인증서를 생성합니다. OpenSSL을 사용하여 파일 경로 대신 PKCS #11 URI를 사용하고 해당 라벨로 키를 식별할 수 있습니다. Cloud KMS PKCS #11 라이브러리에서 키 라벨은 CryptoKey 이름과 동일합니다.
openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
-keyform engine -key pkcs11:object=KEY_NAME > ca.cert
이 명령어가 실패하면 PKCS11_MODULE_PATH
가 잘못 설정되었거나 Cloud KMS 서명 키를 사용할 수 있는 올바른 권한이 없을 수 있습니다.
이제 다음과 같은 인증서가 준비되었습니다.
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Jsign과 함께 사용하여 아티팩트에 서명할 수 있도록 인증서를 Windows 머신에 복사합니다.
새 인증서 서명 요청 만들기
Cloud HSM 서명 키에 대한 인증서 서명 요청(CSR)을 생성할 수 있습니다. 인증 기관에서 코드 서명에 사용할 새 인증서를 생성하기 위해 CSR이 필요한 경우 다음 단계를 완료합니다.
Cloud Shell 또는 자체 머신을 사용하여 다음 명령어를 실행합니다.
openssl req -new -subj '/CN=CERTIFICATE_NAME/' DIGEST_FLAG \
-engine pkcs11 -keyform engine \
-key pkcs11:id=KEY_ID > REQUEST_NAME.csr
다음을 바꿉니다.
CERTIFICATE_NAME
: 생성할 인증서의 이름입니다.DIGEST_FLAG
: 다이제스트 유형을 나타내는 플래그입니다. 키 알고리즘에 따라-sha256
,-sha384
또는-sha512
를 사용합니다.KEY_ID
: 비대칭 서명 키 버전의 정규화된 리소스 ID입니다(예:projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
).REQUEST_NAME
: 인증서 서명 요청의 이름입니다.
사용 중인 키 유형에 맞는 -sigopt
옵션을 사용해야 합니다.
이제 CSR이 있으므로 인증 기관(CA)에 제공하여 서명 인증서를 가져올 수 있습니다. 다음 섹션에서 CA에서 제공된 인증서를 사용합니다.
Jsign으로 아티팩트 서명
자체 서명되었거나 인증 기관에서 가져온 인증서를 성공적으로 만들고 Windows 머신에 복사했으므로 이를 사용하여 Windows 아티팩트에 서명할 수 있습니다.
지원되는 파일 형식 목록을 보려면 jsign --help
명령어를 실행합니다.
Jsign을 사용하여 Cloud KMS 키와 인증서를 사용해 아티팩트에 서명합니다.
java -jar PATH_TO_JSIGN.JAR --storetype GOOGLECLOUD \
--storepass $(gcloud auth application-default print-access-token) \
--keystore projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING \
--alias KEY_NAME \
--certfile PATH_TO_CA.CERT
PATH_TO_ARTIFACT_TO_SIGN
다음을 바꿉니다.
PATH_TO_JSIGN.JAR
:jsign.jar
의 경로입니다.PATH_TO_CA.CERT
: 인증서ca.cert
의 경로입니다.PATH_TO_ARTIFACT_TO_SIGN
: 서명하려는 아티팩트의 경로입니다.
각 명령어 옵션에 대한 자세한 설명은 공식 Jsign 문서를 참조하세요.