https 和 WWW::Mechanize - 接受特定证书 (MD5/SHA1/...)

https and WWW::Mechanize - accept specific certificate (MD5/SHA1/...)

如何使 WWW::Mechanize 接受 https 服务器的特定 SSL 证书?
[SSL 证书应通过 MD5/SHA1/... 校验和验证]

背景:
到目前为止,我需要一个 hack 来接受过期的(到目前为止几天)SSL 证书 [替换标准的检查集]。我还希望将来能够添加 SSL 校验和检查作为 附加 检查。

WWW::Mechanize 是 LWP::UserAgent 的子类,它本身使用 IO::Socket::SSL 建立 SSL 连接。 IO::Socket::SSL 提供了一个选项 SSL_fingerprint 可用于指定证书的预期指纹。请参阅 the documentation 了解更多详细信息,但有一个简短的示例:

use strict;
use warnings;
use WWW::Mechanize;

my %sslargs = (
    SSL_fingerprint => 'sha256$a0b0d7c3d86a03051af6a43726a0dd855825323cae59fdff2d9b9a8db83934b8',
);

my $ua = WWW::Mechanize->new( ssl_opts => \%sslargs);
my $resp = $ua->get("https://www.example.com");

请注意,您至少需要 IO::Socket::SSL 版本 1.980(04/2014 发布)才能正确支持 SSL_fingerprint,并且您还应该使用最新版本的 LWP。

当使用 SSL_fingerprint 时,只要指纹匹配,所有其他检查都会被忽略,也就是说,您可以使用自签名证书、过期证书或主题错误的证书。