道者编程

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;
}
 


最新评论:
我要评论:

看不清楚