既存のCourierアプリケーション (IMAPサーバとESMTPサーバ) が、 SSL/TLSの詳細に関与せずにセッションを暗号化するためにcouriertlsを用います。
couriertlsは通常コマンドラインからは起動しません。 アプリケーションがネットワーク接続確立後、 SSL/TLSの暗号化の必要に応じ適切なオプションと共にcouriertlsを起動します。
このオプションは主にデバッグ用で、-remotefdの代わりに指定され、 couriertlsは指定されたポートに自分で接続して 直ちにSSL/TLSネゴシエーションを開始します。
SSL/TLSで暗号化する生データの入出力用ファイルディスクプリタ番号を指定します。
SSL接続の結果を返すファイルディスクプリタ番号です。 結果を書き込み後ディスクプリタはクローズされます。 SSLが成功した場合にはこのディスクプリタからの読み込みはすぐにEOFとなります。 エラーが発生した場合は、1行のエラーメッセージが読み込まれ、 ファイルディスクプリタはクローズされ、couriertls は終了します。
相手局のx509証明書を読み込むためのファイルディスクプリタ番号です。 x509証明書はSSL/TLS暗号化が開始する前に出力されます。 アプリケーションはcouriertls開始後直ちにこの証明書を、 このファイルディスクプリタがクローズされるまで読み取る必要があります。
相手先と接続されたファイルディスクプリタ番号を指定します。 SSL/TLS暗号化データはここを流れます。
SSL/TLSプロトコルのサーバ側として動作します。 指定されないとクライアント側として動作します。
couriertlsを couriertcpdから呼び出す場合に指定します。 相手先との接続用ディスクプリタは 0 と 1になります。-tcpdオプションは基本的には -remotefd=0と同じですが、couriertlsはディスクプリタ1番をクローズし、 ディスクプリタ1番を2番 (?) にリダイレクトします。
相手局から提示されたx.509証明書のCNフィールドがdomainに設定されているかどうか確認します。 相手局の証明書は、環境変数TLS_TRUSTCERTSで指定された 認証局のどれかで認証されていなければなりません。 CNフィールドはワイルドカードを含むことができます。例えば CN=*.exampleに設定されている場合は -verify=foo.example.comと一致します。(逆?) SSL/TLSのクライアント側の場合は、環境変数 TLS_VERIFYPEERは PEER に設定されていなければなりません。(下記)
domainによる認証が失敗した場合に、 (標準出力か -localfdで指定されたディスクプリタか、引数で指定された programに)msg を出力します。msgはあるがままに出力されます。 (改行文字も必要です。)
protoで指定されたプロトコルのコマンドをSSL/TLS開始前に相手先に送ります。 protoは"smtp" か "imap"です。 このオプションは相手先IMAP/SMTPサーバとの接続のデバッグのために用いられます。
オプション-remotefd=n (localfd?)が指定されない場合、コマンドラインの残りにはSSL/TLS確立後に 起動されるプログラムとその引数を指定し、 プログラムの標準入出力がSSL/TLSで暗号化されます。 プログラム名が指定されない場合、couriertls自身の標準入力出力が暗号化されます。
couriertlsはSSL/TLSプロトコルの設定のために次のような環境変数を利用します:
プロトコルを指定します。 SSL2、SSL3、 TLS1が指定可能です。
オプションで暗号化方式(cipher)のリストを指定します。 OpenSSLのドキュメントを参照してください。
現在はインプリメントされておりません。 このオプションでは非通信タイムアウト時間を指定しますが、現在は使えません。
Diffie-Hellman暗号ペアの書かれたPEMファイルを指定します。 OpenSSLがRSAでなくDiffie-Hellmanオプション付でコンパイルされた場合には DH暗号ペアを生成しなければなりません。 DH暗号ペアは秘密にしておくべきなので、 ファイルfilename は他者読み取り属性があってはいけません。
自局の証明書を指定します。 TLS_CERTFILE SSL/TLSサーバでは必ず必要です。 クライアントでは指定することもできます。 ファイルfilename には他者読み取り属性があってはいけません。
ルート認証局群の証明書を from pathnameから読み取ります。 pathname はファイルでもディレクトリでもかまいません。 ファイルの場合は、認証局群の証明書(複数)をPEMフォーマットで記述します。 ディレクトリの場合、1つの認証局の証明書を1つのPEMファイルで格納し、 OpenSSLのc_rehashスクリプトでハッシュしておく必要があります。TLS_TRUSTCERTSはSSL/TLSクライアントでのサーバ認証 (-verify=domain オプションの指定)、あるいは SSL/TLSサーバで用いられます。 (TLS_VERIFYPEER を PEER または REQUIREPEERに指定)
相手局のx.509証明書の認証方法を指定します。
couriertlsがサーバとして用いられるかクライアントとして用いられるかにより
このオプションの意味が異なります。
サーバモードでは、
NONEは相手の証明書は不要です。
PEER は相手の証明書を要求し、
もし返された証明書がTLS_TRUSTCERTSで認証されていない場合には
接続を切ります。
REQUIREPEER は PEER と同じですが、x.509証明書を返さなかった場合にも
接続を切ります。
クライアントモードでは、
NONE は証明書を無視し、
PEER では -verify=domainオプションの指定により証明書を確認します。(上記)