ระบุ SSL_version ที่ไม่ถูกต้องที่ /usr/share/perl5/IO/Socket/SSL.pm บรรทัด 332


9

ตั้งแต่ผมอัพเกรดคอมพิวเตอร์ของฉันจาก (k) อูบุนตู 12.04-12.10 sendemailฉันได้รับข้อความแสดงข้อผิดพลาดนี้เมื่อพยายามที่จะส่งอีเมลโดยใช้

การติดตั้ง IO :: Socket :: SSL เวอร์ชันเก่าไม่ใช่ตัวเลือก ฉันรู้สึกว่าทุกอย่างทำงานได้อย่างที่ควรจะเป็นและข้อความก็เป็นเพียงคำเตือน

ฉันจะกำจัดข้อความนี้ได้อย่างไร


SSL.pm

ฉันคิดว่าด้านล่างเกี่ยวข้องกับปัญหา (/usr/share/perl5/IO/Socket/SSL.pm)

34  use constant DEFAULT_VERSION     => 'SSLv23:!SSLv2';

...

251         my %default_args = (
252                 Proto => 'tcp',
253                 SSL_server => $is_server,
254                 SSL_use_cert => $is_server,
255                 SSL_check_crl => 0,
256                 SSL_version     => DEFAULT_VERSION,
257                 SSL_verify_mode => SSL_VERIFY_NONE,
258                 SSL_verify_callback => undef,
259                 SSL_verifycn_scheme => undef,  # don't verify cn
260                 SSL_verifycn_name => undef,    # use from PeerAddr/PeerHost
261                 SSL_npn_protocols => undef,    # meaning depends whether on server or client side
262                 SSL_honor_cipher_order => 0,   # client order gets preference
263         );

...

332         ${*$self}{'_SSL_ctx'} = IO::Socket::SSL::SSL_Context->new($arg_hash) || return;

ส่งอีเมล

และที่ปลาย sendemail ฉันคิดว่ามันเกี่ยวกับที่นี่ในรหัส:

1903     ## Start TLS if possible
1904     if ($conf{'tls_server'} == 1 and $conf{'tls_client'} == 1 and $opt{'tls'} =~ /^(yes|auto)$/) {
1905         printmsg("DEBUG => Starting TLS", 2);
1906         if (SMTPchat('STARTTLS')) { quit($conf{'error'}, 1); }
1907         if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
1908             quit("ERROR => TLS setup failed: " . IO::Socket::SSL::errstr(), 1);
1909         }
1910         printmsg("DEBUG => TLS: Using cipher: ". $SERVER->get_cipher(), 3);
1911         printmsg("DEBUG => TLS session initialized :)", 1);
1912 
1913         ## Restart our SMTP session
1914         if (SMTPchat('EHLO ' . $opt{'fqdn'})) { quit($conf{'error'}, 1); }
1915     }
1916     elsif ($opt{'tls'} eq 'yes' and $conf{'tls_server'} == 0) {
1917         quit("ERROR => TLS not possible! Remote SMTP server, $conf{'server'},  does not support it.", 1);
1918     }

1
แก้ไขได้ในเวลานั้นโดยการเปลี่ยน 'SSLv3 TLSv1'in sendemail สาย 1907 ที่ 'SSLv3' แต่การแก้ไขไฟล์ติดตั้งจากแพคเกจเป็นที่ไม่ดี
jippie

ในรุ่นเดเบียนใหม่ฉันยังคงมีปัญหานี้อยู่ แต่ตอนนี้ฉันไม่สามารถค้นหาบรรทัดนั้นได้ ..... ไม่มีวิธีการแก้ปัญหาอื่นที่ทำงานได้ยกเว้นละเว้น tls = (
Luciano Andress Martini

คำตอบ:


8

มีรายงานข้อผิดพลาดในเว็บไซต์ติดตามบั๊กของ Debian คือ: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

นอกจากนี้ยังระบุวิธีแก้ปัญหา:

ระบุ-o tls=noเป็นตัวเลือกในบรรทัดคำสั่ง

ขอบคุณ @Manolo Díazบน debian.org


วิธีแก้ปัญหาเป็นเรื่องปกติ แต่จำเป็นต้องมีการแก้ไข
Znik

4

ที่จริงเพียงแค่ใช้ค่าเริ่มต้น (ลบพารามิเตอร์ที่สอง) ดูhttps://metacpan.org/pod/IO::Socket::SSL (ค้นหา SSL_version) ค่าเริ่มต้นคือ SSLv23:! SSLv3:! SSLv2

ฉันแก้ไขบรรทัด 1906 ใน v1.56 เพื่ออ่าน

#        if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
    if (! IO::Socket::SSL->start_SSL($SERVER)) {

(เพียงแสดงความคิดเห็นในบรรทัดเดิม)


3

วิธีแก้ปัญหาที่ง่ายกว่าคือ:

แทนที่:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i

ด้วย:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

ปัญหาของฉันคือการแก้ไขนี้แบ่ง Net :: Twitter
Dave Jacoby

1
1690 line /usr/share/perl5/IO/Socket/SSL.pm ใน Ubuntu 14.04
Rahul Patil

เนื่องจากบางคนยังคงพิจารณาวิธีแก้ปัญหาในคำตอบนี้เนื่องจากการแก้ไขและบ่นเกี่ยวกับข้อบกพร่องใน IO :: Socket :: SSL: ปัญหาไม่ได้อยู่ใน IO :: Socket :: SSL แต่เป็นข้อผิดพลาดใน sendEmail ซึ่งไม่ได้ถูกลบตั้งแต่ 2009 ในรายละเอียด: ไวยากรณ์สำหรับ SSL_version ไม่ถูกต้องและไม่ถูกต้องแม้ในเวลารหัสถูกเขียนเพียง IO :: Socket :: SSL ไม่บ่นแล้ว การแก้ไขเป็นเพียงการลบการตั้งค่า SSL_version จาก sendemail ดูเพิ่มเติมrt.cpan.org/Public/Bug/Display.html?id=77401
Steffen Ullrich


2

หากคุณยังคงได้รับข้อผิดพลาดใบรับรองหลังจากแก้ไข SSLversion ตามที่แสดงด้านบนคุณต้องปิดการใช้งานการตรวจสอบใบรับรอง:

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {

ยังไม่เห็นปัญหาสำหรับตัวเองมานานและแพ็คเกจ Ubuntu ได้รับการแก้ไขในขณะที่ ความพยายามครั้งแรกในการแก้ไขปัญหานี้ควรแก้ไขระบบ / ใช้ซอฟต์แวร์รุ่นล่าสุด โซลูชันทางเลือกนั้นน่าสนใจจากมุมมองอื่น ๆ ขอบคุณ
jippie

0
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {<br>

ทำงานบน debian wheezy ด้วย sendEmail 1.56-2 และ libio-socket-ssl-perl 1.76-2 และ

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {<br>

ทำงานร่วมกับ… / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 ใน Ubuntu

นี่เป็นปัญหาใน repos ของ Ubuntu และ debian มานานกว่าหนึ่งปี



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.