SSL_version non valide spécifiée à /usr/share/perl5/IO/Socket/SSL.pm ligne 332


9

Depuis que j'ai mis à niveau mon PC de (k) ubuntu 12.04 à 12.10, je reçois ce message d'erreur lorsque j'essaie d'envoyer un e-mail en utilisant sendemail.

L'installation d'une ancienne version de IO :: Socket :: SSL n'est pas une option. J'ai l'impression que tout fonctionne comme il se doit et le message n'est qu'un avertissement.

Comment puis-je me débarrasser de ce message?


SSL.pm

Je pense que ce qui suit a à voir avec le problème (/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

Et à la fin de sendemail, je pense que c'est à peu près ici dans le code:

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
Résolu pour le moment en remplaçant «SSLv3 TLSv1» dans la ligne d'envoi 1907 par «SSLv3», mais la modification des fichiers installés à partir d'un package est mauvaise .
jippie

Dans la nouvelle version de Debian, j'ai toujours ce problème, mais je ne parviens plus à trouver cette ligne ..... Aucune des autres solutions ne fonctionne, sauf en ignorant tls. = (
Luciano Andress Martini

Réponses:


8

Il existe un rapport de bogue sur le site Web de suivi des bogues de Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

Il indique également une solution de contournement:

spécifier -o tls=noen option sur la ligne de commande.

Merci @Manolo Díaz sur debian.org.


comme solution de contournement, c'est bien, mais une correction est nécessaire.
Znik

4

En fait, prenez simplement la valeur par défaut (supprimez le deuxième paramètre). Voir https://metacpan.org/pod/IO::Socket::SSL (recherchez SSL_version). La valeur par défaut est SSLv23:! SSLv3:! SSLv2.

J'ai modifié la ligne 1906 en v1.56 pour lire

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

(commentant simplement la ligne d'origine)


3

Solution de contournement plus simple:

Remplacer:

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

Avec:

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

Mon problème est que ce correctif casse Net :: Twitter
Dave Jacoby

1
Ligne 1690 /usr/share/perl5/IO/Socket/SSL.pm dans Ubuntu 14.04
Rahul Patil

Étant donné que certaines personnes considèrent toujours la solution de contournement dans cette réponse comme le correctif et se plaignent du bogue dans IO :: Socket :: SSL: Le problème n'est pas dans IO :: Socket :: SSL mais est un bogue dans sendEmail, qui n'est pas entretenu depuis 2009 . En détail: la syntaxe de SSL_version est erronée et n'était même pas valide au moment où le code a été écrit, seul IO :: Socket :: SSL ne s'est pas plaint alors. Le correctif consiste simplement à supprimer le paramètre de SSL_version de sendemail. Voir aussi rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich


2

Si vous obtenez toujours une erreur de certificat après avoir corrigé la version SSL comme indiqué ci-dessus, vous devez désactiver la vérification des certificats:

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

Je n'ai pas vu le problème moi-même depuis des lustres et le paquet ubuntu a été corrigé entre-temps. La première tentative de résolution de ce problème devrait être de corriger le système / d'utiliser la plupart des versions actuelles du logiciel. La solution alternative est cependant intéressante d'un autre point de vue, thnx.
jippie

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

fonctionne sur debian wheezy avec sendEmail 1.56-2 et libio-socket-ssl-perl 1.76-2 et

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

fonctionne avec… / IO / Socket / SSL.pm: 1,74 sendEmail: 1,56 dans Ubuntu.

Cela a été un problème dans les dépôts Ubuntu et Debian depuis plus d'un an.


0

Pour résoudre ce problème, j'ai modifié sendEmail-v1.55 à la ligne 1884 pour remplacer «SSLv3 TLSv1» par «SSLv3».

OSX 10.10.1


-1

travaillé pour moi

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.