PKCS1格式RSA公钥转PKCS8时遇“无法加载公钥”错误求助
问题原因与解决办法
为什么OpenSSL报错但jwt.io能正常验证?
- OpenSSL的
openssl rsa -RSAPublicKey_in命令对格式要求极为严格:它只认PKCS#1格式的RSA公钥(对应-----BEGIN RSA PUBLIC KEY-----头部),会严格按照PKCS#1的ASN.1结构解析内容,一旦结构不匹配就抛出ASN.1解码错误。 - jwt.io的验证库兼容性更强,它会直接解析公钥的ASN.1实际结构,不会被PEM头部的标识限制。哪怕头部标错了,只要公钥内容本身有效,就能正常解析并验证JWT签名。
你的公钥实际问题
你提供的公钥内容是PKCS#8格式,但头部被错误地写成了PKCS#1的-----BEGIN RSA PUBLIC KEY-----,这才导致OpenSSL用PKCS#1的解析命令失败。
解决办法
办法1:直接修正头部
把公钥的头部和尾部改成以下内容,就是标准的PKCS#8格式,无需额外转换:
-----BEGIN PUBLIC KEY----- MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAqeCH+XC9TqNt8vSF1T5f HTcWyoW6t/TbMCbHh2rvOuaoqpZGNOblVYDmnzkFkrGQwAZ0ra5MrN+PCLxfuodK 2OKAYR3sfxx8BiPhfE+rBoAXZLf5+JJRjB34DH8Pm674LX190BVieOmQLiqJafQ0 lSArXPQwwRENEgtJr1eAM+wr8o/UhY2/kuQIhu79NPgPor0l5f4jlENNyC/uq84+ qg37SCQzNGHEAesdTQIUoDmAMnKaLZfAa4gVIDQn7KZq5PkLM8IuNDoIEq63HkKd OghvB7MTfuX2B9BAYsxmkfoxaUZMG+cV8o2iCe6MxVQUB0zaql1xLo5eSgiKL7vL eJHv/Owv/Vr7PtbwWZe4r5R6RNTABeh7dHyWRfX63EEGJuq2vG67iukxOXgHLvGp dpoC1rhKG9pizffOjzWQsLYV8jxP9b/sM8TsMg9Yq1sa4kRV+2pG39DhjBKgc3Ba 3cCiu1GszmXJZ4YPtH30VuPB2e4SlR5VUp9JCDokidLxAgMBAAE= -----END PUBLIC KEY-----
办法2:用OpenSSL命令强制转换
如果不想手动改头部,执行以下命令即可输出标准PKCS#8格式公钥:
openssl pkey -pubin -in pub.key -pubout
这个命令会忽略PEM头部的错误标识,直接解析公钥的实际ASN.1结构,输出正确格式的公钥。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

