前回わかったことから、openssl ca コマンド実行時に /etc/pki/tls/openssl.cnf をいちいち修正することにしました。
CA証明書を作るときは、[ usr_cert ] セクションに
サーバ証明書を作るときは、[ usr_cert ] セクションに
を指定してみました。keyUsage を指定したのは、公式な CA の証明書 RSA Security Inc - RSA Security 1024 v3 などからの類推です。作成したCA証明書 cacert.der を FireFox にインポートしてみると、インポート時の「証明書を表示」では、
「原因不明の問題により、この証明書の有効性を検証できませんでした。」
と表示されてしまいますが、無視して「OK」でインポートしてしまってから、「証明書マネージャ」ウィンドウの「認証局証明」で、fedora.example.co.jp を選択して、「表示」で「証明書ビューア」ウィンドウが開いたら、「一般」で、
この証明書は以下の用途に使用する証明書であると検証されました。
SSL認証局
のように表示されて、うまく?いきました。FireFox で該当ページを見て、サーバの証明書を「証明書ビューア」で確認すると、
この証明書は以下の用途に使用する証明書であると検証されました。
SSL クライアント証明書
SSL サーバ証明書
「詳細」で見ると、Certificate Basic Constraints は、
Not Critical
Is not a Certificate Authority
と表示されます。つまり、FireFox 2.0.0.1 においては、
CA証明書の場合は、basicConstraints = CA:true と指定すれば、
「この証明書は以下の用途に使用する証明書であると検証されました。」となり、
nsCertType = sslCA ?が、「SSL 認証局」と認識され、
サーバの証明書の場合は、basicConstraints = CA:FALSE でも同じく「検証され」、
nsCertType = client, server ?なら、「SSL クライアント証明書」「SSL サーバ証明書」と認識
されるようです。ちなみに、現時点の Yahoo のログイン画面のものを参考にすると、
ですから、ちょっとあいまいですが、
でしょうか。まねすると nsCertType = server でよさそうです。
以上まとめると、OpenSSL 0.9.8 以降の自己署名型のCAを使って Apache httpd 2.2.4 で ssl を利用するためには、
という感じでしょうか。CA.sh と openssl の対応付けは、以前にご紹介したとおりです。将来サーバ証明書でうまくいかなかったら、openssl.cnf で keyUsage を指定してみることにします。
keyUsage は、digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement,
keyCertSign, cRLSign, encipherOnly, decipherOnly, serverAuth, clientAuth,
codeSigning, emailProtection, timeStamping, msCodeInd, msCodeCom, msCTLSign,
msSGC, msEFS, nsSGC
が指定できるらしいですが、いま分かっている対応関係は以下のとおりです。
cRLSign == CRL Signer
KeyCertSign == Certificate Signer
別に今までの作業をすべて coLinux で行ったからではないのですが、とても疲れました。次回にクライアン認証を試して、とりあえず OpenSSL は終わりにしたいです。
CA証明書を作るときは、[ usr_cert ] セクションに
basicConstraints = CA:true nsCertType = sslCA, emailCA keyUsage = cRLSign, keyCertSign
サーバ証明書を作るときは、[ usr_cert ] セクションに
basicConstraints = CA:FALSE nsCertType = server,client,email
を指定してみました。keyUsage を指定したのは、公式な CA の証明書 RSA Security Inc - RSA Security 1024 v3 などからの類推です。作成したCA証明書 cacert.der を FireFox にインポートしてみると、インポート時の「証明書を表示」では、
「原因不明の問題により、この証明書の有効性を検証できませんでした。」
と表示されてしまいますが、無視して「OK」でインポートしてしまってから、「証明書マネージャ」ウィンドウの「認証局証明」で、fedora.example.co.jp を選択して、「表示」で「証明書ビューア」ウィンドウが開いたら、「一般」で、
この証明書は以下の用途に使用する証明書であると検証されました。
SSL認証局
のように表示されて、うまく?いきました。FireFox で該当ページを見て、サーバの証明書を「証明書ビューア」で確認すると、
この証明書は以下の用途に使用する証明書であると検証されました。
SSL クライアント証明書
SSL サーバ証明書
「詳細」で見ると、Certificate Basic Constraints は、
Not Critical
Is not a Certificate Authority
と表示されます。つまり、FireFox 2.0.0.1 においては、
CA証明書の場合は、basicConstraints = CA:true と指定すれば、
「この証明書は以下の用途に使用する証明書であると検証されました。」となり、
nsCertType = sslCA ?が、「SSL 認証局」と認識され、
サーバの証明書の場合は、basicConstraints = CA:FALSE でも同じく「検証され」、
nsCertType = client, server ?なら、「SSL クライアント証明書」「SSL サーバ証明書」と認識
されるようです。ちなみに、現時点の Yahoo のログイン画面のものを参考にすると、
Certificate Basic Constraints Not Critical Is not a Certificate Authority Certificate Key Usage Not Critical Signing Key Encipheriment SSL サーバ証明書
ですから、ちょっとあいまいですが、
basicConstraints = CA:FALSE nsCertType : なし keyUsage = codeSigning(?), KeyEncipherment
でしょうか。まねすると nsCertType = server でよさそうです。
以上まとめると、OpenSSL 0.9.8 以降の自己署名型のCAを使って Apache httpd 2.2.4 で ssl を利用するためには、
・openssl.cnf を以下のように修正します。openssl用作業ディレクトリです。 dir = /usr/local/CA ・CA.sh を以下のように修正します。これで今いるディレクトリに証明書等が生成されます。 CATOP=. ・自己署名型のCAの証明書を作ります。 まず openssl.cnf の [ usr_cert ] セクションで、次の指定を有効にします。 basicConstraints=CA:true nsCertType = sslCA, emailCA keyUsage = cRLSign, KeyCertSign cd /usr/local/CA CA.sh -newca ・サーバ証明書のためのCSRを作ります。 まず openssl.cnf の [ usr_cert ] セクションで、次の指定を有効にします。 basicConstraints = CA:FALSE nsCertType = server CA.sh -newreq ・サーバのCSRをCAで署名して証明書を作ります。 CA.sh -sign ・サーバの秘密鍵のパスフレーズを解除します。 openssl rsa -in newkey.pem -out nopass.key ・サーバの証明書とサーバの鍵を Apache httpd の指定する場所に置きます。 サーバの証明書 newcert.pem , サーバの鍵 nopass.key です。 cp newcert.pem /usr/local/httpd/conf/server.crt cp nopass.key /usr/local/httpd/conf/server.key ・すべての鍵は、chmod 0600 .. で、他人に見えないようにします。 ・CA の証明書を der フォーマットに変換します。 cd /usr/local/CA openssl x509 -in cacert.pem -outform DER -out cacert.der ・関係者に、cacert.der を配布して、各ブラウザにインポートします。
という感じでしょうか。CA.sh と openssl の対応付けは、以前にご紹介したとおりです。将来サーバ証明書でうまくいかなかったら、openssl.cnf で keyUsage を指定してみることにします。
keyUsage は、digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement,
keyCertSign, cRLSign, encipherOnly, decipherOnly, serverAuth, clientAuth,
codeSigning, emailProtection, timeStamping, msCodeInd, msCodeCom, msCTLSign,
msSGC, msEFS, nsSGC
が指定できるらしいですが、いま分かっている対応関係は以下のとおりです。
cRLSign == CRL Signer
KeyCertSign == Certificate Signer
別に今までの作業をすべて coLinux で行ったからではないのですが、とても疲れました。次回にクライアン認証を試して、とりあえず OpenSSL は終わりにしたいです。
CentOS4.6 で作成した CA の der は簡単にブラウザで認識したのですが、同じ作業を CentOS5 で行い、再度 CA を作成したのですが、その CA の der がブラウザで認識せずに困っていました。
openssl のバージョンだったのですね。そして、openssl.cnf の設定。
わかりやすい解説、ありがとうございました。