我尝试使用 Crypt::X509 库从 .pem 证书中提取数据,但在对象构造中出现错误。 这是我正在做的事情: 1.读取.pem文件的内容:
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat $s_filename;
open FILE, "<$s_filename" or die "no such file";
binmode FILE;
my $pem_cert;
read FILE, $pem_cert, $size;
close FILE;
2.从 Base64 解码内容以接收 DER 格式的内容。这样做是因为 Crypt::X509 库的 CPAN 文档声明需要传递它:
A variable containing the DER formatted certificate to be parsed
my $der = MIME::Base64::decode($pem_cert);
- 调用 Crypt::X509 构造函数并检查错误:
我的 $oref_x509= Crypt::X509->new(cert=>$der);
如果($oref_x509->错误){
警告“解析证书时出错:”,
$oref_x509->错误;
}
我收到以下错误:
Error on parsing certificate: decode error 04<=>30 0 8 at ..<path>../Convert/ASN1/_decode.pm line 113.
我尝试过其他证书,但错误是相同的。
最佳答案
使用 MIME::Base64::decode 将证书从 PEM 转换为 DER 时,您需要删除 PEM header 和尾部,即代替解码
-----BEGIN CERTIFICATE-----
MIICVTCCAbegAwIBAgIELwBe7DAKBggqhkjOPQQDAjAaMRgwFgYDVQQDDA9mb28u
....
-----END CERTIFICATE-----
您应该仅解码 Base64 部分:
MIICVTCCAbegAwIBAgIELwBe7DAKBggqhkjOPQQDAjAaMRgwFgYDVQQDDA9mb28u
....
由于 -----BEGIN CERTIFICATE-----
等包含有效的 base64 字符,它们将用于解码,而无效字符将被默默忽略。
关于perl - 使用 perl Crypt::X509 从证书中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991171/