P12证书解析
P12是一种数字证书文件格式的扩展名,包含了私钥、公钥以及其他证书,下面我们做一个提取,我们用OpenSSL 提取 .p12 文件中的证书。假设我的这个文件是:test.p12
1.、提取私钥
openssl pkcs12 -in test.p12 -nocerts -out privatekey.pem -nodes # `test.p12` 是你的 `.p12` 文件名。 # `-nocerts` 表示不提取证书。 # `-out privatekey.pem` 指定输出的私钥文件名。 # `-nodes` 表示不对私钥进行加密。
输入密码后私钥就提取出来了
2.、提取公钥
接下来,从提取的私钥中提取公钥,使用以下命令:
openssl rsa -in privatekey.pem -pubout -out publickey.pem # `-in privatekey.pem` 是刚刚提取的私钥文件。 # `-pubout` 表示输出公钥。 # `-out publickey.pem` 指定输出的公钥文件名。
3.、提取证书(可选)
如果你还需要提取证书,可以使用以下命令:
openssl pkcs12 -in test.p12 -clcerts -nokeys -out certificate.pem # `-clcerts` 表示提取客户端证书。 # `-nokeys` 表示不提取私钥。
4、提取证书序列
如果要提取序列号,首先完成上面第3步,然后输入命令:
openssl x509 -in certificate.pem -text -noout #in certificate.pem 是你刚刚提取的证书文件。 #text 表示以可读格式输出证书信息。 #noout 表示不输出编码后的证书。
红框里面的就是序列号,一般是十六进制
用php把十六进制的序列号转字符串
function hexToString($serialNumberHex) { // 移除冒号和空格 $serialNumberHex = str_replace([':', ' '], '', $serialNumberHex); // 将十六进制字符串转换为字节 $serialBytes = pack('H*', $serialNumberHex); // 将字节转换为字符串 $serialString = $serialBytes; // 直接使用字节,可能会得到不可打印字符 return $serialString; }