coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

OpenSSLについて その2

2007-02-08 20:23:39 | OpenSSL
前回の続きで、OpenSSL 0.9.8a の設定をします。

結局、openssl.cnf は、以下の行を修正しました。*_default の変更はこれからのテストを簡単にするためです。
dir                             =  /usr/local/CA
countryName_default             = JP
stateOrProvinceName_default     = Tokyo
localityName_default            = 23-ku
0.organizationName_default      = Example Ltd
organizationalUnitName_default  = Espiya

openssl コマンドと CA.sh と混在して説明されている場合が多いですが、後でわけが分からなくなるので、CA.sh を使っているつもりで、直接 openssl コマンドを実行することにしました。以下のように CA.sh のコメントの順番で実行します。
   CA -newca ... will setup the right stuff
   CA -newreq ... will generate a certificate request
   CA -sign ... will sign the generated request and output

まず、CA.sh -newca に該当する部分を実行して、CAの秘密鍵と自己認証した証明書を作ります。
# mkdir /usr/local/CA
# chmod 0700 /usr/local/CA
# cd /usr/local/CA
# mkdir certs crl newcerts private
# chmod 0700 private
# echo "00" >serial
# touch index.txt

# openssl req -new -keyout ./private/cakey.pem -out ./careq.pem
..............  CA のパスフレーズを入れる。
# openssl ca -out ./cacert.pem -days 1095 -batch \ 
         -keyfile ./private/cakey.pem \
         -selfsign -infiles ./careq.pem
.............. 先ほどの CA のパスフレーズを入れる。
#

これで、CAの秘密鍵 private/cakey.pem と これによって署名されたCAの自己署名型の証明書 cacert.pem が作成されました。

次に、CA.sh -newreq 部分を実行して、httpd サーバ用の秘密鍵とCSRを作成します。
# openssl req -new -keyout newkey.pem -out newreq.pem -days 365
...........    httpd サーバ用キーのパスフレーズを作成します。
#

httpd サーバ用の秘密鍵 newkey.pem と CSR newreq.pem が作成されました。CA 作成時の openssl req コマンドと有効期限の設定以外まったく同じになっています。

最後に、CA.sh -sign 部分を実行して、CAで署名します。
# openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
..........  CAのパスフレーズを指定します。
#

CSR newreq.pem を読み込んで、CAで署名した証明書 newcert.pem が作成できました。-policy オプションを指定することが特徴です。
httpd をパスフレーズなしで起動できるようにパスフレーズを解除します。
# openssl rsa -in newkey.pem -out nopass.key
.......... httpd サーバ用のパスフレーズを入力します。 
# chmod 0600 nopass.key newkey.pem

apache httpd の ssl の設定どおりの場所に証明書とキーをコピーします。
# cp -p newcert.pem /usr/local/httpd224/conf/server.crt
# cp -p nopass.key /usr/local/httpd224/conf/server.key

apache httpd の設定を変更します。/usr/local/httpd224/conf/extra/httpd-ssl.conf の次の行を修正します。
DocumentRoot "/home/data/www"
ServerName www.example.co.jp:443
ServerAdmin root@example.co.jp

/usr/local/httpd224/conf/httpd.conf の次の行のコメントをはずします。
Include conf/extra/httpd-ssl.conf

httpd を再起動します。 昔あった、startssl はもう使えませんので普通の start で良いです。
# /etc/init.d/httpd stop
# /etc/init.d/httpd start

(ですが、いままで述べた手順では重大な落とし穴がありました。それは後ほど。)

忘れたときのためにまとめると、

ssl は、秘密鍵を作ると同時に CSR を作成し、その CSR を使って CA で署名した証明書を作り、秘密鍵と署名した証明書をペアで使う。

と、覚えればいいみたいです。これで一応すっきりしました。
しかし、ブラウザが違うと、nsCertType が影響するかもしれない不安は残ります。将来バージョンが上がるとまたおかしくなる可能性もあり、その場合はもう一度 CA.sh を見ることにします。

重大な落とし穴については次回にします。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« OpenSSLについて その1 | トップ | OpenSSLについて その3 »
最新の画像もっと見る

コメントを投稿

OpenSSL」カテゴリの最新記事