次に説明・設定する機能は、SSL を使ったメール通信経路の暗号化です。
参考URL https://www.compnet.jp/archives/2119
Web の HTTP に対する HTTPS みたいなもので、メールではSMTP なら SMTPS、POP3 なら POP3S、IMAP4 なら IMAP4S のプロトコルとなります。
暗号化することで、通信途中のパケットを解析しても内容が分からないようになります。
ただし、暗号化したからといって、接続してきたクライアントが信用できるかどうかが確認できるわけではありません。
そのため、通常の SMTP や POP3、IMAP4 で接続してきたときと同様に、接続相手の認証を省略してはいけません。
今回は通信経路はSSL/TLSで暗号化し送信メールの認証はSASLを用います。
さて SSL で暗号化するには、最初に電子証明書の公開鍵と秘密鍵の組を用意しなくてはならないのですが、
実は Postfix (正確には Postfix が依存している ssl-cert パッケージ) や Dovecot はインストールと同時に公開鍵と秘密鍵が作成されています。
つまり、最初から SMTPS や POP3S、IMAP4S を使う準備が整っています(最新版のPostfixではデフォルトインストールされていません)。
Postfix は設定変更が必要ですが、Dovecot に至っては最初から有効になっています(メールの読み込みにユーザ認証が必要ですから経路の暗号化は当然のことです)。
インストール時に作成された公開鍵と秘密鍵の保存場所や名前、設定ファイルの場所は以下の通りです。
鍵の設定ファイル
【Postfix】
/etc/postfix/main.cf(最新版のPostfixでは明示的に記述しないといけません)
【Dovecot】
/etc/dovecot/conf.d/10-ssl.conf
鍵の名前と場所
【Postfix】
公開鍵:/etc/ssl/certs/ssl-cert-snakeoil.pem
(/etc/pki/tls/certs/postfix.pem)、
秘密鍵:/etc/ssl/private/ssl-cert-snakeoil.key
(/etc/pki/tls/private/postfix.key)
【Dovecot】
公開鍵:/etc/pki/dovecot/certs/dovecot.pem
秘密鍵:/etc/pki/dovecot/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= に続く部分がホスト名となります。
[root@cs7sv31 certs]# openssl x509 -in /etc/pki/dovecot/certs/dovecot.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 13102374387192064370 (0xb5d4fc15f6c26972)
Signature Algorithm: sha1WithRSAEncryption
Issuer: OU=IMAP server, CN=imap.example.com/emailAddress=postmaster@example.com
Validity
Not Before: Dec 2 22:39:43 2014 GMT
Not After : Dec 2 22:39:43 2015 GMT
Subject: OU=IMAP server, CN=imap.example.com/emailAddress=postmaster@example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c0:ce:b6:15:a9:99:c6:ab:f0:d2:84:dd:a1:ac:
b0:0d:c8:d2:eb:de:e2:bc:1d:3a:0a:89:23:43:74:
31:6e:1a:3c:25:db:bf:b0:7b:04:b3:4e:dd:e1:e5:
66:b0:73:45:97:d9:a4:2b:4e:32:70:37:f7:cd:0c:
57:88:a7:27:47:90:e2:cb:16:a6:43:8b:2a:f3:0f:
42:a3:2b:c3:97:c4:8f:7e:b5:2d:90:25:ad:9a:71:
e1:ff:70:18:e2:26:c3:d3:60:e3:87:4c:dc:ba:f3:
da:61:90:d2:26:47:75:c1:38:53:f4:19:9f:c2:f2:
6f:dd:e4:1d:77:f9:d9:c7:5b
Exponent: 65537 (0x10001)
X509v3 extensions:
Netscape Cert Type:
SSL Server
Signature Algorithm: sha1WithRSAEncryption
89:53:1d:14:98:e8:6a:b8:ca:6e:07:ff:b6:69:35:e2:a1:84:
84:bc:66:d7:cc:54:15:a7:c3:c9:4b:c2:97:fe:96:00:9e:8f:
56:8b:77:50:9c:3c:97:cd:4e:d4:7d:ef:e2:44:fc:ba:f7:b0:
08:43:56:12:ac:18:00:a6:98:91:d0:b3:ca:d6:4e:a3:41:4b:
52:e8:8f:4e:38:14:0a:9b:92:78:bf:51:b1:fa:48:43:3b:d4:
c3:d5:ef:f8:43:c8:f7:2e:b3:0a:ed:3c:86:c7:f7:b7:13:bd:
66:54:83:a2:9c:32:16:97:21:94:40:68:de:f4:eb:a8:49:87:
79:5e
-----BEGIN CERTIFICATE-----
MIICQzCCAaygAwIBAgIJALXU/BX2wmlyMA0GCSqGSIb3DQEBBQUAMFgxFDASBgNV
BAsTC0lNQVAgc2VydmVyMRkwFwYDVQQDExBpbWFwLmV4YW1wbGUuY29tMSUwIwYJ
KoZIhvcNAQkBFhZwb3N0bWFzdGVyQGV4YW1wbGUuY29tMB4XDTE0MTIwMjIyMzk0
M1oXDTE1MTIwMjIyMzk0M1owWDEUMBIGA1UECxMLSU1BUCBzZXJ2ZXIxGTAXBgNV
BAMTEGltYXAuZXhhbXBsZS5jb20xJTAjBgkqhkiG9w0BCQEWFnBvc3RtYXN0ZXJA
ZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDOthWpmcar
8NKE3aGssA3I0uve4rwdOgqJI0N0MW4aPCXbv7B7BLNO3eHlZrBzRZfZpCtOMnA3
980MV4inJ0eQ4ssWpkOLKvMPQqMrw5fEj361LZAlrZpx4f9wGOImw9Ng44dM3Lrz
2mGQ0iZHdcE4U/QZn8Lyb93kHXf52cdbAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE
AwIGQDANBgkqhkiG9w0BAQUFAAOBgQCJUx0UmOhquMpuB/+2aTXioYSEvGbXzFQV
p8PJS8KX/pYAno9Wi3dQnDyXzU7Ufe/iRPy697AIQ1YSrBgAppiR0LPK1k6jQUtS
6I9OOBQKm5J4v1Gx+khDO9TD1e/4Q8j3LrMK7TyGx/e3E71mVIOinDIWlyGUQGje
9OuoSYd5Xg==
-----END CERTIFICATE-----
[root@cs7sv31 certs]#
[root@cs7sv31 certs]# openssl x509 -in /etc/pki/tls/certs/postfix.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 15311517932393640369 (0xd47d706f8458b1b1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=jp, ST=kanagawa, L=hadano, O=kanatech, OU=west, CN=cs7sv31.west31.kanatech31.ac.jp/emailAddress=root@west31.kanatech31.ac.jp
Validity
Not Before: Dec 4 02:51:15 2014 GMT
Not After : Dec 3 02:51:15 2024 GMT
Subject: C=jp, ST=kanagawa, L=hadano, O=kanatech, OU=west, CN=cs7sv31.west31.kanatech31.ac.jp/emailAddress=root@west31.kanatech31.ac.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:d6:6e:4e:5c:1f:60:ec:17:cd:5f:81:21:c5:ea:
93:1e:88:c0:3e:58:fc:06:66:10:83:70:b6:a5:c5:
b0:d0:70:0f:26:c1:18:85:d8:2d:7f:10:c7:a4:95:
32:1e:f6:70:c3:c7:6a:0c:4f:b3:9f:d9:93:d3:23:
ad:09:67:b8:5b:95:ab:8f:6a:76:2a:01:fe:aa:d1:
15:04:c5:cd:48:bd:78:89:67:59:4f:15:34:a5:cd:
a0:1d:16:b7:e9:b0:48:a4:1a:57:38:a9:13:2d:68:
97:45:81:a0:57:a7:67:a8:f4:3c:98:a6:f9:61:f8:
00:15:21:a0:97:6c:d9:a3:11:e0:7c:08:dd:64:b7:
66:df:c4:a4:e1:58:33:9c:a1:71:e3:db:71:a5:c4:
64:59:5c:16:58:c8:d2:25:27:eb:99:ab:35:5f:49:
76:f0:75:39:ce:5f:f6:6b:d1:43:9b:9d:5c:15:9e:
ce:bb:bd:b8:0b:7f:6f:9c:9a:96:7c:cd:b1:66:a2:
e0:e1:b9:9f:19:b1:d0:97:5d:4f:4d:65:7d:9b:67:
80:dc:74:18:3a:06:3d:bb:02:07:fe:11:76:3e:f0:
55:9d:7b:7f:14:ef:91:36:0e:be:67:58:e4:ef:ec:
c3:10:57:ac:c2:49:06:30:45:37:32:1f:e9:d5:be:
a2:1f
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
3B:69:23:61:F8:2E:FE:5E:6C:35:06:C9:C8:62:17:37:EA:2E:82:71
X509v3 Authority Key Identifier:
keyid:3B:69:23:61:F8:2E:FE:5E:6C:35:06:C9:C8:62:17:37:EA:2E:82:71
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
cf:67:09:5a:b0:9f:28:0a:de:17:3b:22:ea:9e:c2:6b:be:c7:
ae:34:67:75:05:3b:59:f9:18:c7:3f:45:06:62:2d:9f:d7:3d:
7f:17:cd:2f:6c:f3:03:f5:7e:a0:03:05:f2:28:42:25:7f:5b:
9a:26:a4:44:b5:0d:6d:d5:b6:66:85:bc:74:ae:22:a7:39:a3:
1f:cc:b0:46:f0:d0:96:af:ad:3a:a1:04:8e:f6:da:e2:50:62:
bc:2a:8c:31:4c:2d:50:9d:8a:96:41:f6:45:34:e6:4c:0c:2e:
83:ff:6f:16:be:38:1f:ee:f8:b6:ee:b3:f3:6b:31:17:17:12:
04:a7:77:93:44:4e:fc:6d:8d:cb:76:45:76:b5:56:54:83:9e:
07:f1:58:64:eb:0a:b5:ee:95:df:21:4a:3d:f9:5a:b6:6b:f6:
2a:69:30:a8:72:66:3c:e3:38:e3:0d:43:0b:cf:10:ee:c4:e3:
24:a0:ed:83:f3:ba:59:8a:60:7c:6f:29:39:01:38:08:a2:74:
e8:af:2b:c7:f9:f5:36:b5:c4:28:72:d8:50:73:03:f6:14:ef:
25:8d:db:2d:8c:f5:c4:e7:78:75:04:88:5a:15:13:a3:5d:4f:
99:9a:72:ec:c7:34:c3:02:38:8e:05:fc:5d:d9:6e:f5:4a:72:
6d:b3:5d:83
-----BEGIN CERTIFICATE-----
MIIEKTCCAxGgAwIBAgIJANR9cG+EWLGxMA0GCSqGSIb3DQEBCwUAMIGqMQswCQYD
VQQGEwJqcDERMA8GA1UECAwIa2FuYWdhd2ExDzANBgNVBAcMBmhhZGFubzERMA8G
A1UECgwIa2FuYXRlY2gxDTALBgNVBAsMBHdlc3QxKDAmBgNVBAMMH2NzN2NsMzEu
d2VzdDMxLmthbmF0ZWNoMzEuYWMuanAxKzApBgkqhkiG9w0BCQEWHHJvb3RAd2Vz
dDMxLmthbmF0ZWNoMzEuYWMuanAwHhcNMTQxMjA0MDI1MTE1WhcNMjQxMjAzMDI1
MTE1WjCBqjELMAkGA1UEBhMCanAxETAPBgNVBAgMCGthbmFnYXdhMQ8wDQYDVQQH
DAZoYWRhbm8xETAPBgNVBAoMCGthbmF0ZWNoMQ0wCwYDVQQLDAR3ZXN0MSgwJgYD
VQQDDB9jczdjbDMxLndlc3QzMS5rYW5hdGVjaDMxLmFjLmpwMSswKQYJKoZIhvcN
AQkBFhxyb290QHdlc3QzMS5rYW5hdGVjaDMxLmFjLmpwMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA1m5OXB9g7BfNX4EhxeqTHojAPlj8BmYQg3C2pcWw
0HAPJsEYhdgtfxDHpJUyHvZww8dqDE+zn9mT0yOtCWe4W5Wrj2p2KgH+qtEVBMXN
SL14iWdZTxU0pc2gHRa36bBIpBpXOKkTLWiXRYGgV6dnqPQ8mKb5YfgAFSGgl2zZ
oxHgfAjdZLdm38Sk4VgznKFx49txpcRkWVwWWMjSJSfrmas1X0l28HU5zl/2a9FD
m51cFZ7Ou724C39vnJqWfM2xZqLg4bmfGbHQl11PTWV9m2eA3HQYOgY9uwIH/hF2
PvBVnXt/FO+RNg6+Z1jk7+zDEFeswkkGMEU3Mh/p1b6iHwIDAQABo1AwTjAdBgNV
HQ4EFgQUO2kjYfgu/l5sNQbJyGIXN+ougnEwHwYDVR0jBBgwFoAUO2kjYfgu/l5s
NQbJyGIXN+ougnEwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAz2cJ
WrCfKAreFzsi6p7Ca77HrjRndQU7WfkYxz9FBmItn9c9fxfNL2zzA/V+oAMF8ihC
JX9bmiakRLUNbdW2ZoW8dK4ipzmjH8ywRvDQlq+tOqEEjvba4lBivCqMMUwtUJ2K
lkH2RTTmTAwug/9vFr44H+74tu6z82sxFxcSBKd3k0RO/G2Ny3ZFdrVWVIOeB/FY
ZOsKte6V3yFKPflatmv2KmkwqHJmPOM44w1DC88Q7sTjJKDtg/O6WYpgfG8pOQE4
CKJ06K8rx/n1NrXEKHLYUHMD9hTvJY3bLYz1xOd4dQSIWhUTo11PmZpy7Mc0wwI4
jgX8Xdlu9UpybbNdgw==
-----END CERTIFICATE-----
[root@cs7cl31 certs]#
新たな証明書を作成るす場合には openssl コマンドを実行します。
それでは、さっそく postfix 用の証明書を作成してみます。
●電子証明書(公開鍵・秘密鍵)の作成
電子証明書(自己証明書)の有効期間は10年(–days オプションは 3652 )
[root@cs7cl31 tls]# openssl req -new -x509 -days 3652 -nodes -out /etc/pki/tls/certs/postfix.pem -keyout /etc/pki/tls/private/postfix.key
Generating a 2048 bit RSA private key
.................................................................+++
......................................................................................................................................................+++
writing new private key to '/etc/pki/tls/private/postfix.key'
-----
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) [XX]:jp
State or Province Name (full name) []:kanagawa
Locality Name (eg, city) [Default City]:hadano
Organization Name (eg, company) [Default Company Ltd]:kanatech
Organizational Unit Name (eg, section) []:west
Common Name (eg, your name or your server's hostname) []:cs7cl31.west31.kanatech31.ac.jp
Email Address []:root@west31.kanatech31.ac.jp
[root@cs7cl31 tls]#
コマンド実行時のオプションで有効期限に 3652 日 (約 10 年) を指定しています (有効期限を無期限にすることはできなさそうです)。
作成された公開鍵の内容を確認します。
# openssl x509 -in /etc/pki/tls/certs/postfix.pem -text
このように作成した公開鍵、秘密鍵を Postfix と Dovecot で供用してもいいし、それぞれを別に作成しても構いません。
別にするときは、当然ですがファイル名 (openssl コマンドの –out オプションと –keyout オプションに与えるファイル名) を別々にしなくてはなりません。
なお、秘密鍵を保存する /etc/ssl/private ディレクトリは、アクセス権が厳しく設定されています。
これを踏まえて、作成した秘密鍵にも適切にアクセス権を設定しておきます。
今 新たに作成した公開鍵と秘密鍵の所有者アクセス権は以下のように設定しておくこと。
[root@cs7cl31 certs]# ll /etc/pki/tls/certs/postfix.pem
-rw-r--r-- 1 root postfix 1505 12月 5 11:49 /etc/pki/tls/certs/postfix.pem
[root@cs7cl31 certs]# ll /etc/pki/tls/private/postfix.key
-rw-r--r-- 1 root postfix 1704 12月 5 11:49 /etc/pki/tls/private/postfix.key
[root@cs7cl31 certs]#
[root@centos7t new]# ll /etc/pki/tls/certs/postfix.pem
-rw-r--r-- 1 root root 1566 12月 5 14:37 /etc/pki/tls/certs/postfix.pem
[root@centos7t new]#
chown root:postfix /etc/pki/tls/certs/postfix.pem
[root@centos7t new]# ll /etc/pki/tls/private/postfix.key
-rw-r--r-- 1 root root 1704 12月 5 14:37 /etc/pki/tls/private/postfix.key
[root@centos7t new]#
chown root:postfix /etc/pki/tls/private/postfix.key[root@centos7t new]# ll /etc/pki/tls/certs/postfix.pem
-rw-r--r-- 1 root postfix 1566 12月 5 14:37 /etc/pki/tls/certs/postfix.pem
[root@centos7t new]# ll /etc/pki/tls/private/postfix.key
-rw-r--r-- 1 root postfix 1704 12月 5 14:37 /etc/pki/tls/private/postfix.key
[root@centos7t new]#