プライベートCA(認証局)の構築
2003/5/17作成
2004/9/19更新
1.OpenSSLのコンフィグファイル
opensslコマンドがデフォルトで参照するコンフィグファイルを編集します。
このコンフィグファイルは実はあってもなくても関係ないのですが、あるのとないのとでは、使い勝手が大きく変わります。
コンフィグファイルが適当だと、オプションをコマンドラインにのせる必要があるため、必然的にコマンドが長くなります。
コンフィグファイルを書いておくと、デフォルト値が決まるので、コマンドラインが短くなります。
このコンテンツはコンフィグをがんばって書いたおかげでコマンドラインが短くなっていますのでご注意ください。
そのコンフィグファイルですが、おおざっぱに分類するとCA業務を行うときに参照する部分と、発行要求(CSR)を作成するときに参照する部分に分かれるようです。
CA業務を行う部分の設定はCAの設定が完了してからでも間に合います。
最初はピンとこないかもしれないので、まずは一度長くてもいいからコマンドラインで使ってみて、なんとなくわかってからコンフィグの設定した方が理解しやすいかもしれません。
FreeBSD5.0の場合のコンフィグファイルは/etc/ssl/openssl.cnfになります。
このコンフィグを使いたくない場合は-configオプションをつけることで他のコンフィグファイルを参照することができます。
複数のCAを使い分けたいときなどに有効です。
さっそくファイルを見ていきたいと思ったのですが、長いのでこっちに用意しました。
コンフィグにCA関連で使用するファイルやディレクトリを指定したので、必要なファイルやディレクトリを用意します。
場所やファイル名はこのコンフィグにあわせてあります。
# mkdir /etc/CA
# mkdir /etc/CA/certs
# mkdir /etc/CA/crl
# mkdir /etc/CA/newcerts
# touch /etc/CA/index.txt
# echo "01" > /etc/CA/serial
# mkdir /etc/CA/private
# chmod 700 /etc/CA/private
以上でとりあえずは準備完了です。
2.CA秘密鍵の作成
まずはCAの鍵を作りますが、CA関連のいろいろなファイルを保存するために専用のディレクトリを用意します。
とりあえず/etc/CAというディレクトリを作ってみましたが、どこでもいいです。
# mkdir /etc/CA
# cd /etc/CA
# openssl genrsa -rand /var/log/maillog -out ca.key 1024
-randオプションは乱数を指定しています。
ちなみにopenssl.cnfファイルに書いておけば、デフォルトのランダムファイルを指定できます。
メールサーバのログはローテーションかけて常に入れ替わるので、乱数ファイルとしては適しています。別になんでもいいので他にいいのがあればそれを使えばいいと思います。
ちなみにここで書いている/var/log/maillogはqmail方式なのですべての環境に適用できないので注意してください。
こうしてできたca.keyが認証局の秘密鍵になります。
とっても大事なものなので大切に保管してください。
3.CA証明書発行要求(CSR)の作成
続いて鍵から証明書を発行します。
まずは証明書発行要求(CSR)を作成します。
第15回と冗長ですが、こんな感じになります。
コンフィグをいじっているので、デフォルト値が変わっています。
# openssl req -new -key ca.key -out ca.csr
Using configuration from /etc/ssl/openssl.cnf
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) [Tokyo]:Tokyo
Locality Name (eg, city) []:
organization Name (eg, company) [example corp.]:example corp.
Organizational Unit Name (eg, section) []:example CA
Common Name (eg, YOUR name) []:example CA
Email Address []:who@example.co.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
青文字はコマンドで入力。
赤文字は証明書に書かれる内容を入力します。
コマンドは新規にca.keyからca.csrというx509証明書発行要求(CSR)を作りますという意味です。
こうしてできたCSRがca.csrになります。
4.CA証明書への自己署名と発行
そして署名。
# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
Signature ok
subject=/C=JP/ST=Tokyo/O=example corp./OU=example CA/CN=example CA/Email=who@example.co.jp
Getting Private key
コマンドはx509形式でca.csrをca.keyを使って署名し、ca.crtというファイルに出力しますという意味になります。
こうしてca.crtという自己署名のCA証明書ができました。
5.ちなみに・・
自己署名の場合は秘密鍵からCSRを作成することなくいきなり証明書を発行することができます。
今回は発行の流れをわかりやすくするためにわざと2回にわけてみました。
こちらが一発発行のコマンドになります。
そのあとCSR発行時と同じことを聞かれるので答えてあげてください。
# openssl req -new -x509 -key ca.key -out ca.crt
6.ファイルの確認
いくつかファイルができたので確認と置き場所を説明します。
ファイル 説明 保管場所 ca.key CAの秘密鍵 /etc/CA/private/ca.keyに大事に保管。複製禁止 ca.csr CAのx509証明書発行要求(CSR) もう使いません いきなり発行した場合は作られません ca.crt CAの証明書(base64エンコード) 配布しましょう /etc/CA/ca.crtにも1部おく
CA証明書をrootCAに追加
CAの証明書ができたらファイルをインポートします。
最近はUSBトークンとかICチップなどに証明書や鍵を入れることができますが、専用の機器が必要だったりするので一般的なブラウザに証明書をインポートします。
ここからはクライアントPCとしてWindowsXPのInternetExplorerを前提に説明していきますが、他のものでも変わらないと思います。
注意!
CA証明書のインポートは危険性を理解した上で慎重に行ってください。
ブラウザにデフォルトで入っている証明書はかなり信頼性の高いものとなっています。
使わなくなった鍵はなるべく削除しましょう。
Windowsで読むことができる証明書はいくつかあります。base64エンコードされたPEMフォーマットとか、バイナリのDER方式とか。
さっき作ったca.crtはPEMフォーマットになっています。
なお、PEMフォーマットの証明書をDERフォーマットにするには以下のコマンドを使います。
# openssl x509 -in ca.crt -outform DER -out ca.der
ca.derがバイナリ形式の証明書です。他にNetscape用のフォーマットもあるようです。
せっかくDERを作ったのでこれをインストールします。
まずは証明書をダウンロードします。
ftpでもいいし、httpでもいいです。
ダウンロードした証明書をダブルクリックするとこんな画面が出ると思います。
インストール前なので無効です。
証明書のインストールをクリックします。
「証明書のインポート ウィザード」が立ち上がりいろいろ選んでいくと、最後にこちらの確認画面が出ます。
「はい」を選択すると無事にインポートが完了します。
インポートが完了したら、確認してみましょう。
「インターネットオプション」の「コンテンツ」タグにある「証明書」です。
「信頼されたルート証明機関」にさっき追加したCA証明書が追加されています。
証明書をダブルクリックしてみると、インポートが完了しているので今度は有効になっています。
これで完了です。
参考までに、うちで作ったCA証明書をおいておきます。(PEMフォーマット/DERフォーマット)
秘密鍵の管理は厳重にするつもりですが、いつまで鍵を保持し続けられるかわからないので、この証明書はインストールの練習程度に使って、終わったら削除することを強くおすすめします。
万が一、うちの証明書が原因でトラブルが発生しても当方では一切責任を持てませんのでご了承ください。
参考文献
Miscellaneous OpenSSL Documents http://www.openssl.org/docs/
Esehttpdマニュアル http://ghost.math.sci.hokudai.ac.jp/esehttpd/ja/