DeleGateを使い HTTP,FTP,SMTP,POP3,IMAPを SSL化する方法

作成日:2006.05.19

 DeleGate は産総研の佐藤豊さんが開発している多機能ゲートウェイ/プロキシサーバである。
 以前、DeleGateを使って AN HTTPDで SSL通信するで Webサーバを SSL化する方法を紹介した。その後(9.0.1以降のバージョン)、DeleGateは TLS/SSLの設定が単純化、統一化され、HTTPだけでなく、FTP, SMTP, POP3, IMAPなどどのプロトコルも同様な方法で簡単に設定が可能になった。
 参考ページ:http://i-red.info/docs/tls.html
 その原文:http://www.delegate.org/delegate/tls/
 ここでは、
(a) サーバのSSL化(SSLプロキシ)
 非SSLな各種サーバを DeleGateを使って統一的に SSL化する
┏━━━━┓                          ┏━━━━┓  ┏━━━━┓
┃ SSL    ┣──── Internet ───→┫DeleGate┣→┫ 非SSL  ┃
┃ クライアント ┃                          ┃ SSL化  ┃  ┃ サーバ ┃
┗━━━━┛                          ┗━━━━┛  ┗━━━━┛
(b) クライアントのSSL化
 非SSLなクライアントを DeleGateを使って統一的に SSL化する
┏━━━━┓  ┏━━━━┓                          ┏━━━━┓
┃ 非SSL  ┣→┫DeleGate┣──── Internet ───→┫ SSL    ┃
┃ クライアント ┃  ┃ SSL化  ┃                          ┃ サーバ ┃
┗━━━━┛  ┗━━━━┛                          ┗━━━━┛
について解説する。
 なお、DeleGateの新しいバージョンで従来の設定方法も問題なく動作するが、新しい方が10倍ほどパフォーマンスがよくなっているそうである。
  1. DeleGateのダウンロード、解凍
    下記 URLからDeleGateの最新版プログラムをダウンロードする。
     http://www.delegate.org/anonftp/DeleGate/bin/windows/

    2006/3末 現在、9.1.1 が安定版である。latest ディレクトリにある最新版は開発版のことがある。

    ダウンロードした dg9_1_1.zip を C:\Program Files\DeleGate に解凍する。
    (注) DGROOT がデフォルトで /Program Files/DeleGate となっているので勝手な場所に置いてはいけない(D:\Program Files\DeleGate など C 以外のドライブでも可)。勝手な場所に置いたときは cfgファイルの中に以下のようにDGROOT行を追加すること。
     DGROOT="D:/Program Files/DeleGate/"

  2. DeleGate実行用ファイルの作成
    C:\Program Files\DeleGate に delegate-xxx.batファイル(xxxは http/ftp/smtp/pop3/imapなど)を作成する。例えば delegate-http.bat の内容は以下の1行である(dg9_1_1.exeの箇所はバージョンに合わせて適宜変更すること)。
       dg9_1_1.exe +=delegate-http.cfg

    次に C:\Program Files\DeleGate に delegate-xxx.cfgファイルを作成する。以下は DeleGateと各サーバが同一ホスト上で動作するときの設定の一例であるが、通常は例示した cfgファイルを全く変更せずに使えるはずである(管理者メールアドレスは自分のものに変更すること)。DeleGateとサーバが別ホストで動作するときは "localhost" となっている箇所を、サーバ機のプライベートIPアドレスに変更する。

    (2-1)HTTP
    HTTP : ポート 80
    HTTPS: ポート443
    ┏━━━━┓                       443┏━━━━┓    80┏━━━━┓
    ┃ ブラウザ ┣─── Internet ────→┫DeleGate┣──→┫  HTTP  ┃
    ┃        ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-http.cfgファイル
    --------
    STLS=fcl
    -P443
    SERVER=https
    MOUNT="/* http://localhost/*"
    # 普通は上記のように全ドキュメントをSSL化するのは無意味であり、
    # パスワードを入力したり、機密情報を表示するページなど、
    # 特定のディレクトリ下(例えば以下のように /abc)のみSSL化する。
    # 複数ディレクトリあるときは MOUNT行を複数設定する
    #MOUNT="/abc/* http://localhost/abc/*"
    #MOUNT="/xyz/* http://localhost/xyz/*"
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    
    (2-2)FTP
    FTP : ポート 21
    FTPS: ポート990
    ┏━━━━┓                       990┏━━━━┓    21┏━━━━┓
    ┃ FTPS   ┣─── Internet ────→┫DeleGate┣──→┫  FTP   ┃
    ┃ クライアント ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-ftp.cfgファイル
    --------
    STLS=fcl
    -P990
    SERVER=ftp
    MOUNT="/* ftp://localhost/*"
    # クライアントによっては、以下のように仮のディレクトリ(例abc, 任意名称可)を
    # 設定した方がよいかもしれない。
    # この場合、クライアントでリモートの初期フォルダに設定すること
    #MOUNT="/abc/* ftp://localhost/*"
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    --------
    クライアント側は PASV+Explicit(SSL/TLS)で試すとよい
    
    【FTP その2】
    FTP : ポート10021
    FTPS: ポート21および990同時使用可
    ┏━━━━┓                    21,990┏━━━━┓ 10021┏━━━━┓
    ┃FTP/FTPS┣─── Internet ────→┫DeleGate┣──→┫  FTP   ┃
    ┃ クライアント ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-ftp.cfgファイル
    --------
    STLS=fcl
    #STLS=-fcl # "-"をつけると SSL未対応 FTPクライアント(FFFTP等)でポート21/990にアクセスすると通常の FTP接続になる
    -P21,990
    SERVER=ftp
    MOUNT="/* ftp://localhost:10021/*"
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    
    (2-3)SMTP
    SMTP : ポート 25
    SMTPS: ポート465
    ┏━━━━┓                       465┏━━━━┓    25┏━━━━┓
    ┃ メーラ ┣─── Internet ────→┫DeleGate┣──→┫  SMTP  ┃
    ┃        ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-smtp.cfgファイル
    --------
    STLS=fcl
    -P465
    SERVER=smtp://localhost
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    
    (2-4)POP3
    POP3 : ポート110
    POP3S: ポート995
    ┏━━━━┓                       995┏━━━━┓   110┏━━━━┓
    ┃ メーラ ┣─── Internet ────→┫DeleGate┣──→┫  POP3  ┃
    ┃        ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-pop3.cfgファイル
    --------
    STLS=fcl
    -P995
    SERVER=pop
    MOUNT="* pop://localhost/*"
    #MOUNT="//*%S/%S pop://localhost/*%(1)@%(0)" #アカウントに @ を含むPOPサーバではこちらを使う
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    
    (注)第三者中継防止策として POP Before SMTPが使われることがある。POP3サーバにアクセスしてきた IPアドレスのホストに対して送信を許可する仕組みであるが、DeleGateに限らずプロキシが入った構成では、POP3サーバにアクセスしてきたのはメーラが動作しているユーザのホストではなく、プロキシが動作しているホスト(多くの場合、127.0.0.1)と判断され、不正中継を許す結果になってしまうので要注意である(POP Before SMTPの欠陥)。SMTP AUTHが可能なメールサーバを使えばこの問題は回避できる。

    (2-5)IMAP
    IMAP : ポート143
    IMAPS: ポート993
    ┏━━━━┓                       993┏━━━━┓   143┏━━━━┓
    ┃ メーラ ┣─── Internet ────→┫DeleGate┣──→┫  IMAP  ┃
    ┃        ┃                          ┃        ┃      ┃ サーバ ┃
    ┗━━━━┛                          ┗━━━━┛      ┗━━━━┛
    
    delegate-imap.cfgファイル
    --------
    STLS=fcl
    -P993
    SERVER=imap
    MOUNT="* imap://localhost/*"
    REACHABLE=localhost
    RELIABLE="*"
    ADMIN=user@example.com
    
  3. DeleGateの実行
    カレントディレクトリを C:\Program Files\DeleGate に移し、コマンドプロンプトから delegate-xxx.bat を実行する。

    NT系のOS(WinNT/2000/XP)では DeleGate Server -Pnnn がサービスとして動作する(nnnはポート番号)。
    バッチファイル(delegate-xxx.bat)を実行すると以下のようにいくつかの y/n の問い合わせがあるが、通常はデフォルトのまま([ ]でくくった方がデフォルトなので単にEnterキーを押すだけ)でよい。

     xxxが HTTPの場合の例を以下に示す(文字色が黄色の部分は既にDeleGateが動作中のときに表示される)。
    
    C:\Program Files\DeleGate>delegate-http
    
    C:\Program Files\DeleGate>dg9_1_1.exe +=delegate-http.cfg
    DeleGate/9.1.1 (March 28, 2006)
    AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165
    Copyright (c) 1994-2000 Yutaka Sato and ETL,AIST,MITI
    Copyright (c) 2001-2006 National Institute of Advanced Industrial Science and Technology (AIST)
    --
    FTP: <URL:ftp://ftp.delegate.org/pub/DeleGate/>
    WWW: <URL:http://www.delegate.org/>
    Mail:<URL:mailto:feedback@delegate.org>
         <URL:http://www.delegate.org/feedback/>
    DGROOT=C:/Program Files/DeleGate
    ADMIN=user@example.com
    Trying to start as a service [DeleGate Server -P443] ...
    The service `DeleGate Server -P443' exists.  Delete it ? [y] / n :
    OK. STOPped the previous service.
    OK. DELETEd the previous service.
    Create a new service ? [y] / n :
    Set Automatic Start on System Startup ? [y] / n :
    OK. The service is created successfully.
    OK. Parameters are saved in registry:
    "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DeleGate-P443\Parameters"
    OK. Environments are saved in registry:
    "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DeleGate-P443\Environments"
    OK. The service started successfully.

    delegate-xxx.cfgを変更したときには、再度delegate-xxx.batを実行する。
    DeleGateが一旦サービスとして登録されれば、停止/開始はコントロールパネルのサービスから操作する。

    登録したサービスを削除するときは delegate-xxx.bat を実行し、「Create a new service ?」で n をキー入力する。
    
    The service `DeleGate Server -P443' exists.  Delete it ? [y] / n : y
    Create a new service ? [y] / n : n
    

  4. 証明書と鍵(PEMフォーマット)の作成
     DeleGateの最近のバージョンはデフォルトでサーバ証明書と認証用の鍵を持っている。そのため、自前でサーバ証明書や鍵を生成しなくても暗号化が可能である。ただし、前述の DeleGateの FTPサイトで sslwayディレクトリ下にある libeay32.dllと ssleay32.dllをダウンロードし、C:\windows\system32 に置く。また、ランタイムライブラリ msvcr70.dllも必要なので、なければ VECTORなどで入手し、同じく C:\windows\system32に置く。
     自前の証明書等は、OpenSSLを使って以下のように作成することが可能である。

    (1)OpenSSLのインストール
    http://www.slproweb.com/products/Win32OpenSSL.htmlから Win32 OpenSSL の最新版(2006/5現在 Win32OpenSSL-v0.9.8b.exe)をダウンロードし、インストールする。インストール先は例えば C:\OpenSSLとする。DeleGateが実行中だと libeay32.dll などの overwriteに失敗するので DeleGateを停止すること。

    (2)証明書と鍵(PEMフォーマット)の作成
    下図のようにカレントディレクトリを変更後、openssl コマンドを実行する。この例では証明書の有効期間を365日としているので適当に変更を。他のオプションの意味は以下を参考に。
    http://www.openssl.org/docs/apps/req.html
    openssl req -new -nodes -x509 -keyout server-key.pem -out server-cert.pem -days 365
    
    問いに答えていくと bin 以下にserver-key.pem と server-cert.pem の2つのファイルが作成される。この2つのファイルを C:\Program Files\DeleGate\work\nn (nnは443などのポート番号)の下にコピーすると証明書として使用される。
    
    C:\OpenSSL\bin>openssl req -new -nodes -x509 -keyout server-key.pem -out server-cert.pem -days 365
    Loading 'screen' into random state - done
    Generating a 1024 bit RSA private key
    .....++++++
    .......++++++
    writing new private key to 'server-key.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Kanagawa
    Locality Name (eg, city) []:Kawasaki
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
    Organizational Unit Name (eg, section) []:My Section
    Common Name (eg, YOUR name) []:www.example.com (注)ここは必ず HTTPSアクセスするホスト名にする
    Email Address []:user@example.com
    
    C:\OpenSSL\bin>
    

  5. ブラウザから httpsアクセス
    DeleGateが動くホストに https://ホスト名/ とブラウザからアクセスすると下図左のようなメッセージが表示される(IEの場合)。「はい」とするとそのページが表示される(下図右は証明書作成時に Common Nameに正しいホスト名を設定していないときの表示である)。

     上記のダイアログで「はい」にしても次回のアクセスでもダイアログが表示され、結構うっとうしい。自己認証局発行の証明書なのでサーバ側でダイアログを出ないようにすることはできないが、クライアント側で以下の手順を実行すれば次回からはダイアログを表示しなくなる(上図右のケースでは以下の手順を実行しても毎回「はい」の入力が必要である)。

     1.上記のダイアログで「証明書の表示」ボタンをクリックする。


     2.「証明書のインストール」ボタンをクリックすると証明書のインポートウィザードの開始になる。


     3.「次へ」ボタンで「証明書ストア」になる。そのまま「次へ」ボタンをクリックする。


     4.「証明書のインポートウィザードの完了」が表示されるので「完了」ボタンをクリックする。


     5.以上で設定が完了し、インストールを開始するかどうかの確認が表示されるので「はい」とする。


     6.以下が表示されれば証明書のインストール完了である。


    IEでは、インターネットオプション -> コンテンツ -> 証明書 -> 信頼されたルート証明機関 の下に証明書がインポートされている。

  6. SSL非対応クライアントの SSL化
     次に DeleGateを使い、SSL非対応クライアントをSSL対応化する方法を説明する。FFFTPや Becky!など SSL非対応なクライアントをどうしても使い、SSLサーバ(SSL Proxy+非SSLサーバを含む)にアクセスしたいときに有効な方法である(DeleGate以外に wstunnelでも同様のことが可能であるが、ここでは説明しない。wstunnel 説明書を参照のこと)

    [使用例1] FFFTPで FTPSサーバに接続する
    ┏━━━━┓    21┏━━━━┓990                   ┏━━━━┓
    ┃ FFFTP  ┣───┫DeleGate┣─── Internet ──→┫ SSL    ┃
    ┃        ┃      ┃ SSL化  ┃                      ┃ FTPサーバ┃
    ┗━━━━┛      ┗━━━━┛                      ┗━━━━┛
    
    delegate-ftp-client.cfgファイル
    --------
    STLS=fsv
    -P21
    SERVER=ftp
    MOUNT="/* ftps://ftpServer.domain.com/*"
    REACHABLE=ftpServer.domain.com
    #
    #MOUNT="/abc/* ftps://ftpServer1.domain.com/*"
    #REACHABLE=ftpServer1.domain.com
    #MOUNT="/xyz/* ftps://ftpServer2.domain.com/*"
    #REACHABLE=ftpServer2.domain.com
    RELIABLE="*"
    ADMIN=user@example.com
    
    [使用例2] Becky!で SSLメールサーバに接続する
    (1)SMTP
    ┏━━━━┓    25┏━━━━┓465                   ┏━━━━┓
    ┃ Becky! ┣───┫DeleGate┣─── Internet ──→┫ SSL    ┃
    ┃        ┃      ┃ SSL化  ┃                      ┃SMTPサーバ┃
    ┗━━━━┛      ┗━━━━┛                      ┗━━━━┛
    
    delegate-smtp-client.cfgファイル
    --------
    STLS=fsv
    -P25
    SERVER=smtp://smtpServer.domain.com:465
    REACHABLE=smtpServer.domain.com
    RELIABLE="*"
    ADMIN=user@example.com
    
    (2)POP3
    ┏━━━━┓   110┏━━━━┓995                   ┏━━━━┓
    ┃ Becky! ┣───┫DeleGate┣─── Internet ──→┫ SSL    ┃
    ┃        ┃      ┃ SSL化  ┃                      ┃POPサーバ ┃
    ┗━━━━┛      ┗━━━━┛                      ┗━━━━┛
    
    delegate-pop3-client.cfgファイル
    --------
    STLS=fsv
    -P110
    SERVER=pop
    MOUNT="* pop3s://popServer.domain.com/*"
    REACHABLE=popServer.domain.com
    RELIABLE="*"
    ADMIN=user@example.com
    
  7. SSL解説のまとめ
     以上のSSLの仕組みを図示すると、概略下図の通りである。
    クライアントのSSL化は必要な場合のみ実施(多くのクライアントはSSL対応なので通常は不要と思う)。
    SSLプロキシは非SSLサーバに代わって、サーバ認証、暗号化・復号化等を実行する。
    SSLのクライアント認証を使えば、特定のマシンからのみアクセス可能にすることが可能であるが、
    ここではクライアント認証に関しては全く説明していない。

      ┏━━━┓┏━━━━━┓            ┏━━━━━┓┏━━━━━┓
      ┃クライアント┠┨DeleGate  ┠──←→──┨DeleGate  ┠┨非SSLサーバ ┃
      ┗━━━┛┃ (SSL化)  ┃            ┃(SSLプロキシ)┃┃          ┃
                ┗━━━━━┛            ┗━━┯━━┛┗━━━━━┛
                                                ↑
                          ┏━━━━┓作成┏━━┷━━┓
                          ┃OpenSSL ┠─→┨鍵,証明書 ┃
                          ┗━━━━┛    ┗━━━━━┛
    
  8. 関連情報へのリンク
     SSL用証明書の作成(Windows編)(パソコンおやじさん)



作成:いと,mailto:gfh05223@nifty.com