[ Caps W"a"nderland xrea.com Edition ]
[ Caps W"a"nderland @ So-net ]
[ Special Side of Caps W"a"nderland ]

Caps Wanderland xrea Edition

Stunnel で SMTP/POP3/IMAP4 over SSL

| 参考サイト | 設定手順 | 複数のサーバへアクセス | 証明書の検証 | いくつかの証明書 |

2016年1月28日(木)

stunnel 経由でメールを送受信する場合,avast! アンチウイルス(フリー版)のSSLスキャンを有効にしていると送受信を拒否されることがあります。 stunnel によるメール送受信を avast! のSSLスキャン機能を使って行うための設定手順を [ Mail ] avast! アンチウイルス 11 (2016) + stunnel にまとめました。

2015年12月20日(日)

この日現在リリースされている stunnel に付属する service.conf には, stunnel を Gmail や Google Apps 独自ドメインで利用するための設定例が,コメントアウトの形で記載されています。 その設定方法を用いれば verify = 2(証明書の検証あり)での送受信が可能なので,service.conf を見てメールソフトの設定をすれば大丈夫です。

なお, 手元で試した限りでは Gmail の設定でサーバー名等を変えるだけで,マイクロソフトの Outlook.com や Live.jp, MVNO サービスで有名な mineo でも verify = 2 での運用が可能でしたので,追記しておきます。 なお,connect = サーバー名:ポート名 の「ポート名」は私が適当につけたものなので,各自の環境で振り直してください。

[imap-outlook]
client = yes
accept  = 127.0.0.1:8993
connect = imap-mail.outlook.com:993
verify = 2
CAfile = ca-certs.pem
checkHost = imap-mail.outlook.com
OCSPaia = yes

[smtp-outlook]
client = yes
accept  = 127.0.0.1:8025
connect = smtp-mail.outlook.com:25
CAfile = ca-certs.pem
checkHost = smtp-mail.outlook.com
OCSPaia = yes
protocol = smtp
verify = 2
  

[pop3s-live]
client = yes
accept = 127.0.0.1:4995
connect = pop3.live.jp:995
verify = 2
CAfile = ca-certs.pem
checkHost = pop3.live.jp
OCSPaia = yes

[smtps-live]
client = yes
accept = 127.0.0.1:4465
connect = smtp.live.com:465
CAfile = ca-certs.pem
checkHost = smtp.live.com
OCSPaia = yes
protocol = smtp
  

[pop3s-mineo]
client = yes
accept = 127.0.0.1:6995
connect = pops.mineo.jp:995
checkHost = pops.mineo.jp
CAfile = ca-certs.pem
OCSPaia = yes
verify = 2
  

Zenno.com のサーバーは,verify = 2 には対応していませんが,非公式(自己責任)で TLS に対応しているとされており, POP3 については次の設定で受信できました。

[pop3s-zenno]
client = yes
accept = 127.0.0.1:1110
connect = pop.707.to:995
checkHost = pop.707.to
verify = 0

<2015年12月20日の追記・ここまで>

以下,過去の古い記事


内容が古くなっており,2013年3月現在,この設定だけでは動きません。 2013年月時点では,証明書の検証 について,わたしの手元では次の方法で成功しています。 stunnel.conf の他の部分についても書き換えている箇所がありますが,本質的な部分ではないので省略しています。

  1. verify = 0 として peer-設定名.pem を入手する。GUI の メニュー [ save peer certificates ] から保存するものを選ぶ。
  2. 保存時に出てくる stunnel のダイアログの指示に従って stunnel.conf を書き換える。

手元の stunnel.conf の Gmail の POP3 設定に関する部分は次の通りになっています。

[pop3-gmail]
client = yes
accept  = localhost:110
connect = pop.gmail.com:995
CAfile = peer-pop3-gmail.pem
verify = 3

こまごまとしたことは Slashdor Japan の日記 に書いていることがありますので,そちらもご覧下さい。

<古い情報> 以前から公開している内容

Gmail を POP3/IMAP4 over SSL で使いたいけれど,自分の MUA(メールソフト)が未対応だという場合,Stunnel(Universal SSL Wrapper)を使えば問題は解決します.ここでは「証明書の検証」も行い,偽装サイトに誘導されないよう設定する方法も紹介します(証明書の検証は,肝心の部分なのに,説明していないページが多すぎる.

ぷららなど,他の SMTP/POP3/IMAP4 over SSL を利用するメールサーバにも応用可能ですので頑張って設定ファイルを書いてみましょう.

更新履歴

参考にしたサイト

設定手順

ここでは,管理ツールは [ プログラム ] に表示させ,クラシック [ スタート ] メニューを使う.

  1. Stunnel.org から,最新版の Windows Binary (stunnel-バージョン番号-installer.exe をダウンロードしてインストールする.
  2. [ スタート ] − [ stunnel ] − [ Service install ] を実行する.
  3. [ スタート ] − [ 管理ツール ] − [ サービス ] で "stunnel" を探し, スタートアップの種類が [ 自動 ] になっていることを確認する.
    サービスの確認
  4. [ スタート ] − [ stunnel ] − [ Edit stunnel.conf ] を実行する.
  5. stunnel.conf に以下の変更を加える.
  6. 「少しセキュリティに配慮した設定」は,pop3s の場合,stunnel をインストールした PC から, 同じ PC(127.0.0.1)の 110/tcp にアクセスがあったとき,pop.gmail.com の 995/tcp に渡すように設定しているだけ.imaps,ssmtp も同様. ファイアウォールなどで,もともと 110/tcp,143/tcp,25/tcp が閉じられている場合は「基本的な設定」で良い.
  7. MUA 側の設定を次の内容にあうように変更する(設定例は,メールアドレスが hogehoge@gmail.com,パスワードが damedame の場合で表記).
  8. stunnel.conf を保存する.
  9. stunnel のサービスを起動する.
  10. 動作確認する(ログを見て,Wrapper 機能が有効になっているか確認できる).

複数のサーバへ POP3/IMAP4 over SSL でアクセスする

Gmail 以外にも POP3 over SSL を利用する場合,はアクセスするサーバに対する設定をつくればよい. たとえば次のようにする(上は Gmail 用,下が新たに追加する POP3 サーバ用).

[pop3s]
accept  = 110
connect = pop.gmail.com:995

[pop3s]
accept  = 2110
connect = pop.example.co.jp:995

つまり [pop3s] を複数設定し ポート番号を異なる ものに設定すればよいことになる. SMTP については,Gmail で「アカウントの設定」を行えば,Gmail 用の smtps を常に利用できるので複数の設定をすることにあまり意味はない(と思う).

証明書の検証

おおまかな手順を書くと,次の通り. 途中で openssl.exe が必要になるので,OpenSSLMinGW で必要な物を用意しておく. わたしは(偶然にも)OpenVPN を使っているため,そのなかに入っている openssl.exe を使ってしまった. 本当は,自分自身の手で OpenSSL のソースを MinGW でコンパイルすべき(かつてはそうしていた).

  1. 証明書を Base 64 encoder X509 (.CER) (S) 形式でエクスポートを行い,リネームする.
  2. stunnel.conf の設定を書き換えて,証明書の検証を行うようにする.
  3. 動作確認する.

検証用の証明書の確認

自分がアクセスする POP サーバの証明書の検証に必要な「ルート証明書」を探す. Gmail の場合は,pop.gmail.com にアクセスするので,次のようなコマンドで,必要なルート証明書を調べる. コマンドプロンプトを起動して,次のコマンドを入力する. openssl.exe は,パスが通っていなければ,フルパス(C:\Program Files\ほげほげ...)で指定する必要がある.

openssl.exe s_client -connect pop.gmail.com:995 -showcerts

ずらずらと文字が出力されます.その途中に「Server certificate」という部分があるので, そこに書かれている内容を確認する.上記を実行した場合,かつては

Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc./CN=pop.gmail.com
issuer=/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

というのが出てくるので 「Equifax Secure Certificate Authority」という名前のルート証明書を探して, エクスポートすればよかった.

しかし,2010年9月1日現在は以下の結果になる.このような証明書は Windows「信頼されたルート証明機関」−「証明書」の中に存在しない.

Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority

しかし,もう少し上を見ると,次のような記述がある.

 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Gmail 用サーバで,証明書の設定が変?なのかもしれない. というわけで,かつてと同じ issuer である Equifax Secure Certificate Authority という名前のルート証明書を探してエクスポートすればよいとわかる.

また,送信サーバ(smtp.gmail.com)を利用する場合は,次のコマンドを実行して必要なルート証明書を確認すればよいのだが, 2010年9月1日現在,こちらも pop.gmail.com 同様うまく行かないようだ. ただし,必要なルート証明書は pop.gmail.com と同一になったみたい...

openssl.exe s_client -connect smtp.gmail.com:465 -showcerts

証明書のエクスポート

エクスポートすべき証明書がわかったので,次はその証明書をエクスポートする. ここでは pop.gmail.com で話を進める.

Windows XP Home Edition やその後継,Windows 2000 以降の Professional 及び サーバ製品群, どのバージョンでもできる方法である(Home Edition 系統以外であれば「証明書」のスナップインでも同じことができる).

  1. コントロールパネルや,Internet Explorer のメニューから [ インターネットのプロパティ ] を開く.
  2. [ コンテンツ ] タブの中央にある「証明書」をクリックする.
    インターネットのプロパティ
  3. [ 証明書 ] ダイアログで [ 信頼されたルート証明機関 ] を選び「Equifax Secure Certificate Authority」を選択した状態にして [ エクスポート ] をクリックする.
    証明書
  4. 証明書のエクスポートウィザードに従って,証明書のエクスポートを行う.
    証明書のエクスポート
  5. エクスポートする形式は Base 64 encoded X509 (.CER)(S) を選ぶ.
    証明書のエクスポート
  6. ファイル名を入れる(ここでは c:\gmail.cer で作成).指定するときは,拡張子をつけなくても勝手に追加してくれる.
    証明書のエクスポート
  7. [ 完了 ] して閉じる.
    証明書のエクスポート
    fin
  8. c:\gmail.cer のファイル名を c:\ca.pem に変更する.
    move c:\mail.cer c:\ca.pem
    

再度 stunnel.conf の変更

  1. 作成した c:\ca.pem を,C:\Program Files\stunnel にコピーする.
  2. stunnel.conf で,さらに次の項目を設定する.
  3. stunnel を起動し,動作を確認する.

以上.