perl - 使用 perl Crypt::X509 从证书中提取数据

标签 perl ssl x509 pem

我尝试使用 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/

    相关文章:

    json - 如何避免使用 Perl JSON 模块在数字周围加上引号?

    perl - 什么意思 "Can' t locate object method.."在这个使用 Perl 的具体例子中?

    android - 在Android中使用自签名证书实现https连接的正确方法是什么?

    c# - 我应该为我的 REST API 的消费者提供客户端证书吗?

    certificate - OpenSSL 使用自定义主题字段生成和签署证书

    perl - 使用 Perl 对 XML::Simple 中的输入标签进行排序,同时以 XML 格式打印输出

    ios - Cordova IOS = >' Failed to load resource: An SSL error has occurred'

    security - 如何实际处理吊销证书的验证?

    Spring针对不同的api端点提供多种身份验证方法

    perl - Moose && utf8(包|方法)名称