今日は新サーバーの調整をしていた。まぁ部のなんだけどね。
そこで毎度難しいと思わせる問題、SSLの件について取り組んでました。
実はLibserverは未だにSSLに対応させてない。
まぁあった方がいいんだけど、ほぼLAN内での利用なのであまり気にしてない。
将来的にはやりたいが。
で、手順について、二度目にして体系化できた。
非常にわかりにくい説明で困るのだが、まぁなんとかつなぎ合わせれば簡単に作れますぞと。
ところで、今回作るのはオレオレ証明書と呼ばれるもの。
はてなに詳しい定義が載っている。
http://d.hatena.ne.jp/keyword/%A5%AA%A5%EC%A5%AA%A5%EC%BE%DA%CC%C0%BD%F1
これによると、僕が作ろうとしてるのは第四種オレオレ証明書とあるもの。
特定の人が利用するための証明書。
そのため真贋は実際に管理者にフィンガープリントを教えてもらってそれと比べればよい。
そういう考えなのであまり深く考える必要はない。
一応体面を考えて自分で認証局をたてて、それが鍵に署名をして証明するようにしましたが、
まぁ自己署名証明書でも事は足りるのだけどね。
まず自分で認証局をたてると
ところでCentOS 5.1の上での話をするが、当然だがRHEL、Fedoraでも通じる話。
他でもディレクトリが違うかもしれないだけ。
まず、/etc/pki/tls/certsに移動する。
それで、/etc/pki/tls/openssl.cnfを次のを参考に変更する。[usr_cert]
nsCertType = sslCA, emailCA
basicConstraints = CA:TRUE
keyUsage = cRLSign, keyCertSign
参考にしろというのも変な書き方だが、まぁコメントアウト、コメントアウトの解除とかで調整してください。
それで、便利なコマンドがありまして、# /etc/pki/tls/misc/CA -newca
これで適当に設定していけば完了。CA certificate filenameとかchallenge passwordはそのままEnterで。
これで/etc/pki/CA/以下にCA証明書が出来る。
で、ここから配るのに便利な形にCA証明書を加工する。
まずCA証明書は無駄な文言が多いので、いらない部分をカットしたスマートな証明書を作る。openssl x509 -in /etc/pki/CA/cacert.pem -out /tmp/ca.crt
次にメールクライアントなどでよくつかわれるDER形式の証明書を作る。openssl x509 -in /etc/pki/CA/cacert.pem -outform der -out /tmp/ca.der
最後にフィンガープリントを確認しておく。openssl x509 -sha1 -in /etc/pki/CA/cacert.pem -noout -fingerprint
フィンガープリントというと意味は指紋だが、証明書のSHA1ハッシュですね。
この値をメモしておいて、この値を配って、証明書を登録するときに確かに正しい証明書か確認してもらう。
ただ、この値はネットワークで配信するのもいいのだが、アナログな手段で伝えられるようにするべきだと思う。
なぜかというとその公開するページがなりすまされては意味がないから。
それこそ政府とかの証明書は官報とかでフィンガープリントを発表するのだろうが。
で、とりあえずこれで認証局は完成。
この鍵を持って帰って、Firefoxとかに登録させてみる。
それで証明書を表示させてみて、認証局の中から探して、プロパティーで見てみると、「SSL 認証局」と出ているはず。
次に実際に使う鍵を作成。
また、/etc/pki/tls/openssl.cnfを次のを参考に変更する。[usr_cert]
nsCertType = server
basicConstraints = CA:FALSE
で、次のコマンドを叩く。# /etc/pki/tls/misc/CA -newreq
これで鍵ができた。この状態では署名されてない。
次に署名だが、非常に便利なもので、# /etc/pki/tls/misc/CA -sign
とすれば完了。
これでnewkey.pem、newcert.pem、newreq.pemの3つがあるはず。
このうち、newreq.pemは署名の作業のために実は使われている。
newkey.pemはサーバー側で専ら使うもの、newcert.pemはユーザーに配るもの。
こちらはあまり気にしなくていい。Apache・Dovecot・Postfixが自分で配ってくれるから。
今回は1つのマシンの上でやったから何にもないが、認証局が別のマシンのときは
newreq.pemを認証局に持って行って、認証してもらってnewcert.pemを持って帰ってくるというやり方になる。
ところで、この状態ではnewkey.pemにはパスワードの暗号化がかかってるのだが、
この状態では自動起動で手間になるので、危険を覚悟で暗号化を解除しておく。# openssl rsa -in newkey.pem -out newkey2.pem
このnewkey2.pemをApache・Dovecot・Postfixに鍵として読み込ませて使うということね。
まず手始めにApacheに登録させた。
さすがにCentOSはすばらしいもので標準でmod_sslが入ってる。
余談だがmod_deflateも入ってた、ちょこちょこ設定するだけで圧縮がかかるようになった。
それで設定は/etc/httpd/conf.d/ssl.confなのだが、
特に設定すべきことはこの三行だけ。SSLCertificateFile /etc/pki/tls/certs/newcert.pem
SSLCertificateKeyFile /etc/pki/tls/certs/newkey2.pem
SSLCACertificateFile /etc/pki/CA/cacert.pem
これだけでOK、これでCA証明書を登録しておけば特に何も言われずにhttpsでアクセスできるはず。
CA証明書を登録したと言うことはその認証局を信用したということ、その認証局の信用した証明書は当然に信用する。
まぁこんな調子でDovecot・Postfixにも登録するかな。
そういえばPostfixの話だが、なんかうまくつながらんなぁと思ったら、こんな設定ミスがあった。
main.cfの中にだが inet_interfaces = localhost
これでは外部からの接続をすべてはねることになるから、ここにはallを入れないとだめだよと。
今まで気づかなかった。こんなのがあったんだな。
Hidemaro ◆3rRY3LJ8tc 2008/03/21(Fri) 22:19 ID:Z1yCC0bQ