我尝试将一个小补丁应用于nagios脚本,以添加额外的命令行开关“--sslv3”。
原始是需要立即修改的行
$client = new IO::Socket::SSL->new(PeerAddr => $host,
SSL_verify_mode => SSL_VERIFY_NONE);
如果设置了$ sslv3,那么该行应该是(注意额外的SSL_version事件)
$client = new IO::Socket::SSL->new(PeerAddr => $host,
SSL_verify_mode => SSL_VERIFY_NONE, SSL_version => 'SSLv3');
我尝试用简单的if
来解决它$client = new IO::Socket::SSL->new(PeerAddr => $host,
SSL_verify_mode => SSL_VERIFY_NONE,
($sslv3) ? SSL_version => 'SSLv3' :
SSL_version => $DEFAULT_SSL_ARGS{SSL_version});
但我无法从 perl / 5.14.2 / IO / Socket / SSL.pm - IO :: Socket :: SSL 获取默认值并认为我的方式不是最好的。这是定义默认值的文件中的部分:
# global defaults
my %DEFAULT_SSL_ARGS = (
SSL_check_crl => 0,
SSL_version => 'SSLv23:!SSLv2',
SSL_verify_callback => undef,
SSL_verifycn_scheme => undef, # don't verify cn
SSL_verifycn_name => undef, # use from PeerAddr/PeerHost
SSL_npn_protocols => undef, # meaning depends whether on server or client side
SSL_cipher_list =>
'EECDH+AESGCM+ECDSA EECDH+AESGCM EECDH+ECDSA +AES256 EECDH EDH+AESGCM '.
'EDH ALL +SHA +3DES +RC4 !LOW !EXP !eNULL !aNULL !DES !MD5 !PSK !SRP',
);
如何访问SSL_version
并使用它,甚至以更酷的方式进行操作?
我试过了
print "ssl ver " . $DEFAULT_SSL_ARGS{SSL_version};
但它不起作用。
答案 0 :(得分:1)
我不清楚你在问什么。我认为你正在寻找
my %DEFAULT_SSL_ARGS = (
...
$sslv3 ? (SSL_version => 'SSLv3') : (),
);
或更容易阅读
my %DEFAULT_SSL_ARGS = (
...
);
$DEFAULT_SSL_ARGS{SSL_version} = 'SSLv3' if $sslv3;