Niepoprawna wersja_ SSL określona w /usr/share/perl5/IO/Socket/SSL.pm wiersz 332

9

Ponieważ zaktualizowałem komputer z wersji (k) ubuntu 12.04 do 12.10, ten komunikat o błędzie pojawia się przy próbie wysłania wiadomości e-mail za pomocą sendemail.

Instalowanie starszej wersji IO :: Socket :: SSL nie jest opcją. Mam wrażenie, że wszystko działa tak, jak powinno, a wiadomość jest tylko ostrzeżeniem.

Jak mogę pozbyć się tej wiadomości?


SSL.pm

Myślę, że poniższe informacje dotyczą problemu (/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;

wysłać email

I na koniec sendemail myślę, że chodzi o to tutaj w kodzie:

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
źródło
1
Na razie to rozwiązałem, zmieniając „SSLv3 TLSv1” w linii sendemail 1907 na „SSLv3”, ale edytowanie plików zainstalowanych z pakietu jest złe .
jippie
W nowej wersji Debiana nadal mam ten problem, ale nie mogę teraz znaleźć tej linii ... Żadne z innych rozwiązań nie działa, z wyjątkiem ignorowania tls. = (
Luciano Andress Martini,

Odpowiedzi:

8

Raport o błędzie znajduje się na stronie narzędzia do śledzenia błędów Debiana: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

Zawiera również obejście:

podaj -o tls=nojako opcję w wierszu polecenia.

Dzięki @Manolo Díaz na debian.org.

jippie
źródło
jako obejście jest w porządku, ale konieczna jest poprawka.
Znik
4

Właściwie po prostu weź domyślne (usuń drugi parametr). Zobacz https://metacpan.org/pod/IO::Socket::SSL (wyszukaj wersję SSL_). Domyślna wartość to SSLv23:! SSLv3:! SSLv2.

Zmodyfikowałem wiersz 1906 w wersji 1.56, aby przeczytać

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

(tylko komentując oryginalny wiersz)

Pręt
źródło
3

Łatwiejszym obejściem jest:

Zastąpić:

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

Z:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
NguliMkaree
źródło
Mój problem polega na tym, że ta poprawka psuje Net :: Twitter
Dave Jacoby
1
1690 linii /usr/share/perl5/IO/Socket/SSL.pm w Ubuntu 14.04
Rahul Patil
Ponieważ niektóre osoby nadal uważają obejście w tej odpowiedzi za poprawkę i narzekają na błąd w IO :: Socket :: SSL: Problem nie występuje w IO :: Socket :: SSL, ale jest błędem w sendEmail, który jest nieobsługiwany od czasu 2009 . Szczegółowo: składnia dla wersji SSL_version jest niepoprawna i nawet nie była poprawna w momencie pisania kodu, tylko IO :: Socket :: SSL nie narzekało wtedy. Poprawka polega na usunięciu ustawienia SSL_version z sendemail. Zobacz także rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich,
2

Również obejście tego problemu , zrób to, jeśli jest wymagane, aby wysłać z smtp.gmail.com:

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

jako rozwiązanie tymczasowe.

Coert van Gemeren
źródło
2

Jeśli po naprawieniu wersji SSL nadal pojawia się błąd certyfikatu, jak pokazano powyżej, musisz wyłączyć sprawdzanie certyfikatu:

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {
Nick Constantine
źródło
Nie widziałem tego problemu od wieków, a pakiet ubuntu został w międzyczasie naprawiony. Pierwszą próbą rozwiązania tego problemu powinno być załatanie systemu / użycie najnowszej wersji oprogramowania. Alternatywne rozwiązanie jest interesujące z innego punktu widzenia, dzięki.
jippie
0
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {<br>

działa na debian wheezy z sendEmail 1.56-2 i libio-socket-ssl-perl 1.76-2 i

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

współpracuje z… / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 w Ubuntu.

Był to problem w repozytoriach ubuntu i debian od ponad roku.

kumogami
źródło
0

Aby to naprawić, edytowałem sendEmail-v1.55 w linii 1884, aby zmienić „SSLv3 TLSv1” na „SSLv3”.

OSX 10.10.1

Michael Cook
źródło
-1

pracował dla mnie

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {
Virender Punia
źródło