6と7のリビジョン間の差分
2019-05-08 17:29:30時点のリビジョン6
サイズ: 4789
コメント:
2019-05-08 18:00:02時点のリビジョン7
サイズ: 4687
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
## page was renamed from sendmail/SSL/TLSサーバーベストプラクティクス
= SSL/TLSサーバーベストプラクティクス =
= STARTTLS設定ベストプラクティクス =

STARTTLS設定ベストプラクティクス

想定環境

目的

昨今メールのSMTP(プロトコル)における暗号通信(SSL/TLS)のry。

+--------+ SMTP +------+ SMTP +------+ SMTP +------+ SMTP等 +------+ IMAP/POP3等 +--------+
|メーラー| →→ |MSA| →→ |MTA| →→ |MTA| →→→ |MDA| →→→→→  |メーラー|
+--------+      +------+      +------+      +------+        +------+             +--------+

目標

  • High-Tech Bridge SSL/TLS Server Test で「A」評価を得る。

  • 「A+」が取れないのは以下の点で sendmail の実装に問題がある(実装されてない)ため。
    • CLIENT-INITIATED SECURE RENEGOTIATION
    • OCSP Stapling

事前インストール

  • ports/security/ca_root_nss をインストールすること。

再コンパイル

現時点(2017/10/24)で、OS標準(以後 stock sendmail と呼称)および ports/mail/sendmail(以後 ports sendmail と呼称) ともに 8.15.1 で導入された _FFR_TLS_USE_CERTIFICATE_CHAIN_FILE コンパイルオプションが有効になっていない。 そのため、別途再コンパイルが必要とする。 また stock sendmail の場合、標準でECDHEサポートが無効になっていることもあり(_FFR_TLS_EC コンパイルオプション、8.14.8 で導入)、 合わせて対応する。 こちらは ports sendmail では対応済みである。

stock sendmail の場合

  • 単純には /etc/make.conf に以下の設定を行い make world を実施する。

.if ${.CURDIR} == "/usr/src/usr.sbin/sendmail"
CFLAGS+= -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
.endif
  • ソースコードを直接修正する場合は /usr/src/usr.sbin/sendmail/Makefile の CFLAGS+= -DSTARTTLS -D_FFR_TLS_1 行を CFLAGS+= -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE に変える。-D_FFR_TLS_1 オプションは 8.15.0 リリース時に無くなっている(有効コードになった)。

  :
.if ${MK_OPENSSL} != "no"
# STARTTLS support
CFLAGS+=        -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
LIBADD+=        ssl crypto
.endif
  :

ports sendmail の場合

ports sendmail では /usr/ports/mail/sendmail/files/site.config.m4.tls ファイルを編集して -D_FFR_TLS_EC の後ろに -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE を加えた後、make install を実施する。

APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')

設定ファイルの変更

sendmail.mc

define(`confSERVER_CERT', `/usr/local/etc/dehydrated/certs/mail.example.jp/fullchain.pem')dnl
define(`confSERVER_KEY', `/usr/local/etc/dehydrated/certs/mail.example.jp/privkey.pem')dnl
define(`confSERVER_SSL_OPTIONS', `SSL_OP_NO_SSLv3,SSL_OP_NO_TLSv1,SSL_OP_CIPHER_SERVER_PREFERENCE')dnl
define(`confCACERT', `/usr/local/etc/dehydrated/certs/mail.example.jp/chain.pem')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCIPHER_LIST', `ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA')dnl
define(`confDH_PARAMETERS', `CERT_DIR/dh.param')dnl

/etc/rc.conf

以下の設定を追加する。

sendmail_cert_create="NO"

作成済みファイルの削除

sendmail_cert_create="YES" (デフォルト)によって既に作成済みのSSLサーバー証明書関連のファイルを削除する。

rm -f /etc/mail/certs/host.cert /etc/mail/certs/host.key
rm -f /etc/mail/certs/cacert.pem /etc/mail/certs/*.0

DHパラメータの生成

openssl dhparam -out /etc/mail/certs/dh.param 2048

ルートCA証明書の展開

/etc/mail/certs ディレクトリ以下に ports/security/ca_root_nss でインストールされた /usr/local/share/certs/ca-root-nss.crt より1証明書毎にファイルを作成(分解)して、openssl x509 -noout -hash -fingerprint を通した結果をファイル名(拡張子は .0)を作成する。

sendmail/STARTTLS設定ベストプラクティス (最終更新日時 2019-06-04 23:09:10 更新者 NorikatsuShigemura)