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

如何使用Perl库Crypt::OpenSSL::X509正确获取证书SAN字段

问题解答

推荐方案(无需手动处理OID和特殊字符)

Crypt::OpenSSL::X509 的最新稳定版已经内置了直接获取CN和SAN字段的原生方法,不需要手动查询OID,也不会返回带多余点号的结果:

  • 获取证书CN:直接调用$x509->common_name()方法,返回值就是CN字段的纯文本内容
  • 获取证书SAN:直接调用$x509->subject_alt_names()方法,返回包含所有SAN条目的数组,每个条目都是清理好的纯文本

完整使用示例:

use Crypt::OpenSSL::X509;

# 从文件加载证书,也支持new_from_string等加载方式
my $x509 = Crypt::OpenSSL::X509->new_from_file('your_cert.crt');

# 读取CN
print "证书CN:", $x509->common_name(), "\n";

# 读取所有SAN
my @san_list = $x509->subject_alt_names();
foreach my $san (@san_list) {
    print "证书SAN:", $san, "\n";
}

如果运行上述代码出现方法不存在的报错,直接将Crypt::OpenSSL::X509升级到CPAN最新版本即可,旧版本未内置这两个便捷方法。

旧版本兼容方案

如果暂时无法升级库,需要继续通过OID查询扩展字段,多余点号可以用简单的正则清理,无需复杂匹配:

use Crypt::OpenSSL::X509;
my $ext = $x509->extensions_by_oid();
my $san_raw = ${$ext}{'2.5.29.17'}->value();
# 清理每个SAN条目前缀多余的点号
$san_raw =~ s/(?<=DNS:|IP:|email:)\.//g;
print $san_raw;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:08