sendmailにおけるTLS (FreeBSD PRESS No.6)

梅本肇 / ume@mahoroba.org

1. STARTTLSとは

 Webの世界ではHTTPを暗号化するためにHTTPSが広く使 用されています。HTTPSはSSLを使用して暗号路を確保し その中にHTTPを流しているわけですが、SSLはHTTP専用 というわけではなく、汎用的に様々なプロトコルを通す ことができます。汎用的にSSLによる暗号路を確保する プログラムとしてstunnel*1)やbjorb*2)などがあります。
 最近、SSLをアプリケーション・プロトコルに取り込 むことが活発に行われています。SMTPにおけるSTARTTLS もそのひとつです。
 なぜSTARTSSLではないのだろうと疑問に思われる読者 もおられることと思います。SSLは元々Netscape社が開 発したものです。IETFにおいてSSLv3をベースにして TLSv1がまとめられました。*3)実際にはTLSはSSLv3と非 常に近いものです。

 STARTTLSはRFC2487 - SMTP Service Extension for Secure SMTP over TLSで規定されています。
 STARTTLSを使用することで、

ができるようにになります。
 ここで注意しなければならないのは、SMTPは end-to-endのメカニズムではないということです。つま り、配送途中で中継されるようなケースでは、必ずしも 相手に届くまでの全ての経路が暗号化されているとは限 らないということです。

2. STARTTLS対応sendmailの作成

 sendmailのオリジナル配布物を使用してTLS対応にす るためには、opensslのライブラリを用意し、コンパイ ル時にいくつかのオプションを指定する必要があります。
 最近のFreeBSDは標準でopensslが添付されていること もあり、4.2-RELEASE以降ではデフォルトでTLSが有効に なっています。つまり、FreeBSDのsendmailをクライア ントとして使用した場合、送信先のSMTPサーバが STARTTLSを受け付けるようになっていると、自動的に暗 号路を確保しメールを送信するように既になっています。
 しかし、サーバとしてクライアントからのSTARTTLS 要求を受け付けるためには、sendmail.cfに設定が必要 になります。
 ちなみに、sendmailをオリジナル・アーカイブからイ ンストールする場合、devtools/Site/site,config.m4に リスト1のように指定します。
リスト1: sendmail作成時の指定
PREPENDDEF(`confENVDEF',
           `-DSTARTTLS -D_FFR_TLS_O_T -D_FFR_TLS_1 -D_FFR_TLS_TOREK')
APPENDDEF(`confINCDIRS',
          `-I/usr/local/include')
             ^^^^^^^^^^^^^^^^^^
APPENDDEF(`confLIBS',
          `-L/usr/local/lib -lssl -lcrypto')
             ^^^^^^^^^^^^^^
              ↑opensslのライブラリがインストールされているディレクトリ

3. STARTTLSの設定

 STARTTLSは以下のような使い方ができます。
1) クライアントの認証を行わず、取り敢えず暗 号路を確保する。
2) 加えて、クライアントの認証を行い、リレー を許可したりする。
おそらく、暗号路を確保するのがSTARTTLS導入の大き な目的で、認証はSMTP AUTHで行うケースが多いでしょ うから、2)は必要ないかもしれません。2)を積極的に使 いたいとすれば、SMTP AUTHなどのように別途鍵を用意 するのではなく、証明書を用いて認証できるといったと ころでしょうか。これにより、他のPKI*5)アプリケー ションと証明書を共有できる可能性があります。
 まず、1)の場合の設定について説明し、後に2)につい て説明します。

3.1. STARTTLSの設定 (認証なし)

 認証を行わずに取り敢えず暗号路さえ確保できれば良 い場合は、サーバ証明書を自己署名として扱います。CA*6) を別途用意するのではなく、サーバ側のsendmail に 証明書*7)を作るだけで実現できます。
 ここでは、/etc/mail/certsというディレクトリを作っ て、そこに証明書関係のファイルを置くことにします。(図1) /etc/mail/certsにroot以外のアクセス権限があると sendmailが文句を言いますので注意して下さい。
図1: 証明書用ディレクトリの作成
# cd /etc/mail
# mkdir certs
# chmod og-rwx certs
 では、証明書を生成しましょう。証明書を生成するには /etc/mail/certsで以下のコマンドを実行します。
openssl req -new -x509 -nodes -out cert.pem
 いくつか質問してきますので適宜答えると、cert.pem とprivkey.pemが生成されます。(図2) cert.pemが証明書、 privkey.pemがプライベートキーです。
 デフォルトで生成した場合、プライベートキーを使用 するためにはパスフレーズが要求されます。sendmailか ら使えるよう-nodesを指定し、パスフレーズが必要ない ようしてあります。
 なお、質問される内容について/etc/ssl/openssl.cnf でデフォルト値を設定しておくことができます。
図2: 証明書の生成
ume@piano:127# cd /etc/mail/certs
ume@piano:128# openssl req -new -x509 -nodes -out cert.pem
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..++++++
...............................++++++
writing new private key to 'privkey.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]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mahoroba.Org
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:piano.mahoroba.org
Email Address []:postmaster@mahoroba.org
 sendmailが文句を言わないように、証明書およびプライ ベートキーをrootのみがアクセスできるようにしておき ます。
chmod og-rwx *
 では、sendmailに証明書の在処を教えてあげましょう。 リスト2を見て下さい。設定項目は以下の4項目です。
confCACERT_PATH
 CAの証明書が格納されているディレクトリのパスを指 定します。
confCACERT
 CAの証明書のファイルを指定します。
confSERVER_CERT
 自サーバの証明書のファイルを指定します。 sendmailがサーバとして動作する際、ここで指定された 証明書が使用されます。
confSERVER_KEY
 サーバの証明書のプライベートキーのファイルを指定 します。
 ここでは、CAを使用しませんので、confCACERTには自 分自身の証明書を指定しておきます。
リスト2: 認証なし時の.mcファイルの例
define(`confCACERT_PATH', `MAIL_SETTINGS_DIR`'certs/')
define(`confCACERT', `confCACERT_PATH`'cert.pem')
define(`confSERVER_CERT', `confCACERT_PATH`'cert.pem')
define(`confSERVER_KEY', `confCACERT_PATH`'privkey.pem')

3.2. STARTTLS動作確認

 SMTPサーバSTARTTLSに対応していると、EHLOに対して 250-STARTTLSを返します。(図3)
図3: STARTTLS動作確認
ume@piano:111> telnet localhost smtp
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 piano.mahoroba.org ESMTP Sendmail 8.11.4/8.11.4/mille; Sat, 7 Jul 2001 20:54:45 +0900 (JST)
EHLO localhost
250-piano.mahoroba.org Hello IDENT:nmJWAV9lLZG72sI253BxjMpoGrds2NrfSepB0uuLvu2l2DPTAWxL+Das3hXs4bPa@localhost [::1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-STARTTLS	<------------------ STARTTLSを返している
250 HELP
 では、今設定を行ったsendmailに対して、STARTTLS付 で作られたsendmailからメールを送信してみましょう。 STARTTLSを使用した場合、メールのReceived:ヘッダに その旨が記録されます。(図4)
図4: STARTTLS使用時のReceived:ヘッダの例
Received: from peace.mahoroba.org (IDENT:Zph8oc9Mu6WRxMrGFR9Z5eK1baEXjQAzKbuhSyXE9NqGrkpajZw9Gi3Cf5RlpMog@peace.mahoroba.org [2001:200:301:0:200:f8ff:fe05:3eae])
	by piano.mahoroba.org (8.11.4/8.11.4/piano) with ESMTP/inet6 id f67Bc1307862
	(using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 bits) verified NO)
	for <ume@mahoroba.org>; Sat, 7 Jul 2001 20:38:04 +0900 (JST)
	(envelope-from ume@mahoroba.org)

3.3. STARTTLSの設定 (クライアント認証あり)

 では次に、クライアント認証ありの場合の設 定を行います。
 クライアントの認証に基づいて、受信を拒否した りリレーを許可したりすることができるようになります。
 クライアントを認証したい場合は、CAが必要になりま す。
 認証関係は図5のようになります。サーバはCAの証明書 を持ちます。クライアントは事前にCAに署名してもらっ た証明書を持ちます。STARTTLS時にクライアントはこの 証明書をサーバに送ります。サーバは、送られてきた証明書 がCAによって署名されたものかどうかをCAの証明書を用い て検証します。
 ここで、sendmailはサーバとしての動作とクライアン トとしての動作が共存している点に留意して下さい。
 では、少しsendmailから外れますが、まずopensslに よるCA作成の話をして、sendmailの設定に戻りたいと思 います。
図5: 認証関係
認証関係

3.3.1. CAの作成

 CAを作成するにあたってまずCA関係のファイルを置く ディレクトリを決めます。FreeBSDでは/etc/sslに opensslの設定ファイルが置かれていますので、ここで は、/etc/ssl/CAに置くことにします。図6の手順に従っ て作業して下さい。
図6: CA作成手順例
# cd /etc/ssl
# mkdir CA
# cd CA
# mkdir certs crl newcerts private
# chmod og-rwx private
# echo "01" > serial
# cp /dev/null index.txt
ここで、各ファイルの役割は図7の通りです。
図7: CAのファイル構成
/etc/ssl/
      ├ CA/
      │  ├ cacert.pem		CAの証明書
      │  ├ certs/		発行した証明書の置き場
      │  ├ crl/		発行したCRL*8)の置き場
      │  ├ index.txt		データベースの索引
      │  ├ index.txt.old
      │  ├ newcerts/		新規証明書の置き場
      │  │  └ 01.pem		「シリアル番号.pem」というファイル名で
      │  │			自動的に格納されます。
      │  ├ private/
      │  │  └ cakey.pem	CAのプライベートキー
      │  ├ serial		シリアル番号を保持
      │  └ serial.old
      └ openssl.cnf		openssl設定ファイル
次に、/etc/ssl/openssl.cnfを編集します。最低限いじ る必要のある箇所は、
dir = ./demoCA # Where everything is kept
となっている行です。CA用のディレクトリを /etc/ssl/CAとしますので、
dir = /etc/ssl/CA # Where everything is kept
と書き変えます。
 さて、CAの証明書を生成する準備が整いました。CAの 証明書を生成しましょう。/etc/ssl/CA
openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365
を実行し、いくつか質問に答えるとcacert.pemが生成さ れます。このとき、プライベートキーが /etc/private/cakey.pemに生成されます。(図8)
 なおCAを置くホストは、必ずしもsendmailをサーバと して動かすホストと同じである必要はありません。また、 CAはsendmail専用というわけでもありません。*9)
図8: CAの証明書の生成
ume@piano:151# cd /etc/ssl/CA
ume@piano:152# openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
............................++++++
.....++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:********
Verifying password - Enter PEM pass phrase:********
-----
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]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mahoroba.Org
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:piano.mahoroba.org
Email Address []:ca@mahoroba.org

3.3.2. クライアント用証明書の生成

 これで、CAができました。では、クライアント用の 証明書を用意しましょう。手順としては、クライアント側 でCSR*10)を生成し、CAに署名してもらいます。そして、 署名されたものが証明書となります。
 /etc/mail/certsで
openssl req -new -nodes -out newreq.pem
を実行すると、newreq.pemとprivkey.pemが生成されま す。(図9) newreq.pemがCSR、privkey.pemがプライベー トキーです。
 デフォルトで生成した場合、プライベートキーを使用 するためにはパスフレーズが要求されます。sendmailか ら使えるよう-nodesを指定し、パスフレーズが必要ない ようしてあります。
図9: クライアント用CSRの生成
ume@piano:154# cd /etc/mail/certs
ume@piano:155# openssl req -new -nodes -out newreq.pem
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
..........................++++++
.....................................++++++
writing new private key to 'privkey.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]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mahoroba.Org
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:piano.mahoroba.org
Email Address []:postmaster@mahoroba.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
 ここで生成されたnewreq.pemをすり替えられないよう安全な手段 でCAホストに持って行き、/etc/ssl/CAに置きます。そして、CAホ ストの/etc/ssl/CAで
openssl ca -policy policy_anything -out cert.pem -infiles newreq.pem
を実行します。このとき、CAのプライベートキーを使用 しますので、パスフレーズを入力します。そして、署名 するかどうか、コミットするかどうか確認されますので、 CSRの内容を確認し、良ければどちらもyと答えます。(図10)
 するとcert.pemが生成されます。これが証明書です。 すり替えられないよう安全な手段でクライアントホスト に持って行き、 /etc/mail/certsに置きます。
図10: 署名
ume@piano:164# openssl ca -policy policy_anything -out cert.pem -infiles newreq.pem
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:********
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Kanagawa'
localityName          :PRINTABLE:'Yokohama'
organizationName      :PRINTABLE:'Mahoroba.Org'
commonName            :PRINTABLE:'piano.mahoroba.org'
emailAddress          :IA5STRING:'postmaster@mahoroba.org'
Certificate is to be certified until Jul  7 10:46:50 2002 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

3.3.3. sendmail.cfの設定

 認証ありの場合は、.mcファイルにリスト3の項目を追 加します。
リスト3: 認証あり時の.mcファイルの例
define(`confCACERT_PATH', `MAIL_SETTINGS_DIR`'certs/')
define(`confCACERT', `confCACERT_PATH`'cacert.pem')
define(`confSERVER_CERT', `confCACERT_PATH`'cert.pem')
define(`confSERVER_KEY', `confCACERT_PATH`'privkey.pem')
define(`confCLIENT_CERT', `confCACERT_PATH`'cert.pem')
define(`confCLIENT_KEY', `confCACERT_PATH`'privkey.pem')
 ここで、認証なしの場合に比べてクライアントの設定 項目が2つ増えています。
confCLIENT_CERT
 自クライアントの証明書のファイルを指定します。 sendmailがクライアントとして動作する際、ここで 指定された証明書が使用されます。
confCLIENT_KEY
 クライアントの証明書のプライベートキーのファイ ルを指定します。
 また、confCACERTには、CAからcacert.pemをコピーし、 指定します。
 クライアントが認証された場合には、Received:ヘッ ダには図11のようにverified OKと記録されます。
図11: クライアント認証時のReceived:ヘッダの例
Received: from peace.mahoroba.org (IDENT:lf6Tohk1y2yBEYwc5/4mzz/6ZH1/M8QRYvclvLndSngE4x5sqOemFxsxMpOWYrlC@peace.mahoroba.org [3ffe:505:2:0:200:f8ff:fe05:3eae])
	by piano.mahoroba.org (8.11.4/8.11.4/piano) with ESMTP/inet6 id f67BnVL07964
	(using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 bits) verified OK)
	for <ume@mahoroba.org>; Sat, 7 Jul 2001 20:49:33 +0900 (JST)
	(envelope-from ume@mahoroba.org)
 ここで、クライアントの証明書がサーバの持っているCA の証明書で署名されていなかった場合、verified FAILと なります。一見失敗したように見えますが、この場合で もクライアントを識別できなかっただけで暗号路自体は 確保されています。信頼関係にないサーバの場合はご安 心下さい。
 また、クライアントが証明書を提示しなかった場合、つ まり、クライアントのsendmailがSTARTTLS対応で作られ ていて、sendmail.cfでSTARTTLSの設定をしていなかっ た場合は、verified NOとなります。

3.3.4. クライアント認証によるアクセス制御

 では、クライアントの認証ができるようになりましたの で、これに基づいてアクセス制御を行ってみましょう。

 アクセス制御の設定はaccess map (/etc/mail/access) に記述します。認証手段として、 以下の2通りが使えます。

CERTISSUER- 証明書発行者つまりCAの識別名*11)による制御
CERTSUBJECT- 証明書所有者の識別名による制御
 図12を見て下さい。これは、CAによって署名された 証明書の例です。ここで、Subject:行の「, 」を「/」に 置き換えたものが証明書所有者の識別名になります。ま た、DirName:行で識別名を保持しています。Issuer:行の 「, 」を「/」に置き換えたものが証明書発行者の識別名にな ります。
図12: CAによって署名された証明書の例
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=JP, ST=Kanagawa, L=Yokohama, O=Mahoroba.Org, CN=piano.mahoroba.org/Email=ca@mahoroba.org
        Validity
            Not Before: Jul  7 10:46:50 2001 GMT
            Not After : Jul  7 10:46:50 2002 GMT
        Subject: C=JP, ST=Kanagawa, L=Yokohama, O=Mahoroba.Org, CN=piano.mahoroba.org/Email=postmaster@mahoroba.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c5:6d:30:cd:41:10:38:07:ee:43:4e:09:84:d5:
                    6f:0f:a7:9d:29:87:18:bb:ba:9e:e4:c2:7e:81:40:
                    1f:35:bb:71:d9:88:3c:ec:cb:5e:6b:0a:23:e9:3d:
                    7d:f6:1f:d1:b6:6b:b8:f0:ff:d2:e6:9b:33:ff:24:
                    84:d1:ba:0e:fe:4c:96:40:32:b7:15:68:0a:d3:b4:
                    3f:e5:86:37:e9:aa:cb:08:c9:f8:b9:f5:5b:dc:a4:
                    1b:6a:5d:6d:e5:94:f4:f4:2d:af:c9:b1:b1:e7:1a:
                    e9:7c:6d:40:f8:61:5e:90:31:c6:45:64:09:83:de:
                    81:4d:be:a9:46:b0:7b:ee:45
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                3F:DE:4F:33:55:03:21:16:A3:D0:3B:15:0B:6B:CC:E5:50:14:77:99
            X509v3 Authority Key Identifier: 
                keyid:8A:89:34:3B:38:53:6B:7A:36:CF:13:9E:65:7E:14:B0:89:4B:0A:7E
                DirName:/C=JP/ST=Kanagawa/L=Yokohama/O=Mahoroba.Org/CN=piano.mahoroba.org/Email=ca@mahoroba.org
                serial:00

    Signature Algorithm: md5WithRSAEncryption
        12:e8:a1:4c:45:84:f8:c5:09:76:0f:0e:a0:b5:15:26:42:fe:
        86:f9:ba:8d:b4:59:9d:1f:19:62:44:f4:62:6c:ae:30:04:4c:
        90:c6:15:66:31:58:6e:b8:a6:11:2d:9c:3b:b8:e5:10:61:c2:
        9d:f4:8c:dd:43:66:9a:9b:71:5f:84:db:08:fb:aa:4b:9f:b4:
        a2:58:a4:e0:1c:74:ce:36:60:e7:cf:6b:2a:63:e3:ac:c3:ea:
        66:60:b6:bd:db:01:e6:0c:ab:41:05:df:9c:f9:81:5b:a1:81:
        6c:23:63:90:01:72:15:95:2c:f2:66:5a:5d:65:65:75:51:b2:
        ee:59
-----BEGIN CERTIFICATE-----
MIIDozCCAwygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhzELMAkGA1UEBhMCSlAx
ETAPBgNVBAgTCEthbmFnYXdhMREwDwYDVQQHEwhZb2tvaGFtYTEVMBMGA1UEChMM
TWFob3JvYmEuT3JnMRswGQYDVQQDExJwaWFuby5tYWhvcm9iYS5vcmcxHjAcBgkq
hkiG9w0BCQEWD2NhQG1haG9yb2JhLm9yZzAeFw0wMTA3MDcxMDQ2NTBaFw0wMjA3
MDcxMDQ2NTBaMIGPMQswCQYDVQQGEwJKUDERMA8GA1UECBMIS2FuYWdhd2ExETAP
BgNVBAcTCFlva29oYW1hMRUwEwYDVQQKEwxNYWhvcm9iYS5PcmcxGzAZBgNVBAMT
EnBpYW5vLm1haG9yb2JhLm9yZzEmMCQGCSqGSIb3DQEJARYXcG9zdG1hc3RlckBt
YWhvcm9iYS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMVtMM1BEDgH
7kNOCYTVbw+nnSmHGLu6nuTCfoFAHzW7cdmIPOzLXmsKI+k9ffYf0bZruPD/0uab
M/8khNG6Dv5MlkAytxVoCtO0P+WGN+mqywjJ+Ln1W9ykG2pdbeWU9PQtr8mxseca
6XxtQPhhXpAxxkVkCYPegU2+qUawe+5FAgMBAAGjggETMIIBDzAJBgNVHRMEAjAA
MCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd
BgNVHQ4EFgQUP95PM1UDIRaj0DsVC2vM5VAUd5kwgbQGA1UdIwSBrDCBqYAUiok0
OzhTa3o2zxOeZX4UsIlLCn6hgY2kgYowgYcxCzAJBgNVBAYTAkpQMREwDwYDVQQI
EwhLYW5hZ2F3YTERMA8GA1UEBxMIWW9rb2hhbWExFTATBgNVBAoTDE1haG9yb2Jh
Lk9yZzEbMBkGA1UEAxMScGlhbm8ubWFob3JvYmEub3JnMR4wHAYJKoZIhvcNAQkB
Fg9jYUBtYWhvcm9iYS5vcmeCAQAwDQYJKoZIhvcNAQEEBQADgYEAEuihTEWE+MUJ
dg8OoLUVJkL+hvm6jbRZnR8ZYkT0YmyuMARMkMYVZjFYbrimES2cO7jlEGHCnfSM
3UNmmptxX4TbCPuqS5+0olik4Bx0zjZg589rKmPjrMPqZmC2vdsB5gyrQQXfnPmB
W6GBbCNjkAFyFZUs8mZaXWVldVGy7lk=
-----END CERTIFICATE-----
 リスト4に証明書に基づいてリレーを許可する例を示し ます。この例では、証明書を発行したCAの識別名が /C=JP/ST=Kanagawa/L=Yokohama/O=Mahoroba.Org/CN=ca.mahoroba.org/Email=ca@mahoroba.org の場合および証明書所有者の識別名が /C=JP/ST=Kanagawa/L=Yokohama/O=Mahoroba.Org/CN=mail.mahoroba.org/Email=postmaster@mahoroba.org の場合にリレーを許可します。
リスト4: リレー許可の例
CERTISSUER:/C=JP/ST=Kanagawa/L=Yokohama/O=Mahoroba.Org/CN=ca.mahoroba.org/Email=ca@mahoroba.org    RELAY
CERTSUBJECT:/C=JP/ST=Kanagawa/L=Yokohama/O=Mahoroba.Org/CN=mail.mahoroba.org/Email=postmaster@mahoroba.org    RELAY
 自CAでないCAで署名された証明書についても認証できる ようにもできます。この場合、図13のようにCAの証明書 をconfCACERT_PATHに置きハッシュ値でアクセスできる ようにします。
図13: 他CAの証明書の登録
# cd /etc/mail/certs
# cp SOME/WHERE/cacert.pem mahoroba.pem
# ln -sf mahoroba.pem `openssl x509 -noout -hash < mahoroba.pem`.0
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                             ↑ ハッシュ値を生成

4. おわりに

 STARTTLSを用いると暗号路の確保ができます。SMTP AUTHをPLAINあるいはLOGINで使う場合は生パスワードが 流れますので、 STARTTLSと併用するのが望ましいでしょ う。
 また、STARTTLSを用いることにより、クライアント認 証を使ってリレー等の制御を行うこともできます。
 ただし、SMTPはend-to-endのメカニズムではないこと に注意して下さい。相手先にメールが届くまでの全ての 経路が暗号化されているとは限りません。
 SMTP AUTHとSTARTTLSをうまく使いこなして、安全に メールのやりとりを行いましょう。


*1) http://www.stunnel.org/
*2) http://www.hitachi-ms.co.jp/bjorb/
*3) RFC2246 - The TLS Protocol Version 1.0
*4) sendmail 8.12.0.Betaからメールを出すと、サー バの識別状況がログに記録されます。そのうちに、 信頼関係にないサーバに対してはメールを送らな いとか設定できるようになるのかもしれません。
*5) Internet X.509 Public Key Infrastructure
*6) CA - 認証局 (Certificate Authority)
*7) CERT - 証明書 (Certificate)
*8) CRL - 証明書失効リスト (Certificate Revocation List)
*9) 筆者はIKE (RFC2409 - The Internet Key Exchange) と共用しています。
*10) CSR - 証明書署名要求 (Certificate Signing Request)
*11) DN - 識別名 (Distinguished Name)


All Rights Reserved, Copyright (C) 2001,2005 Hajimu UMEMOTO
Last Modified Jan 7, 2005
ume@mahoroba.org