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

如何用Perl精准获取SSL证书过期日期?现有方法返回多日期且部分错误

解决SSL证书过期日期获取不准确的问题

你遇到的问题根源在于SSL_verify_callback会在证书链的每一个证书验证环节都被触发——服务器证书、中间证书、根证书都会被回调处理,所以会输出多个过期日期,其中只有服务器证书的日期和浏览器显示的一致。

要获取和浏览器完全一致的准确日期,应该在SSL连接建立完成后,直接提取服务器的证书,而不是在验证回调中处理所有证书。下面是修正后的代码:

use LWP::UserAgent;
use Net::SSLeay;

my $ua = LWP::UserAgent->new();
my $target_cert;

# 设置连接完成后的回调,提取服务器证书
$ua->ssl_opts(
    SSL_verify_mode => 0x02, # 保持正常的证书验证逻辑,可选
    after_connect => sub {
        my ($socket, $ua, $headers) = @_;
        # 确认是SSL socket
        if ($socket->isa('IO::Socket::SSL')) {
            $target_cert = $socket->peer_certificate();
        }
    },
);

my $url = 'https://pjf.nif.org/m/login';
my $response = $ua->get($url);

# 输出准确的过期日期
if ($target_cert) {
    my $expire_date = Net::SSLeay::P_ASN1_TIME_get_isotime(
        Net::SSLeay::X509_get_notAfter($target_cert)
    );
    print "证书过期日期:$expire_date\n";
} else {
    print "无法获取目标服务器证书\n";
}

代码说明

  • after_connect回调在SSL连接成功建立后执行,此时通过peer_certificate()方法直接获取服务器返回的端证书,也就是浏览器显示的那个证书。
  • 避免了遍历整个证书链,只会输出一个准确的过期日期,和浏览器证书信息中的日期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:15:57