недійсна 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;

відправити лист

І в кінці sendmail я думаю, що мова йде тут про код у коді:

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'in рядка відправлення 1907 на' SSLv3 ', але редагування файлів, встановлених у пакеті, погано .
jippie

У новій версії 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 .
Steffen Ullrich


2

Якщо після виправлення SSLversion, як показано вище, ви отримаєте помилку сертифіката, вам потрібно відключити перевірку сертифікатів:

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

Я не бачив проблеми протягом століть, і пакет ubuntu був виправлений тим часом. Першою спробою виправити цю проблему має бути виправлення системи / використання більшості сучасних версій програмного забезпечення. Альтернативне рішення цікаве з іншої точки зору, хоча, thnx.
jippie

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.