A.5. 独自の証明書の作成
概要
この章では、独自のプライベート認証局 (CA) を設定し、この CA を使用して独自の証明書を生成および署名するための手法と手順について説明します。
独自の証明書を作成および管理するには、セキュリティーに関する専門知識が必要です。この章で説明する手順を使用すると、デモンストレーションおよびテスト環境用に独自の証明書を手軽に生成できますが、実稼働環境でこれらの証明書を使用することは お勧めしません。
A.5.1. OpenSSL ユーティリティーのインストール
RHEL および Fedora プラットフォームへの OpenSSL のインストール
Red Hat Enterprise Linux (RHEL) 5 と 6、および Fedora プラットフォームでは、RPM パッケージとして利用できます。OpenSSL をインストールするには、次のコマンドを入力します (管理者権限で実行)。
yum install openssl
ソースコードのディストリビューション
OpenSSL のソースディストリビューションは、http://www.openssl.org/docs にあります。OpenSSL プロジェクトは、ソースコードのディストリビューション のみ て提供しています。OpenSSL Web サイトから OpenSSL ユーティリティーのバイナリーインストールをダウンロードすることはできません。
A.5.2. プライベート認証局の設定
概要
プライベート CA を使用する場合は、アプリケーションで使用する独自の証明書を生成する必要があります。OpenSSL プロジェクトは、プライベート CA を設定し、署名付き証明書を作成し、CA を Java キーストアに追加するための無料コマンドラインユーティリティーを提供します。
実稼働環境用にプライベート CA を設定するには、高度な専門知識が必要であり、外部の脅威から証明書ストアを保護するために特別な注意を払う必要があります。
プライベート認証局の設定手順
独自のプライベート認証局を設定するには、以下を実行します。
次のように、CA のディレクトリー構造を作成します。
X509CA/demoCA X509CA/demoCA/private X509CA/demoCA/certs X509CA/demoCA/newcerts X509CA/demoCA/crl
テキストエディターを使用して、
X509CA/openssl.cfg
ファイルを作成し、以下の内容をこのファイルに追加します。例A.1 OpenSSL 設定
# # SSLeay example configuration file. # This is mostly being used for generation of certificate requests. # RANDFILE = ./.rnd #################################################################### [ req ] default_bits = 2048 default_keyfile = keySS.pem distinguished_name = req_distinguished_name encrypt_rsa_key = yes default_md = sha1 [ req_distinguished_name ] countryName = Country Name (2 letter code) organizationName = Organization Name (eg, company) commonName = Common Name (eg, YOUR name) #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = ./demoCA # 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. #unique_subject = no # Set to 'no' to allow creation of # several certificates with same subject. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# The private key RANDFILE = $dir/private/.rand # private random number file name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options default_days = 365 # how long to certify for default_crl_days = 30 # how long before next CRL default_md = md5 # which md to use. preserve = no # keep passed DN ordering policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
重要前述の
openssl.cfg
設定ファイルは、デモンストレーションとしてのみ提供されます。実稼働環境では、この設定ファイルは、高度なセキュリティー専門知識を持つエンジニアが慎重に作成し、進化するセキュリティーの脅威から保護するために積極的に保守する必要があります。demoCA/serial
ファイルを初期化します。このファイルには、初期のコンテンツ01
が必要です。以下のコマンドを入力します。echo 01 > demoCA/serial
demoCA/index.txt
を初期化します。最初は空である必要があります。以下のコマンドを入力します。touch demoCA/index.txt
以下のコマンドを使用して、新しい自己署名 CA 証明書と秘密鍵を作成します。
openssl req -x509 -new -config openssl.cfg -days 365 -out demoCA/cacert.pem -keyout demoCA/private/cakey.pem
例A.2「CA 証明書の作成」 に示されるとおり、CA 秘密鍵のパスフレーズと CA 識別名の詳細の入力を求められます。
例A.2 CA 証明書の作成
Generating a 2048 bit RSA private key ...........................................................................+++ .................+++ writing new private key to 'demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - 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) []:DE Organization Name (eg, company) []:Red Hat Common Name (eg, YOUR name) []:Scooby Doo
注記CA のセキュリティーは、秘密鍵ファイルと、この手順で使用する秘密鍵のパスフレーズによって異なります。
CA 証明書と秘密鍵 (
cacert.pem
およびcakey.pem
) のファイル名と場所が、openssl.cfg
で指定した値と同じであることを確認してください (前述の手順を参照)。
A.5.3. CA トラストストアファイルの作成
概要
サーバーの ID を確認するために、SSL/TLS 接続のクライアント側でトラストストアファイルが一般的に必要です。トラストストアファイルを使用して、デジタル署名を確認することもできます (たとえば、トラストストアファイル内の信頼できる証明書の 1 つに対応する秘密鍵を使用して署名が作成されたことを確認する)。
CA トラストストアの作成手順
1 つ以上の CA 証明書をトラストストアファイルに追加するには、以下を実行します。
デプロイする信頼される CA 証明書のコレクションをアセンブルします。
信頼できる CA 証明書は、パブリック CA またはプライベート CA から取得できます。信頼できる CA 証明書は、Java
keystore
ユーティリティー (例: PEM 形式) と互換性のある任意の形式にすることができます。必要なのは証明書だけです。秘密鍵とパスワードは 必要ありません。keytool -import
コマンドを使用して、CA 証明書をトラストストアに追加します。以下のコマンドを入力して、PEM 形式の CA 証明書
cacert.pem
を JKS トラストストアに追加します。keytool -import -file cacert.pem -alias CAAlias -keystore truststore.ts -storepass StorePass
truststore.ts
は、CA 証明書が含まれるキーストアファイルです。このファイルが存在しない場合は、keytool
コマンドにより作成されます。CAAlias
は、インポートされた CA 証明書の便利な識別子です。StorePass
はキーストアファイルへのアクセスに必要なパスワードです。- 前の手順を繰り返して、すべての CA 証明書をトラストストアに追加します。
A.5.4. 新しい証明書の生成と署名
概要
証明書を実用するためには、証明書の信頼性を保証する CA によって署名されている必要があります。これにより、単一の CA 証明書を使用して多数の証明書を検証できるため、証明書検証のスケーラブルなソリューションが容易になります。
新しい証明書の生成および署名手順
独自のプライベート CA を使用して新しい証明書を生成し、署名するには、次の手順を実行します。
以下のように、
keytool -genkeypair
コマンドを使用して、証明書と秘密鍵のペアを生成します。keytool -genkeypair -keyalg RSA -dname "CN=Alice, OU=Engineering, O=Red Hat, ST=Dublin, C=IE" -validity 365 -alias alice -keypass KeyPass -keystore alice.ks -storepass StorePass
指定のキーストア
alice.ks
はコマンドを実行する前に存在していなかったため、暗黙的に新しいキーストアが作成され、パスワードがStorePass
に設定されます。-dname
および-validity
フラグは、新たに作成された X.509 証明書の内容を定義します。注記証明書の識別名 (
-dname
パラメーターを使用した) を指定する場合は、openssl.cfg
ファイルで指定されたポリシー制約を必ず守る必要があります。これらのポリシー制約に従わない場合は、(次の手順で) CA を使用して証明書に署名することはできません。注記-keyalg RSA
オプション (または同様の強度の鍵アルゴリズム) を使用してキーペアを生成することが不可欠です。デフォルトのキーアルゴリズムは、DSA 暗号化と SHA-1 署名の組み合わせを使用します。しかし、SHA-1 アルゴリズムは十分にセキュアであるとはみなされなくなっており、最新の Web ブラウザーは SHA-1 を使用して署名された証明書を拒否します。RSA 鍵アルゴリズムを選択すると、keytool
ユーティリティーは代わりに SHA-2 アルゴリズムを使用します。keystore -certreq
コマンドを使用して、証明書署名要求を作成します。以下のように、
alice.ks
証明書の新規の証明書署名要求を作成し、alice_csr.pem
ファイルにエクスポートします。keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
openssl ca
コマンドを使用して CSR に署名します。次のように、プライベート CA を使用して Alice 証明書の CSR に署名します。
openssl ca -config openssl.cfg -days 365 -in alice_csr.pem -out alice_signed.pem
「プライベート認証局の設定手順」 で CA 作成した際に使用した CA 秘密鍵パスフレーズを入力するように求められます。
openssl ca
コマンドについての詳細は、http://www.openssl.org/docs/apps/ca.html# を参照してください。-outform
オプションがPEM
に設定されたopenssl x509
コマンドを使用して、署名付き証明書を PEM 専用形式に変換します。以下のコマンドを入力します。openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
CA 証明書ファイルと変換された署名付き証明書ファイルを連結し、証明書チェーンを形成します。たとえば、Linux および UNIX プラットフォームでは、以下のように CA 証明書ファイルと署名済み Alice 証明書
alice_signed.pem
を連結できます。cat demoCA/cacert.pem alice_signed.pem > alice.chain
keytool -import
コマンドを使用して、新しい証明書の完全な証明書チェーンを Java キーストアにインポートします。以下のコマンドを入力します。keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass