本ページでは PMailServer2 における SSL/TLS の補足説明となります。
PMailServer2 が前提になる説明となりますので、更なる詳細な情報については別途お調べ下さい。


● SSL/TLS プロトコル

● 各Windows OS における SSL/TLS プロトコルの対応状況

PMailServer2 は Windows OS の schannel を利用して SSL/TLS 通信を行っています。
schannel がサポートをしているプロトコルはバージョンによって違いますので、ご利用の Windows でサポートが行われているプロトコルを選択して下さい。

上記情報は調査結果であり、将来的に変更される可能性もあります。正確な情報については Microsoft 社サイトをご参照下さい。
● PMailServer2 での各プロトコルの選択

SSL/TLS 通信では、最初のネゴジェーションを行う際に利用できる通信方法の交換が行われます。
サーバー側が TLS1.1 / TLS1.2 のみを利用できる設定にした場合、クライアントが SSL3.0 / TLS1.0 しか利用できない場合(例えば WindowsXP)その通信は成立しません。

複数のプロトコルが選択されている場合でサーバー・クライアント共に共通で利用できるプロトコルがある場合は、自動的に上位のバージョンでの通信になります。
サーバーが TLS1.0 / TLS1.1 / TLS1.2
クライアントが TLS1.1 / TLS1.2
の場合は、TLS1.1 は選択されず、TLS1.2 が選択されます。


● SMTP/POP3/IMAP4 における各プロトコルの選択

PMailServer2 において、SMTP/POP3/IMAP4 に関して利用できるプロトコルの選択は共通となります。
これは SMTP over TLS / POP3 over TLS / IMAP4 over TLS / SMTP での STARTTLS / POP3 での STARTTLS / IMAP4 での STARTTLS 全てに共通します。


● over TLS / STARTTLS

xxxx over TLS は、決められたポートに接続して最初から SSL/TLS 通信を行います。

機能プロトコルポート番号
1st SMTPSMTP + STARTTLS25
2nd SMTPSubmission SMTP + STARTTLS587
3rd SMTPSMTP over TLS465(*1)
1st POP3POP3 + STARTTLS110
2nd POP3APOP + STARTTLS112
3nd POP3POP3 over TLS995
1st IMAP4IMAP4 + STARTTLS143
2nd IMAP4IMAP4 over TLS993

上記の表からもわかる通り、STARTTLS は通常の通信(平文通信)のポートに最初に接続し、その後、SSL/TLS通信を開始するコマンドを送ってから SSL/TLS 通信(暗号通信)を行います。

(*1) 一度 IANA にて SMTP over SSL にポート465の割り当てが行われましたが、その後、STARTTLS の採用以降、割り当ては無効になっています。
PMailServer2 ではポート465のサポートを中止する予定は特にありませんが、正式に割り当てられているポート番号では無いという点を留意する必要があります。


● MTA for STARTTLS

MTA for STARTTLS は、PMailServer2 が外部のメールサーバーへ配信を行う際に、配信先のサーバーが

両方に対応している場合にのみ、SSL/TLS 通信で配信を暗号化します。
従って、上記条件に対応していない場合は、MTA for STARTTLS を有効にしても配信は暗号化されませんのでご注意下さい。


● ログ中の SSL/TLS通信メッセージについて

SMTP や POP3 / IMAP4 で SSL/TLS 通信が成功した場合は、下記のようにログに記録されます。(Level3)

[xxxx] [000-N3V53f] TLS初期化完了(924)
[xxxx] [000-N3V53f] 220 Ready to start TLS
[xxxx] [000-N3V53f] SSL/TLS のハンドシェイクに成功。C(TLS 1.2)

初期化完了の後の数値は、SSL/TLS通信を行った際のソケット番号となります。(特殊な環境化でのみ値が必要になりますが、通常この値を参照する必要はありません。)

ハンドシェイクに成功した場合は、S(xxxx) または C(xxxx) が記録されます。この場合 S / C は参照する必要はありません。
xxxx には SSL3.0 / TLS1.0 / TLS1.1 / TLS1.2 のいずれかが入ります。

[xxxx] [000-D62aeW] TLS初期化完了(1124)
[xxxx] [000-D62aeW] 220 Ready to start TLS
[xxxx] [000-D62aeW] SSL/TLS のハンドシェイクに失敗しました。C(TLS 1.0)
[xxxx] [000-D62aeW] TLS ErrorCode 0x80090331 Win32 [クライアントとサーバーは共通のアルゴリズムを処理していないので、通信できません。]

ハンドシェイクに失敗した場合、xxxxxxxx には内部エラーコードが入ります(この値はお問い合わせ頂く際に必要となります。)
その後に記録される。S(xxxx) / C(xxxx) については、ハンドシェイクのどの段階で、どのプロトコルが利用されていたかを記録します。
その後、Windows でのエラーメッセージが記録されます。
0x80090331 は Windows のエラーコードです。
少しわかりにくいエラーメッセージで
[xxxx] [000-D62aeW] TLS ErrorCode 0x80090308 Win32 [この関数に提供されたトークンは無効です]
これは共通で利用できるプロトコルのバージョンが一致しない場合に出ます(配信先が SSL1.1 までで自サーバーが TLS1.2 のみで通信を行おうとした場合。

[MTA ] [000-00ThaC] STARTTLS
[MTA ] [000-00ThaC] 220 Ready to start TLS
[MTA ] [000-00ThaC] SSL/TLS のハンドシェイクに失敗しました。(0x00000000) S(TLS 1.0)

場合によっては、上記のようにエラーの詳細がログに記録されない場合があります。
これは、SSL/TLS 以外の原因でハンドシェイクに失敗した場合です。回線の強制切断やタイムアウトなどです。
その場合、S(xxxx) / C(xxxx) には最後に処理が行われた時に指定されていたプロトコルが入ります。