неверная версия SSL_version указана в строке /usr/share/perl5/IO/Socket/SSL.pm 332


9

Поскольку я обновил свой компьютер с (k) ubuntu 12.04 до 12.10, я получаю это сообщение об ошибке при попытке отправить электронное письмо с помощью sendemail.

Установка более старой версии IO :: Socket :: SSL не возможна. У меня сложилось впечатление, что все работает как надо, и сообщение - это просто предупреждение.

Как я могу избавиться от этого сообщения?


SSL.pm

Я думаю, что ниже относится к проблеме (/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

И в конце sendemail я думаю, что это здесь в коде:

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
Решил это на данный момент, изменив «SSLv3 TLSv1» в строке отправителя 1907 на «SSLv3», но редактирование файлов, установленных из пакета, плохо .
Джиппи

В новой версии Debian у меня все еще есть эта проблема, но сейчас я не могу найти эту строку ..... Ни одно из других решений не работает, кроме игнорирования tls. = (
Лучано Андресс Мартини

Ответы:


8

На веб-сайте отслеживания ошибок Debian есть отчет об ошибке: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911.

Это также заявляет обходной путь:

указать -o tls=noв качестве опции в командной строке.

Спасибо @Manolo Díaz на debian.org.


В качестве обходного пути это нормально, но необходимо исправить.
Znik

4

На самом деле, просто возьмите значение по умолчанию (удалите второй параметр). См. Https://metacpan.org/pod/IO::Socket::SSL (поиск SSL_version). По умолчанию используется SSLv23:! SSLv3:! SSLv2.

Я изменил строку 1906 в v1.56, чтобы прочитать

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

(просто комментируя оригинальную строку)


3

Более простое решение:

Заменить:

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

С:

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

Моя проблема в том, что это исправление ломает Net :: Twitter
Дейв Джейкоби

1
1690 строка /usr/share/perl5/IO/Socket/SSL.pm в Ubuntu 14.04
Рахул Патил

Так как некоторые люди все еще рассматривают обходной путь в этом ответе как исправление и жалуются на ошибку в IO :: Socket :: SSL: проблема не в IO :: Socket :: SSL, а является ошибкой в ​​sendEmail, которая не поддерживается, поскольку 2009 . Подробно: синтаксис для SSL_version неверен и даже не действовал на момент написания кода, только IO :: Socket :: SSL тогда не жаловался. Исправление - просто удалить настройку SSL_version из sendemail. Смотрите также rt.cpan.org/Public/Bug/Display.html?id=77401 .
Штеффен Ульрих


2

Если вы все еще получаете ошибку сертификата после исправления версии SSL, как показано выше, вам необходимо отключить проверку сертификата:

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

Я давно не видел эту проблему, и пакет ubuntu был исправлен в это время. Первая попытка исправить эту проблему должна состоять в исправлении системы / использовании самых последних версий программного обеспечения. Хотя альтернативное решение интересно с другой точки зрения, спасибо.
Джиппи

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

работает на Debian Wheezy с sendEmail 1.56-2 и libio-socket-ssl-perl 1.76-2 и

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

работает с… / IO / Socket / SSL.pm: 1.74 sendEmail: 1.56 в Ubuntu.

Это было проблемой в репозиториях Ubuntu и Debian уже более года.


0

Чтобы исправить это, я отредактировал sendEmail-v1.55 в строке 1884, чтобы изменить «SSLv3 TLSv1» на «SSLv3».

OSX 10.10.1


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.