SMTP over SSL(STARTTLS)
作成 : 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を使用できるようになった。