こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

POP3SへTLS1.2接続する方法

SSL3.0の脆弱性を回避する目的で、POP3Sの接続をTLS接続に切り替えようと思っているのですが、エラーが発生し上手くいきません。
openssl ciphers -vで確認したところ、プロトコルがSSLv3とTLSv1.2しかないようで、

# openssl s_client -tls1_2 -connect localhost:995 -> ○
# openssl s_client -tls1_1 -connect localhost:995 -> ×
# openssl s_client -tls1 -connect localhost:995 -> ×
# openssl s_client -ssl3 -connect localhost:995 -> ○
# openssl s_client -ssl2 -connect localhost:995 -> ×

という結果となりました。

Windowsクライアントよりメールソフト(becky!)を利用し接続すると、接続に失敗し下記エラーがでます。
認証設定が「over TLS 1.0」でしたので、TLS1.0接続の為、上記テスト結果の-tls1と同じ状況なのかと思っています。

そこで、お知恵をお借りしたいのですが、

1. WindowsクライアントよりTLS1.2接続でpop3s接続できるメールソフトは存在するのでしょうか。
2. opensslの暗号化プロトコルにTLS1.0を追加する事は可能でしょうか。

お知恵をお持ちでしたらお助け頂けませんでしょうか。
宜しくお願い致します。

[エラー内容]
qpopper[3102]: TLS handshake Error
qpopper[3102]: TLS/SSL Handshake failed: -1

[qpopper.config]
set clear-text-password = always
set reverse-lookup = false
set tls-support = alternate-port
set tls-private-key-file = /usr/local/etc/apache22/ssl.key/server.key
set tls-server-cert-file = /usr/local/etc/apache22/ssl.crt/server.crt
set shy = true

[環境]
qpopper-4.1.0_3
OpenSSL 1.0.1e-freebsd
FreeBSD 10R

投稿日時 - 2014-10-21 17:22:14

QNo.8798283

困ってます

質問者が選んだベストアンサー

試しにqpopperの環境をjailに作ってみて調べてみました。
inetd.confにこういう設定を追加して、inetdから起動させて検証しました。
pop3s stream tcp nowait root /usr/local/libexec/qpopper qpopper -f /usr/local/etc/qpopper.config

さて、詳細は追えていませんが、どうもFreeBSDに同梱されているOpenSSLに何らかの不具合があるように思います。ためしに、ports版のopensslを入れて、それとリンクさせてみましたが、それだとTLSv1,v1.1ともにつながります。例えば、/etc/make.confにWITH_OPENSSL_PORT=yesなどを書いておくとportsのopensslを使ってくれるはずです。パッケージではなくportsを使わないといけないのが、パッケージだけで環境を作っていたらちょっとあれですが。

ちなみに、SSL3を使いたくない場合、set tls-version = TLSv1と設定するのは間違っていると思います。ソースを見る限り、こうするとTLSv1 methodを使うようにしてくるので、これだとTLS 1.2などで追加された強力な暗号を使えるクライアントが接続してきても強制的にTLS 1.0にダウングレードさせられます。
正しくは、set tls-version = defaultにした上で、set tls-options = 0x03000000でしょう。ちなみに、/usr/include/openssl/ssl.hの次の行を踏まえての設定です。
#define SSL_OP_NO_SSLv2 0x01000000L
#define SSL_OP_NO_SSLv3 0x02000000L
こうすると、SSL2、SSL3を禁止して、TLS 1.0, 1.1, 1.2ともに受け入れます。

投稿日時 - 2014-10-24 22:42:52

お礼

検証までして頂いて恐縮です。ありがとうございます。
portsからopensslを入れて正常動作する事は確認できました。
あと、tls-version = TLSv1の間違い指摘もありがとうございます。
これだと、セキュリティを高めるどころか下げてしまいますね...。

この回答を頂く間に、dovecot2を入れて試してみたところ、
正常にTLSv1で接続する事ができました。
細かい設定ができますが、qpopperの方が設定が、わかりやすい感じですが、
開発が継続しているソフトという事もあり、dovecot2への移行も視野に入れようかとも
思っています。

質問してとても有意義なやり取りができ、大変感謝しております。
ありがとうございました。

投稿日時 - 2014-10-26 12:06:52

このQ&Aは役に立ちましたか?

20人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

1. WindowsクライアントよりTLS1.2接続でpop3s接続できるメールソフトは存在するのでしょうか。

Thunderbirdはnssを裏で使っているはずで、nssはTLS1.2くらい話せると思います。
SylpheedはOpenSSL (あるいはGnu TLS) を使っているはずなので、TLS1.2を話せると思います。
他にも、Unixと同じソフトが使えるようなものを探すと良いのではないでしょうか。

2. opensslの暗号化プロトコルにTLS1.0を追加する事は可能でしょうか。

openssl cipher -vで出るあれは別にTLS1.0に対応しているとかしていないという話ではないと思うのですが。
例えば、TLS v1.0とされているものもSSLv3として出てきますよね。
https://www.openssl.org/docs/apps/ciphers.html

もしこれが問題だとすると、サーバー側もopensslで動かしてみて、openssl s_clientでつなげますか?
% openssl s_server -cert /usr/local/etc/apache22/ssl.crt/server.crt -key /usr/local/etc/apache22/ssl.key/server.key

% openssl s_client -tls1 -connect localhost:4433


qpopperのソース (popper/pop_tls_openssl.c) をざっと見た感じだと、SSLv23でデフォルト受け付けるはずなので、変なオプションをtls-optionにつけていない限り、TLS v1.0での接続を許しそうに思うのですが。

差し支えなければqpopperにつないだ時のこれの結果を見ないと、これ以上はなんとも言えないですね。
% openssl s_client -tls1 -connect localhost:995

あとできることは、set debug = trueしてqpopperのログを確認するぐらいでしょうか。
ついでにpopper/pop_tls_openssl.cをいじってERR_error_string()の値もログに出すようにするとか。

投稿日時 - 2014-10-22 00:12:13

補足

回答ありがとうございます。勉強になります。

1. TLS1.2対応クライアント

ThunderbirdとSylpheedですね。ありがとうございます。
Thunderbirdを利用してみたところ、接続できました。
ですが、set tls-version = TLSv1 と設定を変更すると接続できなくなってしまいました。

2. opensslの暗号化プロトコル追加

ciphers -v のプロトコルしか使えないのかと思っていました。

> 例えば、TLS v1.0とされているものもSSLv3として出てきますよね。
TLSv1 などと出力されるものかと思っていました。なるほど。

>サーバー側もopensslで動かしてみて、openssl s_clientでつなげますか?
正常に接続できることを確認しました。

ということは、クライアントの問題ではなさそうですね。

> 差し支えなければqpopperにつないだ時のこれの結果

接続したときの出力を抜粋します。

1212351836:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:596:

この出力が4433/tcpと接続した時と明らかに違う出力です。
messagesには、

qpopper[25311]: TLS handshake Error
qpopper[25311]: TLS/SSL Handshake failed: -1

と、出力されています。

もしお時間があれば助言をお願い致します。

投稿日時 - 2014-10-22 20:54:35

お礼

補足コメントとお礼コメントの意味がわかっておらず、補足コメントのみ記載していました。
回答No.2を含め、この問題が解決でき感謝しております。
次回のリリース(10.1)で、実装されているOpenSSLに変更が入り
正常に接続できるようになるか、しばらく様子を見ようかと思います。

ありがとうございました。

投稿日時 - 2014-10-26 12:10:22

-広告-
-広告-
-広告-
-広告-