如何使用密钥管理库导入 PEM 格式的证书

chaobits 2017-08-30 02:40:53
通过 Azure 密钥保管库,Azure 用户能够保护和控制云应用程序和服务使用的加密密钥和其他机密。密钥保管库在设计上确保了微软无法看到或提取用户的密钥,通过加密密钥存储在云中,能提高云应用程序的性能并减少延迟。

问题描述
我们在使用密钥管理库上传证书时,根据不同的情况需要上传不同格式的证书,例如 PFX、PEM 等等。有时用户开发应用在调用密钥管理时,上传 PEM 格式证书时,会返回错误:PEM is unexpected format,因此无法成功导入 PEM 格式的证书。

问题分析
我们以 .net 应用开发为例,可以通过调用方法
ImportCertificateAsync(IKeyVaultClient, String, String, String, String, CertificatePolicy, CertificateAttributes, IDictionary<String,String>, CancellationToken)

来导入 PEM 格式的证书,更多的说明可以参考官方链接。 但是当我们调用上述方法上传 PEM 格式证书时会有一些特殊的要求(需要注意的是,这些要求同样适用于使用 CLI 以及各种其他语言的 SDK)。

具体的要求如下:

在创建/导入 PEM 格式证书时,CertificatePolicy 中 secret 的 ContentType 的值需要设定为 application/x-pem-file ;如果是 PFX 的话,ContentType 的值为 CertificateContentType.Pfx。
PEM 可以通过下面的格式定义 CertificatePolicy:
var policy = new CertificatePolicy
{
KeyProperties = new KeyProperties
{
Exportable = true,
KeyType = "RSA"
},
SecretProperties = new SecretProperties
{
ContentType = "application/x-pem-file" // PEM certificate
//ContentType = CertificateContentType.Pfx // PFX certificate
}
};


需要导入的 PEM 格式的证书需要是下面格式之一,这意味着:

-传递给 ImportCertificateAsync 的参数也要包括 “-----” 等特殊字符。
-同时也要保证传递过来的字符串包含换行符从而保证是下面要求的格式。
-导入的证书最少是一个,最多整个字符串长度不可超过 25K。
-关于密钥管理库可以接受的 PEM 格式文件的说明,可以参考链接。
Pem with unencrypted pkcs#8 Key

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

-----BEGIN CERTIFICATE-----
……….
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
……….
-----END CERTIFICATE-----


Pem with encrypted pkcs#8 Key

-----BEGIN ENCRYPTED PRIVATE KEY-----
…………………
-----END ENCRYPTED PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
……….
-----END CERTIFICATE-----

.net 中的参数定义如下:

base64X509 = "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkZlh01m5vpwFvFaffSHzcJRl8mZtLpo4K4p8Hed+QH/………LyVcynibPKezupYJ1wg\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDNDCCAhygAwIBAgIQBdSVCj/ TnN09N6jDqgmOtpUUhWwrn5………7quTVwcUEAjwrPDx3s=\n-----END CERTIFICATE-----";


最后,关于导入 PEM 证书,您可以通过链接下载 demo 程序,您需要替换 App.config 中的参数为您自己的密钥管理的值。这方面的信息,我们即将在官方链接中更新,请您关注我们的网站,了解更多详细的信息。
...全文
1311 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
a434477958 2019-08-03
  • 打赏
  • 举报
回复
私钥的开始符是这样的:-----BEGIN RSA PRIVATE KEY-----
微信开发使用的cert,里面微信支付API共四份(证书pkcs12格式证书pem格式证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。 证书属于敏感信息,请妥善保管不要泄露和被他人复制。 不同开发语言下的证书格式不同,以下为说明指引: 证书pkcs12格式(apiclient_cert.p12) 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 部分安全性要求较高的API需要使用证书来确认您的调用身份 windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000) 证书pem格式(apiclient_cert.pem) 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem 证书密钥pem格式(apiclient_key.pem) 从apiclient_cert.p12中导出密钥部分的文件,为pem格式 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem CA证书(rootca.pem) 微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性 该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性 某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用

4,453

社区成员

发帖
与我相关
我的任务
社区描述
云计算 云安全相关讨论
社区管理员
  • 云安全社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧