※注)このページに書かれている事を信用し、 あなたが何らかの被害を被ったとしても、 当方では一切関知しません。(お約束ネ!)
以下のような手順を踏めば CA を誰でも立ち上げる事が可能です。
まず、これが無くては始まりませんね!
OpenSSL を取って来て下さい。
SSLeay は 0.8.1a から OpenSSL へと移行したみたいです。
今後は OpenSSL を使いましょう。
SSLeay だと Apache-mod-ssl 等がコンパイル出来ないこともありますしね。
さて、無事に取って来れましたでしょうか?
私は openssl-0.9.2b を取って来ました。
早速展開して、サクっと make してしまって下さい。
INSTALL ドキュメントに書いてある通りに、な〜んも考えずに、
で OK でした。 デフォルトのままだと、/usr/local/ssl へインストールされるので、 『そんなのイヤだよ〜』なんて人は、perl を用意して、make の前に、
を実行してみて下さい。
/new/install/path へインストール先ディレクトリを変更できます。
※ アメリカ合衆国に住んでいる人は、RSA の特許に引っかかるので、
RSA からライブラリをゲットして、OpenSSL に組み込んで下さい。
詳細は、OpenSSL のドキュメント、
Web サイトを御覧下さい。
うまく make & install 出来ましたか?
簡単に CA 局になる為の Shell スクリプトが用意されています。(CA.sh)
これは便利ですので使いましょう!
(CA.pl は同じことを perl で実現しているスクリプトです。)
ここでは、openssl が /usr/local/ssl
へインストールされているモノとして話を進めます。
ちょっと、/usr/local/ssl/bin/CA.sh を覗いて見ましょう。良くわかりませんか?
ここで決めなければならないのは、自分の CA 局をどれぐらいの期間有効にするか、
ぐらいです。
最初の
DAYS="-days 365"
というのを変更すれば、10年でも100年でも CA 局の有効期間を延ばせます。
とりあえず、1年で良いのならそのままにしておきましょう。
いよいよ実行です。openssl のコマンドサーチパスをちゃんと設定して、
(/usr/local/ssl/bin を 環境変数 PATH に設定します)
実行してみましょう。
いくつか質問されますが、英文を読めば大体何を入力すれば良いかわかりますよね?
% mkdir /var/tmp/testCA ; cd /var/tmp/testCA % /usr/local/ssl/bin/CA.sh -newca CA certificate filename (or enter to create) < Return key を押す > Making CA certificate ... Using configuration from /usr/local/openssl/lib/openssl.cnf Generating a 1024 bit RSA private key .................................................................+++++ .....+++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: < Pass phrase を入力(絶対忘れてはイケナイ) > Verifying password - Enter PEM pass phrase: < 同じモノをもう一度入力 > ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) [Internet Widgits Pty Ltd]:Takashi Inc. Organizational Unit Name (eg, section) []:Security Center Common Name (eg, YOUR name) []:Security Administrator Email Address []:secure@hohoho.co.jp |
/var/tmp/testCA 下に、
CA となる為の環境が整いました。
そして、/var/tmp/testCA/demoCA/private 下に、
あなたの CA 局自身の private key(秘密鍵)となる、
cakey.pem が出来ているはずです。
また同時に、/var/tmp/testCA/demoCA 下に、
CA 局自身の CA certificate(CA 証明書)となる、
cacert.pem も出来ているはずです。
この2つの鍵ペアは非常に重要なモノなので、
管理をしっかりしなければなりません。
特に private/cakey.pem は秘密鍵なので、
第三者に閲覧されない様、パーミッションを適切に落としておきましょう。
これまでの手順をまとめると、以下の様になります。
作成されたディレクトリ & ファイル |
demoCA/ certs/ crl/ newcerts/ private/ cakey.pem serial index.txt cacert.pem |
簡易 CA 局となる為に最低限必要なファイル群 |
---|---|---|
private key | private/cakey.pem | 秘密鍵 (公開不要なので、-r-------- が望ましい) |
CA certificate | cacert.pem | CA 証明書 (公開する必要があるので、-r--r--r-- が望ましい) |
ブラウザへ独自 CA 局自身の証明書を組み込む事が出来る様に、
CA 証明書のフォーマットを変換します。
これも openssl の機能を使って変換します。以下の様にして下さい。
この出来上がった cacert.der を、 Web ブラウザから参照できる場所に置いておき、 周りの人に、この Certificate をブラウザに組み込んでもらいます。
例えばこれは、私がテストで作成した CA 証明書です。
拡張子は Certificate である事を表す為に、crt としてありますが、
サーバの MIME Type 設定で追加してあげる必要があります。
e.g.
AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crlこの例だと、cacert.der を takca.crt というファイル名にリネームして、 Web サーバ上に公開している、ということです。
さあ、これで CA局 になる準備が整いました。 いよいよ Web サーバの証明書署名要求 (CSR) に署名をしてあげましょう。
これでいよいよOpenSSL を利用した、 証明書署名要求 (CSR) の作成方法 等で作成された CSR に対して、 あなたの CA 局が署名をしてあげる事が出来ます!!
CA.sh のスクリプトで簡単に署名をする方法もあるのですが、
細かい設定が出来ないのと、「ツブし」がきくだろうということで、
ここでは、openssl のコマンドラインから署名する方法を解説します。
まず、CSR をファイルとして保存します。
この CSR は要求して来た人(あるいは自分自身?)から、
メールやフロッピー等を媒介にしてもらって下さい。
ファイルの内容は、以下の様な形式になっているはずです。
-----BEGIN CERTIFICATE REQUEST----- alsdkfjioiaerjfi2lksdflkasdASDFjoiadvksdfienljoijwefsdfdfkjASDfd f3oijalskdfjoinadmfnvlkjrifgjlkjgaASEViuhuSAoiuashlGi4asu2094jdf DFlsdasdfiHJgighiIEluYy4xJDAiBgNVBAsTGkasjdfib3ASlskdjfi3nasdj8A < snip... > asdfij2i3u887yh5EBBAUA89afdhkjvn8iufh83kajs7ig2j31kmnASDFibfIhDQ 3xcgDMfS3jCt2LF1KMFqlbbPfPZP52nPE6lbA4GBAIesd12398asdhjOsdfdgt7A asdfi/ashjasdfefpXYO/nJsdlfijoijasdfHkZsdfu8/o9sdfu12SD -----END CERTIFICATE REQUEST----- |
% openssl ca -policy policy_anything -days 365 \ -out ./demoCA/certs/darekano-cert.pem \← out と infiles の順番が -infiles ./demoCA/csrs/httpsd-csr.pem 重要です!! Using configuration from /usr/local/ssl/lib/openssl.cnf Enter PEM pass phrase: < Pass phrase を入力(忘れてないよネ?) > Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'JP' stateOrProvinceName :PRINTABLE:'Tokyo' localityName :PRINTABLE:'Setagaya' organizationName :PRINTABLE:'Takashi Communications Inc.' organizationalUnitName:PRINTABLE:'The Mail Systems Dept.' commonName :PRINTABLE:'www.ssl.nekoneko.co.jp' emailAddress :IA5STRING:'webmaster@ssl.nekoneko.co.jp' Certificate is to be certified until Jun 20 07:06:30 2000 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated |
OpenSSL はデフォルトで、/usr/local/ssl/openssl.cnf
という OpenSSL の設定ファイルに従って動作します。
dir = ./demoCA
という記述を変更すれば OK です。
% openssl ca -policy policy_match ....
として起動すると、自分の CA と同じ "countryName", "stateOrProvinceName", "organizationName" を持つ CSR にしか署名出来ません。
% openssl req -config my_config.cfg -new -key my_key.pem -out server.csr