Debian パッケージ courier-ssl

couriertls

名称

couriertls -- Courier用 TLS/SSLプロトコル対応化プログラム

書式

couriertls [option...] {program} {arg...}

説明

既存のCourierアプリケーション (IMAPサーバとESMTPサーバ) が、 SSL/TLSの詳細に関与せずにセッションを暗号化するためにcouriertlsを用います。

couriertlsは通常コマンドラインからは起動しません。 アプリケーションがネットワーク接続確立後、 SSL/TLSの暗号化の必要に応じ適切なオプションと共にcouriertlsを起動します。

オプション

-host=host, -port=port

このオプションは主にデバッグ用で、-remotefdの代わりに指定され、 couriertlsは指定されたポートに自分で接続して 直ちにSSL/TLSネゴシエーションを開始します。

-localfd=n

SSL/TLSで暗号化する生データの入出力用ファイルディスクプリタ番号を指定します。

-statusfd=n

SSL接続の結果を返すファイルディスクプリタ番号です。 結果を書き込み後ディスクプリタはクローズされます。 SSLが成功した場合にはこのディスクプリタからの読み込みはすぐにEOFとなります。 エラーが発生した場合は、1行のエラーメッセージが読み込まれ、 ファイルディスクプリタはクローズされ、couriertls は終了します。

-printx509=n

相手局のx509証明書を読み込むためのファイルディスクプリタ番号です。 x509証明書はSSL/TLS暗号化が開始する前に出力されます。 アプリケーションはcouriertls開始後直ちにこの証明書を、 このファイルディスクプリタがクローズされるまで読み取る必要があります。

-remotefd=n

相手先と接続されたファイルディスクプリタ番号を指定します。 SSL/TLS暗号化データはここを流れます。

-server

SSL/TLSプロトコルのサーバ側として動作します。 指定されないとクライアント側として動作します。

-tcpd

couriertlscouriertcpdから呼び出す場合に指定します。 相手先との接続用ディスクプリタは 0 と 1になります。-tcpdオプションは基本的には -remotefd=0と同じですが、couriertlsはディスクプリタ1番をクローズし、 ディスクプリタ1番を2番 (?) にリダイレクトします。

-verify=domain

相手局から提示されたx.509証明書のCNフィールドがdomainに設定されているかどうか確認します。 相手局の証明書は、環境変数TLS_TRUSTCERTSで指定された 認証局のどれかで認証されていなければなりません。 CNフィールドはワイルドカードを含むことができます。例えば CN=*.exampleに設定されている場合は -verify=foo.example.comと一致します。(逆?) SSL/TLSのクライアント側の場合は、環境変数 TLS_VERIFYPEERは PEER に設定されていなければなりません。(下記)

-verifyfailmsg=msg

domainによる認証が失敗した場合に、 (標準出力か -localfdで指定されたディスクプリタか、引数で指定された programに)msg を出力します。msgはあるがままに出力されます。 (改行文字も必要です。)

-protocol=proto

protoで指定されたプロトコルのコマンドをSSL/TLS開始前に相手先に送ります。 protoは"smtp" か "imap"です。 このオプションは相手先IMAP/SMTPサーバとの接続のデバッグのために用いられます。

オプション-remotefd=n (localfd?)が指定されない場合、コマンドラインの残りにはSSL/TLS確立後に 起動されるプログラムとその引数を指定し、 プログラムの標準入出力がSSL/TLSで暗号化されます。 プログラム名が指定されない場合、couriertls自身の標準入力出力が暗号化されます。

環境変数

couriertlsはSSL/TLSプロトコルの設定のために次のような環境変数を利用します:

TLS_PROTOCOL=proto

プロトコルを指定します。 SSL2SSL3TLS1が指定可能です。

TLS_CIPHER_LIST=cipherlist

オプションで暗号化方式(cipher)のリストを指定します。 OpenSSLのドキュメントを参照してください。

TLS_TIMEOUT=seconds

現在はインプリメントされておりません。 このオプションでは非通信タイムアウト時間を指定しますが、現在は使えません。

TLS_DHCERTFILE=filename

Diffie-Hellman暗号ペアの書かれたPEMファイルを指定します。 OpenSSLがRSAでなくDiffie-Hellmanオプション付でコンパイルされた場合には DH暗号ペアを生成しなければなりません。 DH暗号ペアは秘密にしておくべきなので、 ファイルfilename は他者読み取り属性があってはいけません。

TLS_CERTFILE=filename

自局の証明書を指定します。 TLS_CERTFILE SSL/TLSサーバでは必ず必要です。 クライアントでは指定することもできます。 ファイルfilename には他者読み取り属性があってはいけません。

TLS_TRUSTCERTS=pathname

ルート認証局群の証明書を from pathnameから読み取ります。 pathname はファイルでもディレクトリでもかまいません。 ファイルの場合は、認証局群の証明書(複数)をPEMフォーマットで記述します。 ディレクトリの場合、1つの認証局の証明書を1つのPEMファイルで格納し、 OpenSSLのc_rehashスクリプトでハッシュしておく必要があります。TLS_TRUSTCERTSはSSL/TLSクライアントでのサーバ認証 (-verify=domain オプションの指定)、あるいは SSL/TLSサーバで用いられます。 (TLS_VERIFYPEERPEER または REQUIREPEERに指定)

TLS_VERIFYPEER=level

相手局のx.509証明書の認証方法を指定します。 couriertlsがサーバとして用いられるかクライアントとして用いられるかにより このオプションの意味が異なります。 サーバモードでは、 NONEは相手の証明書は不要です。 PEER は相手の証明書を要求し、 もし返された証明書がTLS_TRUSTCERTSで認証されていない場合には 接続を切ります。 REQUIREPEER は PEER と同じですが、x.509証明書を返さなかった場合にも 接続を切ります。
クライアントモードでは、 NONE は証明書を無視し、 PEER では -verify=domainオプションの指定により証明書を確認します。(上記)

関連項目

couriertcpd(1), courier(8).