前回の続きで、OpenSSL 0.9.8a の設定をします。
結局、openssl.cnf は、以下の行を修正しました。*_default の変更はこれからのテストを簡単にするためです。
openssl コマンドと CA.sh と混在して説明されている場合が多いですが、後でわけが分からなくなるので、CA.sh を使っているつもりで、直接 openssl コマンドを実行することにしました。以下のように CA.sh のコメントの順番で実行します。
まず、CA.sh -newca に該当する部分を実行して、CAの秘密鍵と自己認証した証明書を作ります。
これで、CAの秘密鍵 private/cakey.pem と これによって署名されたCAの自己署名型の証明書 cacert.pem が作成されました。
次に、CA.sh -newreq 部分を実行して、httpd サーバ用の秘密鍵とCSRを作成します。
httpd サーバ用の秘密鍵 newkey.pem と CSR newreq.pem が作成されました。CA 作成時の openssl req コマンドと有効期限の設定以外まったく同じになっています。
最後に、CA.sh -sign 部分を実行して、CAで署名します。
CSR newreq.pem を読み込んで、CAで署名した証明書 newcert.pem が作成できました。-policy オプションを指定することが特徴です。
httpd をパスフレーズなしで起動できるようにパスフレーズを解除します。
apache httpd の ssl の設定どおりの場所に証明書とキーをコピーします。
apache httpd の設定を変更します。/usr/local/httpd224/conf/extra/httpd-ssl.conf の次の行を修正します。
/usr/local/httpd224/conf/httpd.conf の次の行のコメントをはずします。
httpd を再起動します。 昔あった、startssl はもう使えませんので普通の start で良いです。
(ですが、いままで述べた手順では重大な落とし穴がありました。それは後ほど。)
忘れたときのためにまとめると、
ssl は、秘密鍵を作ると同時に CSR を作成し、その CSR を使って CA で署名した証明書を作り、秘密鍵と署名した証明書をペアで使う。
と、覚えればいいみたいです。これで一応すっきりしました。
しかし、ブラウザが違うと、nsCertType が影響するかもしれない不安は残ります。将来バージョンが上がるとまたおかしくなる可能性もあり、その場合はもう一度 CA.sh を見ることにします。
重大な落とし穴については次回にします。
結局、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 を見ることにします。
重大な落とし穴については次回にします。
※コメント投稿者のブログIDはブログ作成者のみに通知されます