PCを(k)ubuntu 12.04から12.10にアップグレードしたため、sendemail
を使用してメールを送信しようとすると、このエラーメッセージが表示されます。
古いバージョンのIO :: Socket :: SSLをインストールすることはできません。すべて正常に機能し、メッセージは単なる警告であるという印象があります。
このメッセージを削除するにはどうすればよいですか?
以下は問題と関係があると思います(/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 }
Debianのバグ追跡Webサイトにバグレポートがあります: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911
また、回避策についても述べています。
-o tls=no
コマンドラインのオプションとして。
Debian.orgの@ManoloDíazに感謝します。
実際には、デフォルトを使用します(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)) {
(元の行をコメント化するだけ)
より簡単な回避策は次のとおりです。
交換:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
と:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
回避策もあります 、smtp.gmail.com
から送信する必要がある場合は、次のようにします。
/usr/bin/sendemail on line 1907: 'SSLv3 TLSv1' => 'SSLv3'
一時的な解決策として。
上記のようにSSLバージョンを修正した後も証明書エラーが発生する場合は、証明書チェックを無効にする必要があります。
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 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年以上問題となっています。
これを修正するために、1884行でsendEmail-v1.55を編集して「SSLv3 TLSv1」を「SSLv3」に変更しました。
OSX 10.10.1