/usr/share/perl5/IO/Socket/SSL.pm行332で指定されたSSL_versionが無効です


9

PCを(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の終わりでは、コードのここにあると思います:

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 『「にSSLv3のTLSv1'inのsendEmailライン1907』を変更することにより、当分の間、それを解決しますが、パッケージからインストールされたファイルを編集することで悪いです
ジッピー2012年

新しいdebianバージョンではまだこの問題が発生していますが、その行を見つけることができません..... tlsを無視することを除いて、他の解決策はどれも機能していません。=(
Luciano Andress Martini

回答:


8

Debianのバグ追跡Webサイトにバグレポートがあります:http : //bugs.debian.org/cgi-bin/bugreport.cgi? bug= 679911

また、回避策についても述べています。

-o tls=noコマンドラインでオプションとして指定します。

debian.orgの@ManoloDíazに感謝します。


回避策としては問題ありませんが、修正が必要です。
Znik

4

実際には、デフォルトを使用します(2番目のパラメーターを削除します)。https://metacpan.org/pod/IO::Socket::SSL(SSL_versionを検索)を参照してください。デフォルトはSSLv23:!SSLv3:!SSLv2です。

私はv1.56の1906行目を読むように変更しました

#        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

私の問題は、この修正プログラムは、ネット::ツイッターを壊すことである
デイブ・ジャコビー

1
1690行/usr/share/perl5/IO/Socket/SSL.pm in Ubuntu 14.04
Rahul Patil

一部の人々はまだこの回答の回避策を修正と見なしており、IO :: Socket :: SSLのバグについて不平を言っています:問題はIO :: Socket :: SSLにはありませんが、sendEmailのバグであり、それ以降メンテナンスされていません2009。詳細:SSL_versionの構文は間違っており、コードが作成された時点では無効でした。IO:: Socket :: SSLのみがそのとき文句を言いませんでした。修正は、sendmailからSSL_versionの設定を削除することです。rt.cpan.org/Public/Bug/Display.html?id=77401も参照してください。
Steffen Ullrich 2015


2

上記のようにSSLバージョンを修正した後も証明書エラーが発生する場合は、証明書チェックを無効にする必要があります。

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

私自身はこの問題を長い間見ていませんでしたが、その間にubuntuパッケージは修正されました。この問題を修正する最初の試みは、システムにパッチを適用するか、ソフトウェアの最新バージョンを使用することです。代わりの解決策は、他の観点から見ても興味深いものです。
ジッピー2016年

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

sendEmail 1.56-2およびlibio-socket-ssl-perl 1.76-2を使用してdebian wheezyで動作し、

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

…/ IO / Socket / SSL.pm:1.74 sendEmail:1.56でUbuntuで動作します。

これは、ubuntuとdebianリポジトリで1年以上問題となっています。


0

これを修正するために、1884行でsendEmail-v1.55を編集して「SSLv3 TLSv1」を「SSLv3」に変更しました。

OSX 10.10.1


-1

私のために働いた

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2')) {
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.