- ベストアンサー
POP3SへのTLS1.2接続方法
- SSL3.0の脆弱性回避のために、POP3Sの接続をTLS接続に切り替えたいのですが、エラーが発生します。
- Windowsクライアントで利用できるTLS1.2接続可能なメールソフトはありますか?
- opensslの暗号化プロトコルにTLS1.0を追加することは可能でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
試しに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ともに受け入れます。
その他の回答 (1)
- hanabutako
- ベストアンサー率54% (492/895)
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()の値もログに出すようにするとか。
お礼
補足コメントとお礼コメントの意味がわかっておらず、補足コメントのみ記載していました。 回答No.2を含め、この問題が解決でき感謝しております。 次回のリリース(10.1)で、実装されているOpenSSLに変更が入り 正常に接続できるようになるか、しばらく様子を見ようかと思います。 ありがとうございました。
補足
回答ありがとうございます。勉強になります。 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 と、出力されています。 もしお時間があれば助言をお願い致します。
お礼
検証までして頂いて恐縮です。ありがとうございます。 portsからopensslを入れて正常動作する事は確認できました。 あと、tls-version = TLSv1の間違い指摘もありがとうございます。 これだと、セキュリティを高めるどころか下げてしまいますね...。 この回答を頂く間に、dovecot2を入れて試してみたところ、 正常にTLSv1で接続する事ができました。 細かい設定ができますが、qpopperの方が設定が、わかりやすい感じですが、 開発が継続しているソフトという事もあり、dovecot2への移行も視野に入れようかとも 思っています。 質問してとても有意義なやり取りができ、大変感謝しております。 ありがとうございました。