SSブログ

CA局/サーバ証明書 (FreeBSD 8.1R、2010/09/18) [FreeBSD]

軽量Webサーバ、lighttpdのssl接続用にx509証明書を再発行しました。過去に何回もやってますが、意外とやり方を忘れてたりしますね。ちなみに証明書発行の一連の流れは、厳密にはCA局側の立場(証明書に署名をする側の立場)と、サーバ管理者側の立場(署名してもらった証明書を利用する側の立場)が明確に分かれています。分かってない人には結構複雑なようで、ちょっとでも分かりやすくなればとサーバ管理者側の立場での作業は青く着色してみました。
まずはローカルでopensslを使用してCA局を立てるところから。事前にopenssl.cnfを編集しますが、特に設定するところはないかもしれません。CA局の設定を保存しているディレクトリ、期間、暗号強度(ビット数)、CN等のデフォルト値を変えたければ適宜変えます。
atom# cat /etc/ssl/openssl.cnf
...
[ CA_default ]
dir             = /usr/local/openssl/CA         # Where everything is kept

CA局を0から立てるには、openssl付属のmisc/CA.shを使うのが楽でしょう。そのまま使っても良いですが、CA局の設定を保存するディレクトリはopenssl.cnfと合わせておくと良いと思います。
設定が終わればCA.sh -newcaを実行します。パスフレーズ、国名、組織名、いろいろ聞かれますので入力します。特に秘密鍵のパスフレーズについては、今後CA局の運営にあたって使用するパスワードになりますので、忘れないようにしましょう。また、当然ながら秘密鍵自身のパーミッションについては第三者が読めないように変えておきましょう。
atom# cat /usr/local/openssl/misc/CA.sh
...
CATOP=/usr/local/openssl/CA
...
atom# misc/CA.sh -newca
CA certificate filename (or enter to create)

Making CA certificate ...

次に、サーバ証明書の証明書要求(CSR)を作成します。
atom# openssl req -new -keyout server.key -out server.csr

CSRはCA局に送付して電子署名してもらいますから、第三者の目に触れると言うことで秘密鍵は事前に分離しておきます。なおこのとき、CN(Common Name)にはサーバのホスト名を入力します。(例 www.yahoo.co.jp) 秘密鍵については当然ながらパスフレーズが付いてきますが、Webサーバ起動時、毎回このパスフレーズの入力を求められると運用が面倒なので、危険を承知でパスフレーズの解除を行います。
atom# openssl rsa -in server.key -out server.key2

次にCA局の立場で、サーバ証明書への電子署名を行います。CA局の秘密鍵のパスフレーズを聞かれるので入力します。
atom# openssl ca -out server.pem -infiles server.csr

電子署名してもらったサーバ証明書については、事前に分離しておいた秘密鍵と結合します。秘密鍵を含むことになりますのでファイルパーミッションには気をつけて下さいね。また、秘密鍵単体のファイルや証明書要求のファイルはもう不要ですので、削除してください。
atom# cat server.key2 >> server.pem
atom# rm server.key server.key2 server.csr

後は作成された証明書をサーバアプリケーションに組み込むだけです。

共通テーマ:日記・雑感