Ungültige SSL-Version, angegeben in /usr/share/perl5/IO/Socket/SSL.pm Zeile 332


9

Seit ich meinen PC von (k) ubuntu 12.04 auf 12.10 aktualisiert habe, erhalte ich diese Fehlermeldung, wenn ich versuche, eine E-Mail mit zu senden sendemail.

Die Installation einer älteren Version von IO :: Socket :: SSL ist keine Option. Ich habe den Eindruck, dass alles so funktioniert, wie es sollte, und die Nachricht ist nur eine Warnung.

Wie kann ich diese Nachricht entfernen?


SSL.pm

Ich denke, das Folgende hat mit dem Problem zu tun (/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;

E-Mail senden

Und am Ende der Sendemail denke ich, dass es hier im Code ungefähr so ​​ist:

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
Es wurde vorerst behoben, indem "SSLv3 TLSv1" in der Sendemail-Zeile 1907 in "SSLv3" geändert wurde. Das Bearbeiten von Dateien, die von einem Paket installiert wurden, ist jedoch fehlerhaft .
Jippie

In der neuen Debian-Version habe ich immer noch dieses Problem, aber ich kann diese Zeile jetzt nicht finden ..... Keine der anderen Lösungen funktioniert, außer tls zu ignorieren. = (
Luciano Andress Martini

Antworten:



4

Nehmen Sie einfach die Standardeinstellung (entfernen Sie den zweiten Parameter). Siehe https://metacpan.org/pod/IO::Socket::SSL (Suche nach SSL_version). Der Standardwert ist SSLv23 :! SSLv3 :! SSLv2.

Ich habe Zeile 1906 in Version 1.56 geändert, um sie zu lesen

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

(nur die ursprüngliche Zeile auskommentieren)


3

Einfachere Problemumgehung ist:

Ersetzen:

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

Mit:

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

Mein Problem ist, dass dieses Update Net :: Twitter
Dave Jacoby

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

Da einige Leute die Problemumgehung in dieser Antwort immer noch als Fehlerbehebung betrachten und sich über den Fehler in IO :: Socket :: SSL beschweren: Das Problem liegt nicht in IO :: Socket :: SSL, sondern ist ein Fehler in sendEmail, der seitdem nicht mehr gewartet wird 2009 . Im Detail: Die Syntax für SSL_version ist falsch und zum Zeitpunkt des Schreibens des Codes noch nicht einmal gültig. Nur IO :: Socket :: SSL hat sich damals nicht beschwert. Das Update besteht lediglich darin, die Einstellung von SSL_version aus der Sendemail zu entfernen. Siehe auch rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich

2

Führen Sie dies auch aus, wenn Sie Folgendes senden möchten smtp.gmail.com:

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

als vorübergehende Lösung.


2

Wenn nach dem Beheben der SSL-Version wie oben gezeigt immer noch ein Zertifikatfehler angezeigt wird, müssen Sie die Zertifikatprüfung deaktivieren:

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

Ich habe das Problem selbst seit Ewigkeiten nicht mehr gesehen und das Ubuntu-Paket wurde in der Zwischenzeit behoben. Der erste Versuch, dieses Problem zu beheben, sollte darin bestehen, das System zu patchen / die meisten aktuellen Versionen der Software zu verwenden. Die alternative Lösung ist jedoch unter einem anderen Gesichtspunkt interessant, danke.
Jippie

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

funktioniert auf debian wheezy mit sendEmail 1.56-2 und libio-socket-ssl-perl 1.76-2 und

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

funktioniert mit… / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 in Ubuntu.

Dies ist seit über einem Jahr ein Problem bei Ubuntu- und Debian-Repos.


0

Um dies zu beheben, habe ich sendEmail-v1.55 in Zeile 1884 bearbeitet, um 'SSLv3 TLSv1' in 'SSLv3' zu ändern.

OSX 10.10.1


-1

arbeitete für mich

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.