versión_ SSL no válida especificada en /usr/share/perl5/IO/Socket/SSL.pm línea 332

9

Desde que actualicé mi PC de (k) ubuntu 12.04 a 12.10, recibo este mensaje de error cuando intento enviar un correo electrónico usando sendemail.

Instalar una versión anterior de IO :: Socket :: SSL no es una opción. Tengo la impresión de que todo funciona como debería y el mensaje es solo una advertencia.

¿Cómo puedo deshacerme de este mensaje?


SSL.pm

Creo que lo siguiente tiene que ver con el problema (/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;

enviar correo electrónico

Y al final de sendemail, creo que se trata de aquí en el código:

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
fuente
1
Lo resolvió por el momento cambiando 'SSLv3 TLSv1' en la línea de correo de Sendemail 1907 a 'SSLv3', pero editar archivos instalados desde un paquete es malo .
jippie
En la nueva versión de Debian sigo teniendo este problema, pero ahora no puedo encontrar esa línea ... Ninguna de las otras soluciones está funcionando, excepto ignorar tls. = (
Luciano Andress Martini

Respuestas:

8

Hay un informe de error en el sitio web del rastreador de errores de Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

También establece una solución alternativa:

especificar -o tls=nocomo una opción en la línea de comando.

Gracias @Manolo Díaz en debian.org.

jippie
fuente
como solución alternativa está bien, pero se necesita una solución.
Znik
4

En realidad, solo tome el valor predeterminado (elimine el segundo parámetro). Consulte https://metacpan.org/pod/IO::Socket::SSL (busque SSL_version). El valor predeterminado es SSLv23:! SSLv3:! SSLv2.

Modifiqué la línea 1906 en v1.56 para leer

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

(solo comentando la línea original)

varilla
fuente
3

La solución más fácil es:

Reemplazar:

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

Con:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
NguliMkaree
fuente
Mi problema es que esta solución rompe Net :: Twitter
Dave Jacoby
1
1690 line /usr/share/perl5/IO/Socket/SSL.pm en Ubuntu 14.04
Rahul Patil
Dado que algunas personas todavía consideran la solución en esta respuesta como la solución y se quejan del error en IO :: Socket :: SSL: El problema no está en IO :: Socket :: SSL pero es un error en sendEmail, que no se ha mantenido desde entonces. 2009 . En detalle: la sintaxis para SSL_version es incorrecta y ni siquiera era válida en el momento en que se escribió el código, solo IO :: Socket :: SSL no se quejó en ese momento. La solución es simplemente eliminar la configuración de SSL_version de sendemail. Consulte también rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich
2

También una solución alternativa , haga esto si es necesario enviar desde smtp.gmail.com:

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

como solución temporal

Coert van Gemeren
fuente
2

Si aún recibe un error de certificado después de corregir la versión SSL como se muestra arriba, debe deshabilitar la verificación del certificado:

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {
Nick Constantine
fuente
No he visto el problema por mucho tiempo y el paquete ubuntu se ha solucionado mientras tanto. El primer intento de solucionar este problema debe ser parchear el sistema / usar la mayoría de las versiones actuales del software. Sin embargo, la solución alternativa es interesante desde otro punto de vista, thnx.
jippie
0
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {<br>

funciona en debian wheezy con sendEmail 1.56-2 y libio-socket-ssl-perl 1.76-2 y

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

funciona con ... / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 en Ubuntu.

Este ha sido un problema en los repositorios de Ubuntu y Debian durante más de un año.

kumogami
fuente
0

Para solucionar esto, edité sendEmail-v1.55 en la línea 1884 para cambiar 'SSLv3 TLSv1' a 'SSLv3'.

OSX 10.10.1

Michael Cook
fuente
-1

trabajó para mi

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