PHP 如何解析pkcs7 签名blob?
PHP How to parse pkcs7 signature blob?
我有一个 PKCS7 签名,我可以使用
从中获取已解析的内容
openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
但是如何使用 PHPs openssl 函数实现相同的输出?
编辑。我成功地使用以下函数创建了正确的 PEM 文件:
function der2pem($der_data, $type="CERTIFICATE") {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN $type-----\n".$pem."-----END $type-----\n";
return $pem;
}
$data = der2pem($der_data, "PKCS7");
然而,我没有成功地使用 PHP 手册中提到的任何函数解析数据。它使用 openssl 与:
openssl pkcs7 -inform PEM -in signature.pkcs7 -print_certs -text
这个解决方案怎么样:)
<?php
$result = shell_exec('openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text');
var_dump ($result);
// you can use preg_match() if you want to parse something specific
不幸的是,我相信没有简单的解决办法。如果你想解析 PHP 中的 PKCS#7 DER 编码签名,你需要一些 ASN.1 解析器。 PHP 中的 OpenSSL 函数无法做到这一点。
Do any PHP libraries exist for parsing ASN.1 or generating PHP code based on it?
尝试使用一些引用的解析器解码您的 DER 数据。如果任何解析器都可以工作,您应该能够看到并提取所需的信息。作为第一步,您可以尝试来自 phpseclib 项目的在线解析器。
我有一个 PKCS7 签名,我可以使用
从中获取已解析的内容openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
但是如何使用 PHPs openssl 函数实现相同的输出?
编辑。我成功地使用以下函数创建了正确的 PEM 文件:
function der2pem($der_data, $type="CERTIFICATE") {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN $type-----\n".$pem."-----END $type-----\n";
return $pem;
}
$data = der2pem($der_data, "PKCS7");
然而,我没有成功地使用 PHP 手册中提到的任何函数解析数据。它使用 openssl 与:
openssl pkcs7 -inform PEM -in signature.pkcs7 -print_certs -text
这个解决方案怎么样:)
<?php
$result = shell_exec('openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text');
var_dump ($result);
// you can use preg_match() if you want to parse something specific
不幸的是,我相信没有简单的解决办法。如果你想解析 PHP 中的 PKCS#7 DER 编码签名,你需要一些 ASN.1 解析器。 PHP 中的 OpenSSL 函数无法做到这一点。
Do any PHP libraries exist for parsing ASN.1 or generating PHP code based on it?
尝试使用一些引用的解析器解码您的 DER 数据。如果任何解析器都可以工作,您应该能够看到并提取所需的信息。作为第一步,您可以尝试来自 phpseclib 项目的在线解析器。