Ubuntu(10.04)の postfix(2.7.0)に STLS/STARTTLSを導入する手順。
※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。
postfixのバージョンは「/usr/sbin/postconf | grep mail_version」で取得。
- postfixのSASLは設定済み(とする)
$ sudo nano /etc/postfix/main.cf
# SMTP-Auth setting
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
- dovecot側のSASLも同様(設定済みとする)
$ sudo nano /etc/dovecot/dovecot.conf
socket listen {
client {
path = /var/spool/postfix/private/auth-dovecot
mode = 0660
user = postfix
group = postfix
}
}
- TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
$ cd /usr/lib/ssl/misc
$ sudo nano CA.pl
#$CATOP="./demoCA";
$CATOP="./postfixCA";
$ sudo nano /usr/lib/ssl/openssl.cnf
#dir = ./demoCA # Where everything is kept
dir = ./postfixCA # Where everything is kept
- private keyを作る。(一部伏字)
$ sudo ./CA.pl -newca
CA certificate filename (or enter to create) # 空Enterキー
Making CA certificate ...
Generating a 1024 bit RSA private key
............................++++++
.........................++++++
writing new private key to './postfixCA/private/cakey.pem'
Enter PEM pass phrase: # パスワードを入れる
Verifying - Enter PEM pass phrase: # もう1回パスワード
-----
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-ken
Locality Name (eg, city) []:Yokosuka-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Mamoru Satake
Email Address []:mam@x-xx.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # 入れなくてよい
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./postfixCA/private/cakey.pem: # パスワードを入れる
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
xx:ee:33:xx:6b:xx:59:xx
Validity
Not Before: Jul 11 21:43:17 2011 GMT
Not After : Jul 10 21:43:17 2014 GMT
Subject:
countryName = JP
stateOrProvinceName = Kanagawa-ken
organizationName = Satake Studio,LPC.
commonName = Mamoru Satake
emailAddress = mam@x-xx.jp
X509v3 extensions:
X509v3 Subject Key Identifier:
xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
X509v3 Authority Key Identifier:
keyid:xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
DirName:/C=JP/ST=Kanagawa-ken/O=Satake Studio,LPC./CN=Mamoru Satake/emailAddress=mam@x-xx.jp
serial:xx:EE:xx:AE:xx:F8:xx:F1
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Jul 10 21:43:17 2014 GMT (1095 days)
Write out database with 1 new entries
Data Base Updated
- もう1回 private keyを作る。(なんでだ?)
$ cd postfixCA/
$ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
Generating a 1024 bit RSA private key
..........++++++
..............++++++
writing new private key to 'postfix-key.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-ken
Locality Name (eg, city) []:Yokosuka-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Mamoru Satake
Email Address []:mam@x-xx.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
- CSR に認証局の証明書で署名。
$ sudo sh -c "echo '00' > serial"
$ cd /usr/lib/ssl/misc
$ sudo rm postfixCA/index.txt* # 「TXT_DB error number 2」エラー対策
$ sudo touch postfixCA/index.txt
$ sudo openssl ca -out postfix-cert.pem -infiles postfixCA/postfix-req.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./postfixCA/private/cakey.pem: # パスワードを入れる
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 0 (0x0)
Validity
Not Before: Jul 12 00:02:50 2011 GMT
Not After : Jul 11 00:02:50 2012 GMT
Subject:
countryName = JP
stateOrProvinceName = Kanagawa-ken
organizationName = Satake Studio,LPC.
commonName = Mamoru Satake
emailAddress = mam@x-xx.jp
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
xx:E3:xx:32:xx:D4:xx:EF:xx:2A:xx:35:xx:4C:xx:DC:xx:AD:xx:D5
X509v3 Authority Key Identifier:
keyid:xx:B2:xx:88:xx:4E:xx:B4:xx:73:xx:DF:xx:5A:xx:72:xx:55:xx:33
Certificate is to be certified until Jul 11 00:02:50 2012 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
- ファイルの配置&postfixリスタート
$ sudo cp postfix-cert.pem /etc/ssl/certs/
$ sudo cp postfixCA/postfix-key.pem /etc/ssl/private/
$ sudo chmod 644 /etc/ssl/certs/postfix-cert.pem
$ sudo chmod 400 /etc/ssl/private/postfix-key.pem
$ sudo service postfix restart
* Stopping Postfix Mail Transport Agent postfix
...done.
* Starting Postfix Mail Transport Agent postfix
...done.
- これでOK(のはず)