You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何从X.509证书提取签名值?

提取X.509证书签名值的PHP解决方案

你可以使用PHP的openssl_x509_get_signature函数直接提取证书的签名信息,它会返回结构化的数组(而非纯字符串),包含签名值和对应的签名算法。

完整代码示例

// 你的证书内容
$certificate = '-----BEGIN CERTIFICATE-----
MIIEvzCCBGSgAwIBAgITeAAARlJXpwVPUYDkbAABAABGUjAKBggqhkjOPQQDAjBi
MRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxEzARBgoJkiaJk/IsZAEZFgNnb3YxFzAV
BgoJkiaJk/IsZAEZFgdleHRnYXp0MRswGQYDVQQDExJQRVpFSU5WT0lDRVNDQTQt
Q0EwHhcNMjQwNzAyMDMxMTE2WhcNMjYwNzAyMDMyMTE2WjBJMQswCQYDVQQGEwJT
QTESMBAGA1UEChMJZnJlZSB0ZXh0MRIwEAYDVQQLEwlmcmVlIHRleHQxEjAQBgNV
BAMTCWZyZWUgdGV4dDBWMBAGByqGSM49AgEGBSuBBAAKA0IABP/Lh6KN1Y5Z6CzW
+3hLkwGLUyorKQoCCQZzrbtvHNLocvv7OFDUHZZiOnwzhavZLkOEPjH8ojIH1kb1
A4LsTEejggMTMIIDDzB+BgNVHREEdzB1pHMwcTEgMB4GA1UEBAwXMS1TaGFFa3wy
LVNoYUVrfDMtU2hhRWsxHzAdBgoJkiaJk/IsZAEBDA8zMTExOTAyOTM3MDAwMDMx
DTALBgNVBAwMBDExMDAxDjAMBgNVBBoMBWphemFuMQ0wCwYDVQQPDARUZWNoMB0G
A1UdDgQWBBQJ9H6ej6E1lbOuT+RG6WI9yHrdATAfBgNVHSMEGDAWgBTHwOa3qd0S
yk89bWiCliFF8wF1pDCB5QYDVR0fBIHdMIHaMIHXoIHUoIHRhoHObGRhcDovLy9D
Tj1QRVpFSU5WT0lDRVNDQTQtQ0EoMSksQ049UFJaRUlOVk9JQ0VQS0k0LENOPUNE
UCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25m
Wd1cmF0aW9uLERDPWV4dHphdGNhLERDPWdvdixEQz1sb2NhbD9jZXJ0aWZpY2F0
ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9u
UG9pbnQwgc4GCCsGAQUFBwEBBIHBMIG+MIG7BggrBgEFBQcwAoaBrmxkYXA6Ly8v
Q049UEVaRUlOVk9JQ0VTQ0E0LUNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBT
ZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWV4dHphdGNh
LERDPWdvdixEQz1sb2NhbD9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9
Y2VydGlmaWNhdGlvbkF1dGhvcml0eTAOBgNVHQ8BAf8EBAMCB4AwPAYJKwYBBAGC
NxUHBC8wLQYlKwYBBAGCNxUIgYaoHYTQ+xKG7Z0kh877GdPAVWaBnNgtg+XFXQIB
ZAIBEDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwMwJwYJKwYBBAGCNxUK
BBowGDAKBggrBgEFBQcDAjAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA
2sVgVJidhX8lnKshVB4JL7YBY+F1p48JI7NPpO4xJDQCIQCWf97LYNEK7358msfA
RK1iTp3om8fnJ33A59SurRjENA==
-----END CERTIFICATE-----';

// 读取证书
$cert = openssl_x509_read($certificate);
if (!$cert) {
    die('证书读取失败');
}

// 获取签名信息
$signatureInfo = openssl_x509_get_signature($cert);
if (!$signatureInfo) {
    die('获取签名失败');
}

// 输出结构化结果
echo "签名算法OID: " . $signatureInfo['algorithm'] . "\n";
echo "原始二进制签名: " . $signatureInfo['signature'] . "\n";
// 转换为和证书中一致的Base64格式
echo "Base64编码签名: " . base64_encode($signatureInfo['signature']) . "\n";

// 释放证书资源
openssl_x509_free($cert);

关键说明

  1. 函数作用:openssl_x509_get_signature专门用于提取X.509证书的签名信息,返回的关联数组包含两个核心字段:

    • algorithm:签名使用的算法标识符(OID),你的证书使用的是1.2.840.10045.4.3.2(对应ECDSA-with-SHA256)
    • signature:原始二进制格式的签名值,如果需要和PEM证书中显示的Base64格式一致,用base64_encode转换即可。
  2. 为什么之前的方法不行:

    • openssl_x509_export仅输出完整的PEM格式证书,签名是其中的一段字符串,无法直接结构化获取;
    • openssl_x509_parse默认只解析证书的高层元数据(如主体、颁发者、有效期等),不包含签名这类底层结构信息。

内容的提问来源于stack exchange,提问作者momo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:40:56