以前iPhone4S買った時に、外部から自宅のメールを読むのにSSLを導入した。
自分でしか使わないのと、結構な金額が掛かっちゃうと思っていたので、自己認証局(いわゆるオレオレ認証)で済ませていた。
ちょっと解説
SSLってアクセスしているサイトが「アヤシイ者ではないです!」っていうのを誰か(認証局)に認めて貰う仕組みがあって、信頼の置ける認証局はブラウザとかに最初からリストアップされてる訳です。
要はお金を払って、ブラウザにリストアップされている認証局に「アヤシイ者ではない」確認をしてもらい、証明書を発行してもらう訳ですが、いわゆる「オレオレ認証」と言っているのはこの認証局も自分でやってしまう訳です。
アクセスするブラウザ側からすると、全く知らない人から
「コイツ大丈夫ですゼ。(メ▼▼)y-.。o○」
とか怪しさ全開なコト言われるんで、こんな画面とか出して警告する訳です。
まぁ、アクセスしているのも自分なので自作自演なのですが、何故そこまでするのかと言うと、通信が暗号化されるからですな。
でね、最近ちょっと調べていたらサーバー証明って安いのは年千円とかで取れちゃうのよね。。。
昨日の昼飯(なぜか珍しく豪遊してうなぎを食った(゚д゚))より安いじゃん。
ちょっと前まで数万円掛かると思ってたよ。
個人使用で自サーバーで商売とかするつもりもないので、安いので十分っす。(オレオレでも十分という噂もあるがw)
という訳でとりあえず1年分速攻で申し込んだ。
申込先はDefineのRapidSSL。
最初に自分のサーバーの秘密鍵とCSRを作成。
必要なソフトはNetBSDにインストール済み。
# /usr/pkg/bin/openssl md5 /var/log/maillog > rand.dat
# /usr/pkg/bin/openssl genrsa -rand rand.dat -des3 2048 > morisoba_2012.key
Generating RSA private key, 2048 bit long modulus
....................................+++
.........+++
e is 65537 (0x10001)
Enter pass phrase for morisoba_2012.key: (秘密のパスフレーズ(n‘∀‘)η゚・*:.。. .。.:*・゜)
Verifying - Enter pass phrase for morisoba_2012.key: (秘密のパスフレーズ(n‘∀‘)η゚・*:.。. .。.:*・゜)
#
# /usr/pkg/bin/openssl req -new -key morisoba_2012.key -out morisoba_2012.csr
Enter pass phrase for morisoba_2012.key: (秘密のパスフレーズ(n‘∀‘)η゚・*:.。. .。.:*・゜)
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) [JP]:JP
State or Province Name (full name) [Kanagawa]:Kanagawa
Locality Name (eg, city) [Fujisawa]:Fujisawa
Organization Name (eg, company) []:********** (whoisのregistrantを入力)
Organizational Unit Name (eg, section) [Admin]: (適当でいいっぽい)
Common Name (eg, your name or your server's hostname) []:www.morisoba.jp (証明してもらうFQDN)
Email Address []:admin@もりそば.jp (ドメイン管理者のメールアドレス)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (空)
An optional company name []: (空)
#
こんな感じで秘密鍵とCSRファイルを作成する。
で、RapidSSLを申し込み、PayPalで支払うとしばらくして申し込みフォームへのURIが書かれているメールが来る。
そのURIに飛んで、フォームにCSRのファイルの中身をcatしてコピペする。
残りの項目は嘘偽りなく記入。
ちなみにwhoisは情報代行してあるけど、そのままで大丈夫でした。
1分後くらいにはメールでサーバー証明が送られてきた。速えぇ。。。
送られてきたサーバー証明と、メールのリンクに付いてくる中間認証局証明をサーバーにテキストで保存する。
サーバー証明 → morisoba_2012.crt
中間認証局証明 → RapidSSL_CA_bundle.pem
最終的にサーバーで必要なのは
・最初に作ったサーバーの秘密鍵(morisoba_2012.key)
・メールで送られてきたサーバー証明(morisoba_2012.crt)
・メールのリンクにある中間認証局証明(RapidSSL_CA_bundle.pem)
こいつらをSSL通信したいサーバーにセットアップする。
apache2+mod_ssl
/usr/pkg/etc/httpd/httpd-ssl.conf を編集
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /パス/morisoba_2012.crt
SSLCertificateKeyFile /パス/morisoba_2012.key
SSLCertificateChainFile /パス/RapidSSL_CA_bundle.pem
courierimap
証明書を束ねる必要があるっぽい。
# cat morisoba_2012.key morisoba_2012.crt RapidSSL_CA_bundle.pem > courierimapd.pem
/usr/pkg/etc/courier/imapd-ssl を編集
TLS_CERTFILE=/パス/courierimapd.pem
ProFTPD
/usr/pkg/proftpd.conf を編集
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd_ssl.log
TLSProtocol SSLv23
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
# Are clients required to use FTP over TLS when talking to this server?
TLSRequired off
# Server's certificate
TLSRSACertificateFile /パス/morisoba_2012.crt
TLSRSACertificateKeyFile /パス/morisoba_2012.key
# CA the server trusts
TLSCACertificateFile /パス/RapidSSL_CA_bundle.pem
# Authenticate clients that want to use FTP over TLS?
TLSVerifyClient off
</IfModule>
詳しくは他のwebでw
あとは各サーバーなりinetdなりを再起動。
オレオレ認証も撲滅です。
テキストだらけで意外と長くなってもうた。