22.SSL(TLS)で送受信してみよう

SMTP、POP3、IMAP4の各プロトコルでメールをやり取りする場合は、あまり知られたくないユーザIDやパスワードが平文でネットワーク内を流れてしまう。
閉じられたネットワーク(LAN)内であれば、あまり問題にはならないのだが、インターネットを通じてメールを送受信する場合は、ユーザIDと、それに対するパスワードを盗聴される危険性が十分にあることを考えなくてはいけない。

E-Post Mail Serverシリーズでは、SMTP、POP3、IMAP4での通信をSSL(TLS)を使って暗号化して通信することができる。それぞれ SMTP Over SSL、POP3 Over SSL、IMAP4 Over SSL と呼ばれる。※0

    ※0)なお2019年1月公開の20181224最新差分アップデートを適用した最新版では、SSLは廃止(デフォルトで使用禁止)され、TLS1.0〜TLS1.3に対応している。
ここでは、以下にあげる2通りを暗号通信で送ることを実際に試したい。ただし、お断りしておくが、SMTP Over SSL 通信が実際に用いられるケースが多いのは、やはりクライアント−サーバー間の前者のケースである。後者のSMTPサーバー間どうしの通信については、SMTP Over SSL ではなく、25番ポートのまま接続できる STARTTLS 通信の方が最近はメジャーであり使われることが多くなってきた。※1

  • クライアント ←→ サーバー との間(SMTP/POP3/IMAP4)
  • SMTPサーバー ←→ SMTPサーバー との間(SMTP)※2
    ※1)SMTP Over SSL と STARTTLS(SMTP)との違いだが、SMTP Over SSL が465番ポートで接続時点から"暗号通信"されるのに比べ、 STARTTLS は25番ポートのまま接続、最初は"プレーン通信"でネゴシェーション後に途中から"暗号通信"を開始するという基本的な違いがある。STARTTLS の設定方法はこの構築ガイド内ではふれていないが、設定の要点は、STARTTLS での受信時には SSL設定の証明書・鍵情報をそのまま用いる一方、送信時には「ESMTPで送信」を有効設定にするだけで STARTTLS での送信が可能になっている。

    ※2)相手先サーバーがSSL(TLS)で通信可能なときで、なおかつ E-Post側の「ゲートウェイテーブル」【gateway.dat】に、相手先サーバーが暗号化通信の465番ポートで指定されている場合にのみ通信が行われる。最近ではSMTPサーバー間の通信は、上記にあげたように25番ポートのまま接続できる STARTTLS 通信の方がよく使われることが多くなっている。

SSL(TLS)の設定手順

E-Post Mail Serverシリーズで、SSL(TLS)での通信を可能にするには、以下の手順にて設定を行うことになる。

  1. 「公開鍵証明書」と「秘密鍵」を作成する
  2. 「公開鍵証明書」と「秘密鍵」を本サーバーソフトウェアに設定する
  3. クライアント ←→ SMTPサーバー間でのSMTP over SSL(TLS)用IPアドレス/ポートの指定
  4. クライアント ←→ POP3サーバー間でのPOP3 over SSL(TLS)用IPアドレス/ポートの指定
  5. クライアント ←→ IMAP4サーバー間でのIMAP4 over SSL(TLS)用IPアドレス/ポートの指定
  6. SMTPサーバー ←→ SMTPサーバー間でのSMTP over SSL(TLS)用IPアドレス/ポートの指定

手順1.最初に「公開鍵証明書」と「秘密鍵」を作成する

まず、SSL(TLS) Key 作成キットを入手するため、「ダウンロード」公開ページの「各種ツール・ユーティリティ」に用意してある SSL-Key.zip をダウンロードし、解凍しよう。2015年12月以降、新しい openssl.exe を組み込んだSHA2(sha256)対応の SSL-Key-SHA2.zip が用意されている。最新OSにインストールするなら、まよわず新しい方のモジュールを選ぼう。
次に解凍されたファイル内にバッチファイル"CERTIFICATE.BAT"※2および設定ファイルの"openssl.cnf"があるのを確認する。

    ※2)自前で自己認証局を作成し、必要な「公開鍵証明書」と「秘密鍵」を作るために、用意されているバッチファイル。SSL(TLS)での通信が問題なく行えるかどうかを検証するだけであれば、自己認証局でも十分だ。自己認証局ではなく、正規の認証局に公開鍵証明書を発行依頼する場合は、「登録申請書」を認証局に提出し「公開鍵証明書」を発行してもらう必要がある。
    このとき"CERTIFICATE.BAT"を使って"myreq.pem"を作成、
    "myreq.pem"の内容を認証局のCSR情報に入力すると、認証局によっては「CSRの鍵長は2048bit(または1024bit)以上でなければならない」旨の警告メッセージが表示されることがある。そのような場合、
    "CERTIFICATE.BAT"と設定ファイルの"openssl.cnf"を1個所ずつ修正、CSRの鍵長を2048bit(または1024bit)に変更した上で作成すればよい。なお、SSL-Key-SHA2.zip の方はCSRの鍵長は最初から2048bitに設定済みだ。


このバッチファイル"CERTIFICATE.BAT"を管理者権限で実行する。
実行すると、以下の例のように、質問内容が表示される。表示内容に応じて必要事項を逐次入力していけば「公開鍵証明書」および「秘密鍵」が作成される。

自前での自己認証局(CA)の作成
"CERTIFICATE.BAT"の実行例(赤のアンダーライン部が入力する箇所)

openssl req -config openssl.cnf -new -nodes -keyout cakey.pem -x509 -out cacert.pem

Using configuration from openssl.cnf
Loading 'screen' into random state - done
Generating a 512 bit RSA private key
..++++++++++++
....++++++++++++
writing new private key to '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]:Tokyo
Locality Name (eg, city) []:Shinjuku-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:sample
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:sample.jp
Email Address []:

秘密鍵の作成と登録申請書の作成

openssl req -config openssl.cnf -new -nodes -newkey rsa:512 -keyout mykey.pem -out myreq.pem

Using configuration from openssl.cnf
Loading 'screen' into random state - done
Generating a 512 bit RSA private key
...++++++++++++
.++++++++++++
writing new private key to 'mykey.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]:Tokyo
Locality Name (eg, city) []:Shinjuku-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:sample
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:sample.jp
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

認証局(CA)によって署名した「公開鍵証明書」を発行

openssl ca -config openssl.cnf -in myreq.pem -keyfile cakey.pem -cert cacert.pem -out mycert.pem

Using configuration from openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shinjuku-ku'
organizationName :PRINTABLE:'sample'
organizationalUnitName:PRINTABLE:''
commonName :PRINTABLE:'sample'
Certificate is to be certified until May 6 00:29:27 2003 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


手順2.「公開鍵証明書」と「秘密鍵」を E-Post Mail Server に設定する

"CERTIFICATE.BAT"の実行によって作成されたファイルは、次の2ファイルである。
 mycert.pem ---- 公開鍵証明書ファイル
 mykey.pem ---- 秘密鍵ファイル

必要に応じて任意のフォルダに移動した後、E-Post Mail Controlを起動し、[SSL設定]タブを選択し、それぞれの「証明書ファイル」「秘密鍵ファイル」欄にフルパスでこのファイルを指定する。

手順3.クライアント←→SMTPサーバー間でのSMTP over SSL(TLS)用IPアドレス/ポートの指定

E-Post Mail Controlを開き、[サービス制御]タブを選択、[EPSTRS] の [詳細設定] ボタンをクリック。
「詳細設定(SMTP)」ダイアログボックスが表示されるので、「一覧のアドレスに応答する」を選択し、[IP address] 設定欄に応答する2組のIPアドレス/ポートを追加設定する。

    例)
  • 192.168.0.103 25 ※3← IP address 192.168.0.103 port 25 は暗号化しないで接続する通常のポート
  • 192.168.0.103 465* ← IP address 192.168.0.103 port 465 はSSL(TLS)で暗号化して接続するためのポート
    ※3) ここではメールサーバに割り当てた静的なプライベートIPアドレスを指定しているが、IPアドレスをワイルドカード指定し、「*.*.*.* 25」「*.*.*.* 465*」の指定でもかまわない。

追加できたら[OK]ボタンをクリックして、ダイアログボックスを閉じる。その後、[EPSTRS] サービスの再起動を行う。

この後、メーラー側のアカウント設定で、SSL(TLS)通信の指定を行えば、クライアント←→サーバー間で暗号化通信によるメール送信を行えるようになる。※4

    ※4) 自前で認証局を作成し、「公開鍵証明書」と「秘密鍵」を自身で作成した場合、送信の始めに警告メッセージが表示されるものの、[許可]または[OK]ボタンをクリックすることで、メール送信が行われる。

手順4.クライアント←→POP3サーバー間でのPOP3 over SSL(TLS)用IPアドレス/ポートの指定

E-Post Mail Controlを開き、[サービス制御]タブを選択、[EPSTPOP3S] の [詳細設定] ボタンをクリック。
「詳細設定(POP3)」ダイアログボックスが表示されるので、「一覧のアドレスに応答する」を選択し、[IP address] 設定欄に応答する2組のIPアドレス/ポートを追加設定する。

    例)
  • 192.168.0.103 110 ※5← IP address 192.168.0.103 port 110 は暗号化しないで接続する通常のポート
  • 192.168.0.103 995* ← IP address 192.168.0.103 port 995 はSSL(TLS)で暗号化して接続するためのポート
    ※5) ここではメールサーバに割り当てた静的なプライベートIPアドレスを指定しているが、IPアドレスをワイルドカード指定し、「*.*.*.* 110」「*.*.*.* 995*」の指定でもかまわない。

追加できたら[OK]ボタンをクリックして、ダイアログボックスを閉じる。その後、[EPSTPOP3S] サービスの再起動を行う。

この後、メーラー側のアカウント設定で、SSL(TLS)通信の指定を行えば、クライアント←→サーバー間で暗号化通信によるPOP3受信を行えるようになる。※6

    ※6) 自前で認証局を作成し、「公開鍵証明書」と「秘密鍵」を自身で作成した場合、POP3受信の始めに警告メッセージが表示されるものの、[許可]または[OK]ボタンをクリックすることで、POP3受信が行われる。

手順5.クライアント←→IMAP4サーバー間でのIMAP4 over SSL(TLS)用IPアドレス/ポートの指定

E-Post Mail Controlを開き、[サービス制御]タブを選択、[EPSTIMAP4S] の [詳細設定] ボタンをクリック。
「詳細設定(IMAP4)」ダイアログボックスが表示されるので、「一覧のアドレスに応答する」を選択し、[IP address] 設定欄に応答する2組のIPアドレス/ポートを追加設定する。

    例)
  • 192.168.0.103 143 ※7← IP address 192.168.0.103 port 143 は暗号化しないで接続する通常のポート
  • 192.168.0.103 993* ← IP address 192.168.0.103 port 993 はSSL(TLS)で暗号化して接続するためのポート
    ※7) ここではメールサーバに割り当てた静的なプライベートIPアドレスを指定しているが、IPアドレスをワイルドカード指定し、「*.*.*.* 143」「*.*.*.* 993*」の指定でもかまわない。

追加できたら[OK]ボタンをクリックして、ダイアログボックスを閉じる。その後、[EPSTIMAP4S] サービスの再起動を行う。

この後、メーラー側のアカウント設定で、SSL(TLS)通信の指定を行えば、クライアント←→サーバー間で暗号化通信によるIMAP4受信を行えるようになる。※8

    ※8) 自前で認証局を作成し、「公開鍵証明書」と「秘密鍵」を自身で作成した場合、IMAP4受信の始めに警告メッセージが表示されるものの、[許可]または[OK]ボタンをクリックすることで、IMAP4受信が行われる。

手順6.SMTPサーバー←→SMTPサーバー間でのSMTP over SSL(TLS)用IPアドレス/ポートの指定

これまでの手順とは異なり、E-Post側のSMTPサーバーと他のSMTPサーバーとの間で、SMTP over SSL(TLS)通信を行う場合には、ゲートウェイ詳細設定ファイル(gateway.dat)を編集することになる。手順は次の通りだ。
E-Post Mail Controlを開き、[サーバー設定]タブを選択、[テーブル編集]ボタンをクリックする。
ゲートウェイ詳細設定ファイル(gateway.dat)が開くので、次のような書式で記述し、SSL(TLS)通信可能なサーバーを指定しておき、最後に保存して閉じる。

例) E-Post側のSMTPより、外部ドメイン sample2.jp 宛のメール送信を SMTP over SSL(TLS) でフォワード送信する場合

[gateway.dat]の例※9
sample2.jp,mail.sample2.jp,465*
※9) 書式は「[対象ドメイン],[ゲートウェイ先(FQDN or IP)],[接続ポート]」 である。

以上で、SSL(TLS)通信を行うための設定が完了する。

上記にあげたいずれの手順でも、設定が完了した後は、必ず各サービス(EPSTRS,EPSTDS,EPSTPOP3S,EPSTIMAP4S)を再起動しておこう。

手順7.SSL(TLS)通信を使った送受信の確認

SSL(TLS)での通信はTelnetで試すことはむずかしいので、代表的なメーラーである Outlook Express で試してみることにする。
まずは、メールアカウントを追加する。

  1. Outlook Expressを起動し、メニューバーの [ツール] −[アカウント] を選択。


  2. [追加] → [メール] ボタンの順にクリックすると、インターネット接続ウィザードが起動されるので、[表示名] に名前を入力し [次へ] ボタンをクリック。


  3. [電子メールアドレス] には、メールアドレス(user1@sample.jp)を入力し [次へ] ボタンをクリック。


  4. 次に「受信メールサーバーの種類」として「POP3」を選択、[受信メール(POP3、IMAPまたはHTTP)サーバー]と[送信メール(SMTP)サーバー] の両方に、192.168.0.103(メールサーバに設定した静的IPアドレス)を入力し、[次へ] ボタンをクリック。


  5. [アカウント名] にメールアドレス(user1@sample.jp)とパスワードを入力し、[次へ] ボタンをクリック。


  6. 最後に[完了] ボタンをクリック。


  7. 登録終了後、メニューバーの [ツール] から[アカウント] -[メール]を選択。登録されたアカウントを選択し、[プロパティ]をクリック。


  8. 表示されたダイアログボックスの[サーバー]タブを選択。[このサーバーには、認証が必要] チェックボックスをオンにする。


  9. [詳細設定]タブを選択。「このサーバーはセキュリティで保護された接続必要」チェックボックスをオンにし、「送信メール(SMTP)」に "465" を入力。
    「このサーバーはセキュリティで保護された接続必要」チェックボックスをオンにし、「受信メール(POP)」 "995" を入力。
    最後に [OK] ボタンをクリックすることで、設定は完了する。

  10. 送信テスト用にメールを作成する。


  11. メールが作成できたら、「送信」ボタンをクリック。最初の送信時には「インターネットセキュリティの警告」メッセージが表示されるが、問題ないので、そのまま「はい」をクリックする。するとメールの送信が完了する。


  12. 送ったメールを受信する。メールが受信されていることを確認できればOK。




書籍『E-Post Mail Server完全ガイド』ご案内