ubuntu 10.04 をメール サーバーに (SMTPS、POP3S、IMAP4S の準備 [電子証明書])

昨年の 7 月から半年以上に渡って (途中 4 ヶ月ほど放置プレーがあったが) Postfix を基盤にメールサーバーの整備の記録を綴ってきた。
それもこれでようやく最終章になる... だろう。
実はもう少し追加したい機能もあるのだが、ひとまずはここまでだろう。

最後に設定する機能は、SSL を使った通信路の暗号化だ。

Web の HTTP に対する HTTPS みたいなもので、SMTP なら SMTPS、POP3 なら POP3S、IMAP4 なら IMAP4S がそうだ。
暗号化することで、通信途中のパケットを解析しても内容が分からないようになる。

ただし、暗号化したからといって、接続してきたクライアントが信用できるかどうかが確認できるわけではない。
そのため、通常の SMTP や POP3、IMAP4 で接続してきたときと同様に、接続相手の認証を省略してはいけない

さて SSL で暗号化するには、最初に電子証明書の公開鍵と秘密鍵の組を用意しなくてはならないの。
だが、実は Postfix (正確には Postfix が依存している ssl-cert パッケージ) や Dovecot のインストールと同時に公開鍵と秘密鍵が作成されており、最初から SMTPS や POP3S、IMAP4S を使う準備が整っている。
Postfix は若干の設定変更が必要だが、Dovecot に至っては最初から有効になっている。

インストール時に作成された公開鍵と秘密鍵は、Postfix や Dovecot の設定ファイル (/etc/postfix/main.cf と /etc/dovecot/dovecot.conf) に書かれている。
Postfix の公開鍵は /etc/ssl/certs/ssl-cert-snakeoil.pem、秘密鍵は /etc/ssl/private/ssl-cert-snakeoil.key で、Dovecot の秘密鍵は /etc/ssl/certs/dovecot.pem、秘密鍵は /etc/ssl/private/dovecot.pem になっている。

余談だが、Postfix の公開鍵、秘密鍵の名前が普通に考えれば postfix.pem / postfix.key になりそうな気がするが、ssl-cert-snakeoil.pem / ssl-cert-snakeoil.pem という一風変わった名前になっている。
英語圏の snake oil という言葉には、どうやら日本の「蝦蟇の油」に近い意味があるらしい。
一言で言えば「万能を謳った効果の怪しげな膏薬」、ここから転じて「信頼できない」といった意味合いで使われているようだ。
つまり、Postfix をインストールしたときに自動的に作られる公開鍵、秘密鍵の組は「snake oil」=「信頼できない」鍵だから、きちんと作り直した方がいいというちょっとした洒落になっているのだろうと思われる。
snake oil という言葉について、もう少し詳しく知りたければ、Wikipedia の該当ページ 「Snake oil」、「Snake oil (cryptography)」 (何れも英語) をざっと読んでみるのももいいだろう。

なお、Postfix (依存関係にある ssl-cert パッケージ)  の電子証明書に、その名前に snake oil の文字列が含まれているのは、それらが信頼できる認証局 (CA) を利用していない自己署名証明書だからだと思われる。
つまり、信頼できる認証局に発行してもらった公開鍵、秘密鍵を使わないのであれば、いずれにせよ snake oil のままだということだ。
これは snake oil という文字列こそ含まれていないものの、Dovecot をインストールしたときに自動的に作成された電子証明書でも同じことがいえる。
もっとも、自己署名証明書、すなわち snake oil のままであったとしても、暗号化の強度が落ちるわけではないので、自己責任の範疇で SMTPS、POP3S、IMAP4S に使用する分には特に困ることもないだろう。

ところで、公開鍵にはホスト名が記述されていると先に書いた。
このため、接続先に指定したホスト名と公開鍵に記述されているホスト名が異なっていると、接続時に警告が表示されることがある。
Postfix (依存関係にある ssl-cert パッケージ)  や Dovecot をインストールのときに作られる公開鍵には、その時点で付けられていたホスト名が記述されている。
Postfix (依存関係にある ssl-cert パッケージ)  や Dovecot をインストールした後にホスト名を変更したり、ホスト名と別の名前 (ホスト名と別につけた smtp.example.jp のような機能名) を使って接続させようとしたときなどでは、不都合が生じることもある。

現時点でどのようなホスト名が記述されているかを確認するために、以下のコマンドを実行する。
Issuer とか Subject とかの行に現れる CN= に続く部分がホスト名だ。

ホスト名を変更したり、ホスト名と別の名前 (ホスト名と別につけた smtp.example.jp のような機能名) を使って接続させようとするときなどに、それに合わせて公開鍵に記述されているホスト名を変えるには、make_ssl_cert コマンドか openssl コマンドを実行する。
make_ssl_cert コマンドは、最後に openssl コマンドを呼び出して公開鍵と秘密鍵を作成させているだけなので、ここでは openssl コマンドを使うことにする。
例えば、ホスト名を smpt.example.jp にした公開鍵と秘密鍵をそれぞれ postfix.pem、postfix.key という名前で作成するなら以下のようにすればいい。
公開鍵は /etc/ssl/certs ディレクトリに、秘密鍵は /etc/ssl/private ディレクトリに保存するのが一般的なので、ここでもそれに倣っている。

「Country Name」、「State or Province Name」から「Email Address」までの行の「:」の左側が openssl コマンドが表示したプロンプトで、「:」の右側がそれぞれのプロンプトに入力した文字だ。
「Country Name」や「State or Province Name」など「Common Name」以外のプロンプトには「.」 (ピリオド) 一文字を入力して空欄のままとし、「Common Name」のプロンプトには公開鍵に記述したいホスト名 smtp.example.jp を入力した。
「Common Name」のプロンプトに入力した文字列が、新たなホスト名として公開鍵に書き込まれる。
また、コマンド実行時のオプションで有効期限に 3652 日 (約 10 年) を指定している (有効期限を無期限にすることはできなさそうだ)。

作成された公開鍵の内容を確認する。

このように作成した公開鍵、秘密鍵を Postfix と Dovecot で供用してもいいし、それぞれを別に作成しても構わない。
別にするときは、当然だがファイル名 (openssl コマンドの –out オプションと –keyout オプションに与えるファイル名) を別々にしなくてはならない。

なお、秘密鍵を保存する /etc/ssl/private ディレクトリは、アクセス権が厳しく設定されている。
これを踏まえて、作成した秘密鍵にも適切にアクセス権を設定しておくべきだろう。
現状のアクセス権は以下のようになっている。

これを踏まえ、今 新たに作成した秘密鍵 /etc/ssl/private/postfix.key のアクセス権を以下の二つのコマンドで割り当てておく。

さて、実際にこの公開鍵、秘密鍵を使って SMTPS、POP3S、IMAP4S が使えるようにするには、どうしたらいいのだろうか。
それについては、次の記事で書くことにする。

関連記事

コメントを残す