SSL_version tidak valid ditentukan di /usr/share/perl5/IO/Socket/SSL.pm baris 332

9

Karena saya memutakhirkan PC saya dari (k) ubuntu 12.04 menjadi 12.10 saya menerima pesan kesalahan ini ketika mencoba mengirim email menggunakan sendemail.

Menginstal versi IO :: Socket :: SSL yang lebih lama bukanlah suatu opsi. Saya mendapat kesan bahwa semua berfungsi sebagaimana mestinya dan pesannya hanyalah peringatan.

Bagaimana saya bisa menghilangkan pesan ini?


SSL.pm

Saya pikir di bawah ini ada hubungannya dengan masalah (/ 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;

mengirim email

Dan pada akhir sendemail saya pikir ini tentang kode ini:

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     }
jippie
sumber
1
Memecahkannya untuk saat ini dengan mengubah 'SSLv3 TLSv1'in baris sendemail 1907 menjadi' SSLv3 ', tetapi mengedit file yang diinstal dari suatu paket adalah buruk .
Jippie
Dalam versi debian baru saya masih mengalami masalah ini, tetapi saya sekarang tidak dapat menemukan baris itu ..... Tidak ada solusi lain yang berfungsi kecuali mengabaikan tls. = (
Luciano Andress Martini

Jawaban:

8

Ada laporan bug di situs pelacak bug Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

Ini juga menyatakan solusi:

tentukan -o tls=nosebagai opsi pada baris perintah.

Terima kasih @Manolo Díaz di debian.org.

jippie
sumber
sebagai solusi itu baik-baik saja, tetapi perbaikan diperlukan.
Znik
4

Sebenarnya, ambil saja default (hapus parameter kedua). Lihat https://metacpan.org/pod/IO::Socket::SSL (cari SSL_version). Standarnya adalah SSLv23:! SSLv3:! SSLv2.

Saya memodifikasi baris 1906 di v1.56 untuk dibaca

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

(hanya mengomentari baris asli)

tongkat
sumber
3

Solusi yang lebih mudah adalah:

Menggantikan:

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

Dengan:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
NguliMkaree
sumber
Masalah saya adalah bahwa perbaikan ini merusak Net :: Twitter
Dave Jacoby
1
1690 line /usr/share/perl5/IO/Socket/SSL.pm di Ubuntu 14.04
Rahul Patil
Karena beberapa orang masih menganggap solusi dalam jawaban ini sebagai perbaikan dan keluhan tentang bug di IO :: Socket :: SSL: Masalahnya bukan di IO :: Socket :: SSL tetapi merupakan bug di sendEmail, yang tidak dipelihara sejak 2009 . Secara detail: sintaks untuk SSL_version salah dan bahkan tidak valid pada saat kode waktu ditulis, hanya IO :: Socket :: SSL yang tidak mengeluh. Cara mengatasinya hanya untuk menghapus pengaturan SSL_version dari sendemail. Lihat juga rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich
2

Juga solusinya , lakukan ini jika diminta untuk mengirim dari smtp.gmail.com:

/usr/bin/sendemail on line 1907: 'SSLv3 TLSv1' => 'SSLv3' 

sebagai solusi sementara.

Coert van Gemeren
sumber
2

Jika Anda masih mendapatkan kesalahan sertifikat setelah memperbaiki versi SSL seperti yang ditunjukkan di atas, Anda perlu menonaktifkan pemeriksaan sertifikat:

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {
Nick Constantine
sumber
Belum pernah melihat masalah sendiri sejak lama dan paket ubuntu telah diperbaiki sementara itu. Upaya pertama untuk memperbaiki masalah ini adalah dengan menambal sistem / menggunakan sebagian besar versi perangkat lunak saat ini. Solusi alternatif menarik dari sudut pandang lain, thnx.
jippie
0
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {<br>

bekerja pada debian wheezy dengan sendEmail 1.56-2 dan libio-socket-ssl-perl 1.76-2 dan

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

bekerja dengan ... / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 di Ubuntu.

Ini merupakan masalah di repositori ubuntu dan debian selama lebih dari setahun.

kumogami
sumber
0

Untuk memperbaikinya, saya mengedit sendEmail-v1.55 pada baris 1884 untuk mengubah 'SSLv3 TLSv1' menjadi 'SSLv3'.

OSX 10.10.1

Michael Cook
sumber
-1

bekerja untukku

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