从IO :: SOCKET :: SSL读取var

时间:2013-11-29 13:39:41

标签: perl

我尝试将一个小补丁应用于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};

但它不起作用。

1 个答案:

答案 0 :(得分:1)

我不清楚你在问什么。我认为你正在寻找

my %DEFAULT_SSL_ARGS = (
    ...
    $sslv3 ? (SSL_version => 'SSLv3') : (),
);

或更容易阅读

my %DEFAULT_SSL_ARGS = (
    ...
);

$DEFAULT_SSL_ARGS{SSL_version} = 'SSLv3' if $sslv3;