如何重建.pub公钥文件 解决X509密钥格式无效异常
报错根因说明
- OpenSSL读取报错:
openssl x509是专门用于解析完整X509数字证书的命令,你所持有的.pub为独立公钥文件,并非完整证书,格式不匹配所以无法正常加载。 - Java异常报错:
X509EncodedKeySpec要求输入参数为 DER编码的X509格式公钥字节数组,如果你的公钥是带头尾标识的PEM格式、编码类型错误、或公钥非RSA类型,都会触发格式校验失败。
查看现有公钥信息的操作方法
首先判断公钥格式:用文本编辑器打开.pub文件,如果能看到-----BEGIN PUBLIC KEY-----开头的头尾标识则为PEM格式,全为乱码则为DER格式,对应执行以下命令即可读取信息:
- PEM格式公钥查询命令:
openssl rsa -pubin -in test.pub -text -noout - DER格式公钥查询命令:
openssl rsa -pubin -inform DER -in test.pub -text -noout
生成符合Java要求的公钥步骤
按照以下流程生成的公钥可直接适配X509EncodedKeySpec的格式要求:
- 生成2048位RSA私钥:
openssl genrsa -out test_private.key 2048 - 导出直接可用的DER格式X509公钥:
openssl rsa -in test_private.key -pubout -outform DER -out test_public.der
代码中直接读取该.der文件的字节数组传入X509EncodedKeySpec即可正常使用。 - 如果你需要使用PEM格式公钥,在Java代码中需做预处理:删除PEM文件头尾的标识行、移除所有换行符,将剩余的Base64字符串解码为字节数组后再传入
X509EncodedKeySpec即可。
内容的提问来源于stack exchange,提问作者user3310115
相关产品推荐
相关产品推荐

