編集 最近の変更 全部 履歴 差分 生データ トップ ヘルプ

nemuiDoc: SSL証明書と独自CA

ReverseLinks: IndexPage (1236d)

CA.sh を使わずに、openssl コマンドでサーバの証明書や鍵と 独自 CA を作るメモ。 余計な事は良いから https なテストサーバが作りたいんじゃという人は最後にジャンプ。

ただ、用語がかなり怪しいです。あってるのかな……

証明書と署名要求の生成

秘密鍵の生成

openssl genrsa -des3 -out server.key.secure 1024

パスフレーズを求められるので入力する。 後でパスフレーズを取り除く(復号)するなら、適当でも構わない。

生成されたファイルは暗号化されているが、一応扱いには注意すること。 他の人から読めないようにアクセス権を設定しておく。

 chmod 400 server.key.secure

ちなみに -des3 等の暗号化オプションを付けなければ、最初から生の鍵を生成出来る。

鍵の復号(パスワードを取り除く)

openssl rsa -in server.key.secure -out server.key

鍵の作成時に入力したパスワードを要求される。

秘密鍵を暗号化されたままにして置いた方が、よりセキュリティーは高いが、 その場合は apache 等のサーバを起動する毎にパスワードの入力を求められる。

ここで生成したファイルは本当に注意して扱うこと。 このファイルが他人から読めてしまうと意味がない。

 chmod 400 server.key

署名要求の生成

openssl req -new -key server.key -out server.csr

サーバに関する情報を質問されるので入力する。

注意すべきは1点。 Common Name は実際にユーザがアクセスする(DNSに登録された)サーバ名 と必ず同じでなければならない。hostname コマンドで得られるようなマシン名でなはい。

必要に応じて -config openssl.cnf 等で好きな設定ファイルを指定する事もできる。 例えば、入力する項目を増やしたい場合や、ノンインタラクティブで処理したい場合は 設定ファイルを書けば良い。

ここまでの手順をまとめてやる

実は一気に出来る方法がある。

 openssl req -new -nodes -keyout server.key -out server.csr

-nodes オプションを外せば暗号化した鍵が出来る。 上と同じく-config オプションも一緒に使えば入力を省略することも可能。

同じく鍵の扱いに注意。

 chmod 400 server.key

署名要求を CA に送信

先ほど生成した server.csr を認証局に送ってサインして貰う。 VeriSign やボルチモア等が有名。 NTT-Com の BLADE が安いようです。

テスト用のみなら、 local CA を構築する事も出来る。 その場合は次のセクションを参考。

証明書の配置

返送された署名済みのファイル server.crt をサーバに設定する。

local CA の構築と署名

必要なディレクトリとファイルの構成

mkdir myCA
mkdir myCA/certs
mkdir myCA/crl
mkdir myCA/newcerts
mkdir myCA/private
echo 01 > myCA/serial
touch myCA/index.txt

パーミッションに注意すること。

設定ファイルの修正

一時的にテストする場合

システム標準の openssl.cnf をコピーしてきて、[ CA_default ] のセクションを 適当に書き換える。基本的に dir だけで良いはず。 以下では書き換えたファイル名を openssl-myca.cnf とする。

自分用の認証局としてずっと使う場合

システム標準の openssl.cnf に [ CA_default ] を参考にして自分の CA のエントリを 追加 する。また、その CA をディフォルトで使いたければ [ ca ] セクションの default_ca を自分の CA の名前に書き換える。

以下の説明は設定ファイルをコピーした場合の例になっているので、 -config openssl-myca.cnf を -name yourCAname と置き換えて読むこと。

CA 証明書(?)の生成

openssl req -config openssl-myca.cnf -new -x509 \
  -keyout myCA/private/cakey.pem  -out myCA/cacert.pem -days 30

パスフレーズ及び CA の情報を求められるので入力する。 このパスフレーズは、署名する都度必要なので覚えておくこと。

local CA による署名要求への署名

openssl ca -config openssl-myca.cnf -policy policy_anything \
  -out server.crt -infiles server.csr

CA の鍵のパスフレーズが求められるので入力する。

すべての手順をまとめてやる

今まで書いたのは何だと言う感じだけど、すべての手順を1コマンドで出来る。

 openssl req -new -x509 -nodes -keyout server.key -out server.crt 

これで暗号化していない鍵と、自己署名証明書が出来る。(CAは出来ない)

しつこいけどアクセス権の変更を忘れずに。

 chmod 400 server.key
 chmod 444 server.crt


突っ込みどうぞ:

1: 名前: ?名無しさん 投稿日: 2003/11/28 (金) 15:51

2: 名前: ?der 投稿日: 2004/03/05 (金) 21:39

ついでだから*.derについても記載しておくといいかも?

3: 名前: ?名無しさん 投稿日: 2005/03/21 (月) 05:24

パスフレーズを取り除く理由がapache+mod_sslの再起動が問題ならばパスフレーズを外すより、パスフレーズを返すプログラムを作って SSLPassPhraseDialog exec:プログラム としたほうがよいかなと思います。 詳しくは SSLPassPhraseDialog 検索してください。

名前: E-mail:


最終更新: 2006-10-27/20:02:00 +0900 (1201d)