【Azure 環境】把OpenSSL生產的自簽名證書匯入到Azure Key Vault Certificate中報錯

2022-11-05 12:00:08

問題描述

通過本地生成的自簽名證書匯入到Azure Key Vault Certificate報錯。

錯誤資訊

the specified PEM X.509 certificate content can not be read. Please check if certificate is in valid PEM format. Accepted formats: PEM content or Base64 encoded PEM content.

或是

Private key is not specified in the specified X.509 PEM certificate content. Please specify private key in the X.509 PEM certificate content.

錯誤截圖

 

問題解答

在錯誤描述中,指出了上傳的PEM證書內容錯誤,根據官方檔案介紹,PEM所支援的格式為

-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

說明一:

匯入證書時,需要確保金鑰包含在檔案中。 如果你以另一種格式單獨儲存私鑰,則需將該私鑰與證書組合在一起。 某些證書頒發機構 (CA) 提供其他格式的證書。 因此,在匯入證書之前,請確保該證書為 PEM 或 PFX 檔案格式,並且金鑰使用 Rivest-Shamir-Adleman (RSA) 或橢圓曲線加密 (ECC) 方式的加密。

說明二:

Azure Key Vault 支援 .pem 和 .pfx 證書檔案(用於將證書匯入到 Key Vault 中)。 對於 PEM 檔案格式,我們支援以下匯入型別。 單個 PEM 編碼的證書,以及一個包含以下內容的 PKCS#8 編碼和解密的金鑰

-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

匯入證書時,需要確保該金鑰包含在檔案本身中。 如果讓私鑰單獨採用另一格式,則需將私鑰與證書組合在一起。 某些證書頒發機構提供不同格式的證書,因此在匯入證書之前,請確保證書採用 .pem 或 .pfx 格式。

 

根據提示,在檢查匯入證書的內容中發現編碼格式不一致。一開始使用的Private Key格式為 「 -----BEGIN RSA PRIVATE KEY----- 」 ,而不是滿足要求的「 -----BEGIN PRIVATE KEY----- 」。所以需要對Private Key的檔案進行格式轉換。

 

第一步:轉換Private Key的格式為

openssl pkcs8 -topk8 -inform PEM -in testpkcs1.pem -passin pass:Password@123 -outform pem -nocrypt -out pkcs8.pem

 

第二步:根據Private Key生成Public Key證書

openssl req -new -x509 -key pkcs8.pem -out certpk8.pem -passin pass:Password@123 -days 3650

 

第三步:根據Key Vault的要求,合併Public Key 和Private Key 

//Linux
cat certpk8.pem pkcs8.pem > importpk8.pem
//Windwos type certpk8.pem pkcs8.pem > importpk8.pem

最後,在Azure Key Vault中匯入 importpk8.pem 證書,並輸入正確的密碼。匯入自定義證書成功。

 

 

附錄一:附上OpenSSL生成 .pfx 證書的指令, 生成的 Local.pfx 可以直接匯入Key Vault中

openssl.exe req -x509 -nodes -sha256 -days 3650 -subj "/CN=Local" -newkey rsa:2048 -keyout Local.key -out Local.crt

openssl.exe pkcs12 -export -in Local.crt -inkey Local.key -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -out Local.pfx

 

附錄二:PEM 和 PFX 證書內容的對比

Key Vault Certificate要求上傳PEM的格式為:

-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

 

參考資料

Azure Key Vault 支援的匯入格式https://docs.azure.cn/zh-cn/key-vault/certificates/certificate-scenarios

How can I resolve a "Bad parameter" error? What are the supported certificate formats for importing to Key Vault? https://docs.azure.cn/zh-cn/key-vault/certificates/faq#----------------------------key-vault-