この日本語訳の公開を快諾していただいたWebVisionのDaveに感謝します。
ここには私が集めたいろいろな情報があり、これらをまとめるとあなたの
認証局を立ち上げることができます。
この内容を考えだしたのは私の功績ではありません;ここにあるすべてのものは
ssl-users
メーリングリストか
ssl-talk
メーリングリストからとってきたものです。
特に、自分で署名した新しいCAを作ったり、サーバーの証明書を生成し署名す
る方法に関するほとんどの情報はTom
Titchenerによって投稿されたものです;
application/x-x509-ca-certMIMEタイプに関するヒントは
Netscape Certificate Specから得たものです。
これがあることを親切に指摘してくれたのは、NetscapeのElectronic Munitions SpecialistであるJeff Weinsteinです。
最後に、Cyberstore SystemsのPat Richardはこのパズルの最後の一枚 - どうやってSSLeayによって生成されたCAを使ってNetscapeの商用サーバーの鍵に署名するか - を提供してくれました。
もし質問やコメントがありましたらdhm@webvision.comに連絡してください。
This information is provided ''as-is'', without warranty of any kind, either express or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.
Eric Youngの優れたSSLeayパッケージのコピーが必要です。最新のバージョンはftp://ftp.psy.uq.oz.au/pub/Crypto/SSLから入手できます。 私たちのような自由の大陸に住んでいる人は、RSAREFライブラリーをftp://www.rsa.com/rsarefから入手する必要があります -- 同じ数学的計算をするEricのルーチンを使うことはRSAの特許か何かに抵触するようです。
reqを使って自分で署名した証明書と鍵を作る:req -config YourCA.conf -x509 -new > YourCA-cert.pem
reqは新しい秘密鍵/公開鍵のペアを生成し、新たなCA証明書に書き込む認証情報(identification information)を訊いてきます。
組織名(Organization Name)と一般名(Common Name)を入力しないと、証明書を表示しようとする際にNetscapeナビゲーターがクラッシュします。
ナビゲーターのSecurity Info dialogsに表示される順番は
YourCA-cert.pemに、対応する秘密鍵はprivkey.pemに保存されます(もし下記のconfigファイルを使えば)。
あなたは秘密鍵をどこか安全な場所に移動したいと思うかもしれません;これは認証リクエストに署名するのに必要です。サンプルconfigファイルでは、これが
/usr/local/etc/CA/private/YourCA.pem
においてあることを仮定しています。
あなたは今自分で署名した証明書を持っています。これを使って他の証明書に署名することができます。
x509 -inform pem -outform der < YourCA.pem > YourCA.derそして、DERデータを
application/x-x509-ca-certのMIMEタイプとして送ることによってブラウザーにロードします。私はこれを実行する
CGI script
を書きました。ブラウザーで以下のURLを読み込んで下さい:
http://your.server.com/download-ca-script.cgi/usr/local/etc/CA/certs/YourCA.der
あなたのサーバーがCGIスクリプトを知っていることを確認して下さい!
もしあなたがこの手続きを試してみたければ、私が作ったCA証明書がここにあります。あなたは他の鍵に署名するためにLarry, Moe, Curleyを信用しますか?:-)
reqプログラムを使って証明書のリクエストを生成する。
req -config YourCA.conf -new > site-cert-req.pem
秘密鍵を保存するのを忘れないで下さい!
このステップで入力した一般名(Common Name)はサーバー名と同じでなければならないことに注意して下さい(これは、マシンのホスト名(hostname)と同じ場合が多いですが、HTTPDサーバーのconfigファイルでは異なる設定になっているかもしれません)。もし名前が異なっていれば、証明書を提示したときにナビゲーターが文句をいいます。
caでリクエストに署名する。
ca -config YourCA.conf -in site-cert-req.pem > site-cert.pem
site-cert.pem)と秘密鍵をあなたのセキュアサーバーが読み込む場所に移して、試してみて下さい。
注: 何カ月も前に私が最初にこれを書いた時には、私は商用のNetscapeサーバーの認証リクエストに署名する方法を知りませんでした。 X509 (?) certificate specの部分に不明確な部分があり、NetscapeとEric Youngはことなる実装をしていたようです。これはEricのパッケージの中で改善されました; SSLeay-0.6.1のツールはほとんどトラブルなくNCS認証リクエスト(NCS cert request)に署名できます(私がやった時からしばらくたちますが、あなたは認証リクエストのヘッダー行とフッター行を修正する必要があるだけだと思います -- NSはそこに"NEW"を入れていますが、SSLeayはそれを好まないようです)。
私が使っているconfigファイルのコピーが以下にあります。
上記のinstructionでは、YourCA.confという名前がつけられていることを仮定していました。
# # YourCA configuration file # #################################################################### # # Netscape Navigator displays certificate info in this format: # # Common Name * # email # Organizational Unit # Organization * # Locality, State, Country # # * - required entries # # Certificates are listed by Common Name in the Security Preferences # dialogs. RANDFILE = $ENV::HOME/.rand #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = /usr/local/etc/CA # where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/new_certs # default place for new certs. certificate = $certs/YourCA.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/private/YourCA.pem # The private key RANDFILE = $dir/private/.rand # private random number file default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # which md to use. # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = optional stateOrProvinceName = optional organizationName = supplied organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = supplied organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 1024 default_keyfile = privkey.pem distinguished_name = req_distinguished_name [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (the name of your machine) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40