如何使用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
相关产品推荐
相关产品推荐

