PublishToAzureServiceBus签名消息报JsonWebTokens加密提供程序错误
问题根因
这个错误确实是证书关联的加密提供程序不兼容导致的。
报错中提到的「crypto provider of type 1」对应Windows旧版Crypto API(CAPI)体系下的PROV_RSA_FULL类型提供程序。PublishToAzureServiceBus@1任务内部做JWT签名时依赖System.IdentityModel.Tokens.Jwt库,这个库仅支持基于新一代加密API(CNG,Cryptography Next Generation)的密钥提供程序,无法识别旧CAPI体系的CSP,因此抛出该错误。
修复方法
你需要使用CNG兼容的加密提供程序生成/申请证书,通用兼容性最好的选项是Microsoft Software Key Storage Provider,也就是Windows系统默认的CNG软件密钥存储提供程序。
避坑说明
- 以下旧版CAPI体系的加密提供程序生成的证书都会触发该报错,不要使用:
- Microsoft Base Cryptographic Provider v1.0
- Microsoft Enhanced RSA and AES Cryptographic Provider
- 其他属于PROV_RSA系列的传统CSP
- 自签名证书测试场景下,创建时不要勾选「兼容旧版加密服务提供程序/Legacy CSP」相关选项。用PowerShell创建符合要求的自签名证书可参考以下命令:
New-SelfSignedCertificate -Type Custom -Subject "CN=AsbSigningCert" -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -KeyStorageProvider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable
- 检查Key Vault中存储的证书源:如果当初导入Key Vault的证书本身是用旧CSP生成的,就算通过AzureKeyVault任务下载拿到证书字符串,依然会触发报错。需要重新生成符合CNG要求的证书,导出带私钥的PFX后重新上传到Key Vault即可。
- 证书签名哈希算法建议选择SHA256及以上版本,不要使用SHA1。
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

