SSL_version không hợp lệ được chỉ định tại /usr/share/perl5/IO/Socket/SSL.pm dòng 332


9

Kể từ khi tôi nâng cấp PC của mình từ (k) ubfox 12.04 lên 12.10, tôi nhận được thông báo lỗi này khi cố gắng gửi email bằng cách sử dụng sendemail.

Cài đặt phiên bản cũ hơn của IO :: Socket :: SSL không phải là một tùy chọn. Tôi có ấn tượng rằng tất cả đều hoạt động như bình thường và thông điệp chỉ là một cảnh báo.

Làm thế nào tôi có thể thoát khỏi tin nhắn này?


SSL.pm

Tôi nghĩ vấn đề dưới đây liên quan đến vấn đề (/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;

gửi email

Và ở cuối sendemail tôi nghĩ rằng nó ở đây trong mã:

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
Đã giải quyết vấn đề này bằng cách thay đổi 'SSLv3 TLSv1'in dòng gửi thư 1907 thành' SSLv3 ', nhưng chỉnh sửa các tệp được cài đặt từ một gói là không tốt .
jippie

Trong phiên bản debian mới tôi vẫn gặp phải vấn đề này, nhưng hiện tại tôi không thể tìm thấy dòng đó ..... Không có giải pháp nào khác hoạt động ngoại trừ bỏ qua tls. = (
Luciano Andress Martini

Câu trả lời:



4

Trên thực tế, chỉ cần lấy mặc định (loại bỏ tham số thứ hai). Xem https://metacpan.org/pod/IO::Socket::SSL (tìm kiếm SSL_version). Mặc định là SSLv23 :! SSLv3 :! SSLv2.

Tôi đã sửa đổi dòng 1906 trong v1.56 để đọc

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

(chỉ bình luận ra dòng gốc)


3

Cách giải quyết dễ dàng hơn là:

Thay thế:

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

Với:

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

Vấn đề của tôi là bản sửa lỗi này phá vỡ Net :: Twitter
Dave Jacoby

1
1690 dòng /usr/share/perl5/IO/Socket/SSL.pm trong Ubuntu 14.04
Rahul Patil

Vì một số người vẫn coi cách giải quyết trong câu trả lời này là cách khắc phục và phàn nàn về lỗi trong IO :: Socket :: SSL: Vấn đề không nằm ở IO :: Socket :: SSL mà là một lỗi trong sendEmail, không được biết đến vì 2009 . Cụ thể: cú pháp cho SSL_version là sai và thậm chí không hợp lệ tại thời điểm mã được viết, chỉ IO :: Socket :: SSL không khiếu nại. Cách khắc phục chỉ là xóa cài đặt SSL_version khỏi sendemail. Xem thêm rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich


2

Nếu bạn vẫn gặp lỗi chứng chỉ sau khi sửa lỗi SSLversion như được hiển thị ở trên, bạn cần phải tắt kiểm tra chứng chỉ:

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

Bản thân tôi đã không thấy vấn đề này từ lâu và gói ubfox đã được khắc phục trong khi đó. Lần đầu tiên cố gắng khắc phục sự cố này phải là vá hệ thống / sử dụng hầu hết các phiên bản hiện tại của phần mềm. Tuy nhiên, giải pháp thay thế rất thú vị theo quan điểm khác, thnx.
jippie

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

hoạt động trên debian wheezy với sendEmail 1.56-2 và libio-socket-ssl-perl 1.76-2 và

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

hoạt động với dòng / IO / Ổ cắm / SSL.pm: 1.74 sendEmail: 1.56 trong Ubuntu.

Đây là một vấn đề trong ubfox và debian repos trong hơn một năm.


0

Để khắc phục điều này, tôi đã chỉnh sửa sendEmail-v1.55 ở dòng 1884 để thay đổi 'SSLv3 TLSv1' thành 'SSLv3'.

OSX 10.10.1


-1

đã làm cho tôi

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.