هل يمكنني إجبار LWP::UserAgent على قبول شهادة SSL منتهية الصلاحية؟

StackOverflow https://stackoverflow.com/questions/336575

سؤال

أود أن أعرف ما إذا كان من الممكن إجبار LWP::UserAgent على قبول شهادة SSL منتهية الصلاحية لخادم واحد معروف.المشكلة معقدة بعض الشيء بسبب وجود وكيل Squid بينهما.

لقد ذهبت إلى حد إعداد بيئة تصحيح الأخطاء مثل:

use warnings;
use strict;
use Carp;
use LWP::UserAgent;
use LWP::Debug qw(+);
use HTTP::Cookies;

my $proxy = 'http://proxy.example.net:8118';
my $cookie_jar = HTTP::Cookies->new( file => 'cookies.tmp' );
my $agent = LWP::UserAgent->new;
$agent->proxy( [ 'http' ], $proxy );
$agent->cookie_jar( $cookie_jar );

$ENV{HTTPS_PROXY} = $proxy;
$ENV{HTTPS_DEBUG} = 1;
$ENV{HTTPS_VERSION} = 3;
$ENV{HTTPS_CA_DIR}    = '/etc/ssl/certs';
$ENV{HTTPS_CA_FILE}    = '/etc/ssl/certs/ca-certificates.crt';

$agent->get( 'https://www.example.com/');

exit;

لحسن الحظ، تم إصلاح المشكلة في النهاية على الخادم البعيد قبل أن أتمكن من التوصل إلى الحل الخاص بي، ولكنني أود أن أكون قادرًا على التحايل على المشكلة بشكل اختياري في حالة ظهورها مرة أخرى (لقد تعطلت الخدمة الأساسية لعدة ساعات قبل أن أتمكن من حلها) تم استدعاؤه للعمل).

أفضل الحل على مستوى LWP::UserAgent بدلاً من الحل الذي يعتمد على تطبيقات Crypt::SSLeay أو openSSL الأساسية، إذا كان هذا الحل موجودًا، لأنني أفضل عدم تخفيف الأمان للتطبيقات الأخرى غير ذات الصلة.بالطبع ما زلت أبحث عن مثل هذا الحل بنفسي، في وقت فراغي الغزير.

هل كانت مفيدة؟

المحلول

تم التحديث لمعالجة التعليق

لتجاوز الجميع الشيكات الشهادة يمكنك تعيين عامل حتى عدم التحقق من الشهادة.

$agent->ssl_opts(verify_hostname => 0);

سيقوم الوكيل أيضًا بتمرير الإعدادات إلى تطبيق مأخذ توصيل SSL المستخدم.على سبيل المثال، معIO::Socket::SSL يمكنك ضبط SSL_verify_mode ل 0x00.

$agent->ssl_opts(SSL_verify_mode => 0x00);

نصائح أخرى

وحاول تجاوز التحقق من صحة شهادة SSL مع

$agent->ssl_opts(verify_hostname => 0,
              SSL_verify_mode => 0x00);

وقبل أن تفعل طلب HTTPS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top