前言
在工作中我们或多或少会接触对接外部系统(如微信支付宝),对接过程中又无可避免会对数据的加解密和加签验签。一般第三方会提供一个授权证书,让我们自行解密提取秘钥。为了让你拿到证书后不会像我当初一样一脸懵逼,咱们来看看如何从p12证书中提取公私钥。
什么是p12证书

讯享网
我们常说的p12证书全称是PKCS#12(Public-Key Cryptography Standards:公钥加密标准)
p12证书提取秘钥流程图

提取流程详解
1. 提取证书序列号
我们可能听过“公钥序列号”、“私钥序列号”等说法,这都是错误的概念,只有证书才存在序列号。
一个最简单的办法,在Windows系统下直接双击p12证书导入证书。在输入密码后看到如下提示表示证书导入成功。

然后Win+R打开命令行输入certmgr.msc打开

按如下图即可找到证书序列号,至此证书序列号获取完毕。

2.提取原始秘钥
我们利用OpenSSL命令提取RSA原始密钥对。
openssl pkcs12 -in 你的证书.p12 -nocerts -nodes -out rsa_origin.key
讯享网
该秘钥内容如下:
讯享网-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxB/LNFITHme/a 此处省略N行 +naXDzKULrHVPtBYQkcGneZx2A2DLYBMupWI6EVw/anw9vLuhH8tVwuB77/1xQvf 4vngZlegOoSf2DQOcwU9z7A= -----END PRIVATE KEY-----
提示输入证书口令后可得到原始秘钥rsa_origin.key,但仅有该秘钥是没用的,必须再从其中提取出公钥和私钥。

3.从原始秘钥提取RSA私钥
同样,利用OpenSSL命令提取RSA私钥
openssl rsa -in rsa_origin.key -out rsa_pkcs1.pem
提取出私钥rsa_pkcs1.pem内容如下:
讯享网-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAsQfyzRSEx5nv2pM/Lv0FXvohs+mSnzSOhK5C44PMXoGsAGmT 此处省略N行 cEYdpIoL/QDF5zz7lFDSOvryep+g1Pp2lw8ylC6x1T7QWEJHBp3mcdgNgy2ATLqV iOhFcP2p8Pby7oR/LVcLge+/9cUL3+L54GZXoDqEn9g0DnMFPc+w -----END RSA PRIVATE KEY-----
此处注意,该秘钥为PKCS#1格式,在PHP下可直接使用,若为java环境,我们一般需要使用PKCS#8格式私钥,那么再来做一次转换。
openssl pkcs8 -topk8 -inform PEM -in rsa_pkcs1.pem -outform PEM -out rsa_private_pkcs8.pem -nocrypt
通过该命令我们得到java下可用的RSA私钥
讯享网-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxB/LNFITHme/a 此处省略N行 +naXDzKULrHVPtBYQkcGneZx2A2DLYBMupWI6EVw/anw9vLuhH8tVwuB77/1xQvf 4vngZlegOoSf2DQOcwU9z7A= -----END PRIVATE KEY-----
至此RSA私钥提取完毕。
4.从原始秘钥提取RSA公钥
openssl rsa -in rsa_origin.key -pubout -out rsa_public_key.pem
以上命令可提取出RSA公钥。
提示:RSA公钥不存在格式问题,可以直接使用。
讯享网-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQfyzRSEx5nv2pM/Lv0F 此处省略N行 vucXimGLR2AS6yooZg3dcELsQmQ9tsoPdKB0IlGpZwp/XPf5Gxwia/WHJzS9PMjb bQIDAQAB -----END PUBLIC KEY-----
至此RSA公钥提取完毕。
验证秘钥提取结果
我们可以使用在线RSA加解密工具,输入我们提取出的RSA公钥和私钥,在下方输入任何字符后点公钥加密,然后将密文覆盖到原文,点击私钥解密。若能得到原文说明RSA公私钥正确无误。

本教程同时发布在我的公众号:Java学步园,欢迎加入JAVA初级交流群:,滑到最上面左侧扫描二维码哦~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27058.html