为 SSL_verify_mode 选择 SSL_VERIFY_NONE

Posted

技术标签:

【中文标题】为 SSL_verify_mode 选择 SSL_VERIFY_NONE【英文标题】:Selecting SSL_VERIFY_NONE for SSL_verify_mode 【发布时间】:2013-03-30 20:40:21 【问题描述】:

我正在尝试创建到没有证书且需要绕过代理的内部 ssl 站点的客户端连接。

我能够绕过代理,并且能够连接到站点并创建客户端连接,但是,我收到了这个丑陋的警告:

*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER 
 together with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************

C:/strawberry/perl/site/lib/LWP/Protocol/http.pm line 31

我的代码:

use    RPC::XML::Client;
use    XML::Simple;
use LWP::Protocol::https;

$ENVNO_PROXY = '10.*';

$ENV'PERL_LWP_SSL_VERIFY_HOSTNAME' = 0;

my $server = RPC::XML::Client->new("$vneUrl/api/index.ice",
                                 ssl_opts =>     SSL_verify_mode   => 'SSL_VERIFY_NONE',
                                                 verify_hostname    => 0,   
                                                 SSL_use_cert => 0x00
                                               ,
                                   );

【问题讨论】:

该警告中是否有您不理解的内容? 不清楚您的帖子标题与您的其余问题有什么关系。也许你可以解释一下你认为的联系是什么? 【参考方案1】:

新版本我相信你应该设置为 0 或 1。 我认为这是一个错误:

500 SSL_verify_mode must be a number and not a string

发件人:

$useragent->ssl_opts(SSL_verify_mode=>'SSL_VERIFY_NONE');

收件人:

$useragent->ssl_opts(SSL_verify_mode=>'0');

【讨论】:

【参考方案2】:

该消息来自 IO::Socket::SSL,它指的是它导出的常量 SSL_VERIFY_NONE,而不是字符串 'SSL_VERIFY_NONE'

其次,ssl_opts 是 LWP::UserAgent 的构造函数的参数,而不是 RPC::XML::Client 的。

试试:

use IO::Socket::SSL qw( SSL_VERIFY_NONE );

RPC::XML::Client->new($uri,
   useragent => [
      ssl_opts => 
         verify_hostname => 0,
         SSL_verify_mode => SSL_VERIFY_NONE,
      ,
   ],
);

【讨论】:

谢谢,在创建客户端连接时确实消除了警告。, 现在我已经创建了 $client,我需要传递请求。例如 [ my $session = $client->simple_request('login', 1, 0,$username, $password); ] 我再次收到此声明的错误。我将如何将 ssl_opts 传递给每个后续请求? 嗯,它使用在构造函数中创建的 UserAgent 对象,并且这些标志按预期传递给该对象。不确定该消息来自哪里 Net::SMTP::SSL有类似的解决方案吗? @mpapec - 我知道这是一个旧评论,但我在使用 Net::SMTP::SSL 时遇到了类似的困难。我发现的最佳解决方案是使用 IO::Socket::SSL::set_defaults,其设置将被更多的 Net::SMTP::SSL 实例隐式使用。

以上是关于为 SSL_verify_mode 选择 SSL_VERIFY_NONE的主要内容,如果未能解决你的问题,请参考以下文章

SSL 2677_飞行_spfa

为不同类型的网站选择最佳的SSL证书(下)

SSL 1473奶牛编号

选择Globalsign SSL证书的理由

javax.net.ssl.SSLException:服务器选择了不正确的密码套件 SSL_RSA_WITH_DES_CBC_SHA

如何选择合适的SSL证书类型