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

Depuis que j'ai mis à jour mon PC de (k) ubuntu 12.04 à 12.10 je reçois ce message d'erreur en essayant d'envoyer un email en utilisant sendemail .

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

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


SSL.pm

Je pense que le ci-dessous 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 à propos d'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 } 

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

Il indique également une solution de contournement:

spécifiez -o tls=no comme option sur la command line.

Merci @Manolo Díaz sur debian.org.

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 

En outre, une solution de contournement , si cela est nécessaire pour envoyer à partir de smtp.gmail.com :

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

comme solution temporaire.

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

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

En fait, il suffit de prendre la valeur par défaut (supprimer le deuxième paramètre). Voir https://metacpan.org/pod/IO::Socket::SSL (search de 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)) { 

(juste commentant la ligne originale)

 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 repos ubuntu et debian depuis plus d'un an.

Pour corriger cela, j'ai édité sendEmail-v1.55 à la ligne 1884 pour changer 'SSLv3 TLSv1' en 'SSLv3'.

OSX 10.10.1