versão SSL_ inválida especificada na /usr/share/perl5/IO/Socket/SSL.pm linha 332

9

Desde que atualizei meu PC do (k) ubuntu 12.04 para 12.10, recebo esta mensagem de erro ao tentar enviar um email usando sendemail.

Instalar uma versão mais antiga do IO :: Socket :: SSL não é uma opção. Tenho a impressão de que tudo funciona como deveria e a mensagem é apenas um aviso.

Como posso me livrar dessa mensagem?


SSL.pm

Eu acho que o abaixo tem a ver com o 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 email

E no final do sendemail, acho que é sobre aqui no 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
fonte
11
Resolva-o por enquanto, alterando 'SSLv3 TLSv1' na linha sendemail 1907 para 'SSLv3', mas editar arquivos instalados a partir de um pacote é ruim .
jippie
Na nova versão debian, ainda estou tendo esse problema, mas agora não consigo encontrar essa linha ..... Nenhuma das outras soluções está funcionando, exceto ignorar tls. = (
Luciano Andress Martini

Respostas:

8

Há um relatório de bug no site do rastreador de erros do Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911

Ele também indica uma solução alternativa:

especifique -o tls=nocomo uma opção na linha de comandos.

Obrigado @Manolo Díaz no debian.org.

jippie
fonte
como solução alternativa, tudo bem, mas é necessário corrigir.
Znik
4

Na verdade, basta usar o padrão (remova o segundo parâmetro). Consulte https://metacpan.org/pod/IO::Socket::SSL (pesquise SSL_version). O padrão é SSLv23:! SSLv3:! SSLv2.

Modifiquei a linha 1906 na v1.56 para ler

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

(apenas comentando a linha original)

Cajado
fonte
3

A solução mais fácil é:

Substituir:

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

Com:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
NguliMkaree
fonte
Meu problema é que essa correção quebra Net :: Twitter
Dave Jacoby
11
1690 line /usr/share/perl5/IO/Socket/SSL.pm no Ubuntu 14.04
Rahul Patil
Como algumas pessoas ainda consideram a solução alternativa nesta resposta como a correção e reclamam sobre o bug no IO :: Socket :: SSL: O problema não está no IO :: Socket :: SSL, mas é um bug no sendEmail, que não é mantido desde 2009 . Em detalhes: a sintaxe para SSL_version está incorreta e nem era válida no momento em que o código foi gravado, apenas IO :: Socket :: SSL não reclamou. A correção é apenas para remover a configuração de SSL_version do sendemail. Veja também rt.cpan.org/Public/Bug/Display.html?id=77401 .
Steffen Ullrich
2

Também é uma solução alternativa , faça isso se for necessário enviar de smtp.gmail.com:

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

como solução temporária.

Coert van Gemeren
fonte
2

Se você ainda receber um erro de certificado após corrigir a versão SSL, conforme mostrado acima, precisará desativar a verificação de certificado:

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {
Nick Constantine
fonte
Não vejo o problema há muito tempo e o pacote ubuntu foi corrigido nesse meio tempo. A primeira tentativa de corrigir esse problema deve consistir em corrigir o sistema / usar as versões mais recentes do software. A solução alternativa é interessante de outro ponto de vista, thnx.
jippie
0
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3')) {<br>

funciona no debian wheezy com sendEmail 1.56-2 e libio-socket-ssl-perl 1.76-2 e

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

trabalha com… / IO / Socket / SSL.pm: 1,74 sendEmail: 1,56 no Ubuntu.

Este tem sido um problema nos repositórios ubuntu e debian há mais de um ano.

kumogami
fonte
0

Para corrigir isso, editei sendEmail-v1.55 na linha 1884 para alterar 'SSLv3 TLSv1' para 'SSLv3'.

OSX 10.10.1

Michael Cook
fonte
-1

trabalhou para mim

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