OpenSSL生成RSA公钥导入.NET Core调用ImportRSAPublicKey报ASN1错误如何解决
问题原因
你当前生成的公钥格式和ImportRSAPublicKey要求的格式不匹配:
- OpenSSL默认执行
rsa -pubout输出的是X.509 SubjectPublicKeyInfo格式公钥,头尾标识为-----BEGIN PUBLIC KEY-----,对应.NET的ImportSubjectPublicKeyInfo导入方法 ImportRSAPublicKey要求的是PKCS#1格式的RSA公钥,头尾标识为-----BEGIN RSA PUBLIC KEY-----,两者ASN.1编码结构存在差异,所以会抛出ASN1数据损坏的异常。
解决方案
修改OpenSSL导出公钥的命令,添加-traditional参数强制输出PKCS#1格式:
openssl rsa -in name_of_private_key.pem -pubout -traditional > name_of_public_key.pem
导出完成后提取头尾标识之间的Base64文本、移除换行符后,即可用你原有ImportRSAPublicKey的代码正常导入。
如果已经生成过X.509格式的公钥,不需要重新生成私钥,直接执行转换命令即可得到PKCS#1格式公钥:
openssl rsa -pubin -in 已有的X509公钥.pem -RSAPublicKey_out -traditional > pkcs1公钥.pem
内容的提问来源于stack exchange,提问作者m.edmondson
相关产品推荐
相关产品推荐

