SMTP over SSL(STARTTLS)

[サーバの実験室 Redhat/Fedora]

作成 : 2004/07/14

"サーバの実験室"の検索


SMTP over SSL(STARTTLS)

メールを送信するとき、SMTPサーバとMUA(メールクライアント)の間は、メールの内容が平文で流れてしまう。 SMTP over SSLを使用すると、MUAとサーバの間、サーバとサーバの間(双方がSMTP over SSLに対応していれば)でメールの内容を暗号化することができる。

注意! SMTP over SSLはノードーノードでの暗号化なので、SMTP AUTHでPLAINやLOGINのようなプレンテキストの認証を使わざる得ない場合に使用するのがよいと思われる。 エンドーエンドの暗号化をするなら、S/MIMEとかPGPを使う。

サーバ秘密鍵と証明書の作成

SMTPサーバの秘密鍵と証明書を作成する。 dovecotでPOP over SSLをするときに使った、dovecot-openssl.cnfファイルをsmtp-openssl.cnfにコピーし、編集する。 (もちろん、こんなことをしなくてもまったく問題ない)

# cp /usr/share/dovecot-0.99.10.4/dovecot-openssl.cnf /usr/share/ssl/smtp-openssl.cnf
/usr/share/ssl/smtp-openssl.cnf

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
# Organizational Unit Name (eg. section)
OU=smtp server

# Common Name (*.example.com is also possible)
CN=smtp.nina.jp    <---メールクライアントで指定するSMTPサーバ名

# E-mail contact
emailAddress=postmaster@smtp.nina.jp    <---サーバ管理者のメアド
[ cert_type ]
nsCertType = server

秘密鍵/etc/mail/certs/smtp_key.pemと証明書/etc/mail/certs/smtp_cert.pemを作成する。 ディレクトリを事前に作成しておかないと、エラーになる。 opensslのコマンドについては、opensslコマンドを参照。

# mkdir /etc/mail/certs

# cd /usr/share/ssl
# openssl req -new -x509 -nodes -config smtp-openssl.cnf -out /etc/mail/certs/smtp_cert.pem -keyout /etc/mail/certs/smtp_key.pem

Generating a 1024 bit RSA private key
....................................++++++
...++++++
writing new private key to '/etc/mail/certs/smtp_key.pem'
-----

作成した秘密鍵は、root以外のユーザからアクセスできないようにすること!

SMTP over SSLのためのsendmailの設定

秘密鍵ファイル、証明書ファイルを/etc/mail/sendmail.mcファイルに指定する。

/etc/mail/sendmail.mc

define(`CERT_DIR',`/etc/mail/certs')dnl
define(`confCACERT_PATH',`CERT_DIR')dnl
define(`confCACERT',`CERT_DIR/smtp_cert.pem')dnl    <---CA証明書(自己署名のサーバ証明書を指定)
define(`confSERVER_CERT',`CERT_DIR/smtp_cert.pem')dnl    <---サーバ証明書
define(`confSERVER_KEY',`CERT_DIR/smtp_key.pem')    <---サーバ秘密鍵
dnl define(`confCLIENT_CERT',`CERT_DIR/cert.pem')    <---コメントのまま
dnl define(`confCLIENT_KEY',`CERT_DIR/key.pem')    <---コメントのまま

/etc/mail/sendmail.cfの作成

/etc/mail/sendmail.cfを作成する。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

sendmailの再起動

sendmailを再起動する。

# /etc/init.d/sendmail restart

telnetでSMTPサーバに接続して、ELHOコマンドを入力してみる。

# telnet smtp.nina.jp 25

Connected to smtp.nina.jp.
Escape character is '^]'.
220 smtp.nina.jp ESMTP Sendmail 8.12.11/8.12.11; Wed, 14 Jul 2004 23:28:21 +0900
ehlo localhost
250-smtp.nina.jp Hello smtp.nina.jp [192.168.0.10] (may be forged), pleased tomeet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-STARTTLS    <---SMTP over SSL(STARTTLS)が使用できるようになった
250-DELIVERBY
250 HELP
quit
221 2.0.0 smtp.nina.jp closing connection

STARTTLSが表示されない場合は、/var/log/maillogをチェックする。 たとえば、サーバ秘密鍵がGroupReadableになっている場合は次のようなエラーになり、SMTP over SSLは使用できない。 サーバ秘密鍵のパーミッションを設定して、再度sendmailを再起動する。

/var/log/maillog

STARTTLS=server: file /etc/mail/certs/smtp_key.pem unsafe: Group readable file

Outlook ExpressでSMTP over SSL

Outlook Expressの設定は、Outlook ExpressでSMTP over SSLを参照。

Eudora6でSMTP over SSL

Eudora6の設定は、EudoraでSMTP over SSLを参照。 SMTP over SSLを使おうとすると、次のようなエラーになってしまった。

Eudoraのエラー

SSL Negotiation Failed: Couse (-6992)

sendmailのログは、次のようなエラーになっていた。

/var/log/maillog

sendmail[18421]: STARTTLS=server, error: accept failed=0,SSL_error=5, timedout=0, errno=0
sendmail[18429]: STARTTLS=server: 18429:error:140890E9:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:tls peer did not respond with certificatelist:s3_srvr.c:1919:

Eudoraがクライアント証明書を提示しないため、エラーになっているような... しかたないので、sendmail側でクライアント証明書を検証しないことにより、エラーを回避する。 クライアント証明書を検証しないようにするには、/etc/mail/sendmail.mcファイルに1行追加する。

/etc/mail/sendmail.mc

define(`CERT_DIR',`/etc/mail/certs')dnl
define(`confCACERT_PATH',`CERT_DIR')dnl
define(`confCACERT',`CERT_DIR/smtp_cert.pem')dnl
define(`confSERVER_CERT',`CERT_DIR/smtp_cert.pem')dnl
define(`confSERVER_KEY',`CERT_DIR/smtp_key.pem')
dnl define(`confCLIENT_CERT',`CERT_DIR/cert.pem')
dnl define(`confCLIENT_KEY',`CERT_DIR/key.pem')
define(`confTLS_SRV_OPTIONS',`V')dnl    <---クライアント証明書を検証しない

/etc/mail/sendmail.cfファイルを作成して、sendmailを再起動する。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# /etc/init.d/sendmail restart

これで、EudoraでもSMTP over SSLを使用できるようになった。


[サーバの実験室 Redhat/Fedora]