TLS(SSL)によるSMTPの暗号化
最終更新日:2007年9月2日
はじめに、
現在、多くのメールサーバ(SMTP)ではクリアテキストを使った通信パケットでサーバ・クライアント間が通信されているため、パケットキャプチャツールなどをこの間に介在させると、通信の内容を盗聴される可能性が出てしまいます。
そこで、サーバ・クライアント間の通信をSSLを使った暗号化とする事で、安全に通信ができるようにする手順について説明していきます。
1.サーバ証明書の入手
TLSを使った暗号化の為には、これを実行するサーバに暗号化の為のプライベートキーとサーバ証明書が必要になります。 手順としては
- プライベートキーの作成
- プライベートキーを使い「署名要求書(CSR)」を作成
- CSRを証明機関(CA)へ送付.。CAにてCSRを元にサーバ証明書を作成し、送ってもらう。
- サーバ証明書にプライベートキーのマージ(必要な場合)
- 秘密鍵(プライベートキー)を作成
証明書が必要なサーバ側で以下の方法で秘密鍵を作成する。
# cd /etc/ssl/private
# openssl genrsa -des3 -out server.key 1024 ----(ここではキー長を1024バイトにしてますが、必要に応じて可変してください)
Generating RSA private key, 512 bit long modulus
.++++++++++++
...++++++++++++
e is 65537 (0x10001)
Enter pass phrase for robata_server.key: サーバ用プライベートキーファイルのパスフレーズ設定
Verifying - Enter pass phrase for robata_server.key: サーバ用プライベートキーファイルのパスフレーズ設定(確認用)
これで、プライベートキーの作成は完了です。 ただし、このキーは暗号化された状態で、このキーをサーバでそのまま利用するとサーバの起動時にパスフレーズを求めてきてしまいますので、暗号化を解除したキーも作成しておきます。
# openssl rsa -in server.key -out nopass_server.key
- 署名要求書(CSR)を作成
# cd /etc/ssl
# openssl req -new -days 3650 -key private/server.key -out csr.pem
Enter pass phrase for private/robata_server.key: 先ほどのサーバ用パスフレーズを入力
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) [JP]:
State or Province Name (full name) [Chiba-ken]:
Chiba-shi []:
Organization Name (eg, company) [ROBATA]:
Organizational Unit Name (eg, section) []:HOME
Common Name (eg, YOUR name) []:sv.robata.org
Email Address []:root@robata.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#
以上で署名要求書(csr.pem) が作成されましたので、これをCAへ送ってサーバ証明書を作ってもらってください。
なおCSRを作成の際に入力する「Country Name」〜「Email Address」などは、CAが自己認証局の場合にはCAと同じ値を指定してください。
- サーバ証明書に必要に応じてプライベートキーをマージ
CAからサーバ証明書が送り返されてきたなら、必要に応じてプライベートキーとマージしてしてください。
(WebサーバやメールのTLS化では、プライベートキーとマージが必要です)
このときマージするキーはパスフェーズを解除したキーを利用してください。
ここでは、サーバ証明書がcertsディレクトリに「server.pem」として作成されたものとして説明します。
作成されたServer証明書に、サーバ署名要求の際に作成したサーバのプライベートキーファイルをマージします。
# cat certs/server.pem private/nopass_server.key > certs/postfix_cert.pem
なお、証明書の確認を少しでも高速にしたい場合には、以下のようにCAの証明書も一緒にマージすると良いらしい。
# cat certs/server.pem CA/cacert.pem private/nopass_server.key > certs/postfix_cert.pem
作成された証明書ファイル postfix_cert.pem がサーバ側での証明書となります。
手順は以上です。 このとき、証明機関(CA)としてベリサインやセコムなどの公式の証明機関を使うのが基本ですが、社内用だけで利用する場合などに、これら有償の証明書を入手するよりも社内で独自に構築した証明機関を構築して利用することも可能です。
自前のCAの構築方法ならびに署名要求書(CSR)への署名方法に関してはこちらをご覧下さい。
2.Postfix をTSLでの暗号化ができるように設定
DebinaのPostfixでは標準でTLSのライブラリがリンクされているので設定だけでTLSを使ったメールの暗号化が可能になります。ただし、認証に関してはSASLを使った形にしないとTLS化ができないので、まず最初にSALS関連をインストールします。
# apt-get install libsasl2 libsasl2-modules sasl2-bin
次に、/etc/postfix/main.cf を開き以下の箇所を編集します。
# TLS parameters
# smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# matsu_o
smtpd_tls_cert_file=/etc/ssl/certs/postfix_cert.pem
smtpd_tls_key_file=/etc/ssl/private/nopass_server.key
smtpd_use_tls=yes
# smtpd_tls_CAfile = /etc/ssl/CA/cacert.pem
# smtpd_tls_CApath = /etc/ssl/CA/
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# SASL Auth
## for sasl (smtp-auth) config
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
permit_auth_destination,
reject
broken_sasl_auth_clients = yes
|
/etc/postfix/master.cf を開き以下の行を追加します。
# smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
|
以上でTLSの設定は完了です。 postfix を再起動してください。
# /etc/init.d/postfix restart
以上までの設定で、SMTPパケットのTLSでの暗号化か可能になりました。 (POPやIMAPに関してはまだ暗号化されていません。 それらについては別の章で説明します。)
3.メールクライアントでのTLSの設定
メールクライアントでは次の設定でTLSを設定します。
- Outlook Expressの場合
[ツール]−[アカウント]−[メール]でメールアカウントのプロパティ設定を呼び出す。 [サーバ]タブを選択する。
「送信メール(SMTP)で、Postfixサーバを指定し[詳細設定]タブを開く。

SMTPのポート番号を「465」、
"このサーバーはセキュリティで保護された接続(SSL)が必要"にチェックする
以上でOutlook Expressの設定は完了です。
Homeへ
webmaster@robata.org
Copyright© 1998-2003 ROBATA.ORG