2.5.4. CA を使用して署名した PKCS#12 証明書の作成
実行するサブステップ
「独自の CA の設定」 で説明されているように、プライベート CA を設定した場合は、これで、独自の証明書を作成して署名する準備が整いました。
PKCS#12 形式 CertName.p12
で証明書を作成して署名するには、以下のサブステップを実行します。
bin ディレクトリーを PATH に追加します。
まだ追加していない場合は、以下のように OpenSSL bin
ディレクトリーをパスに追加します。
Windows
> set PATH=OpenSSLDir\bin;%PATH%
UNIX
% PATH=OpenSSLDir/bin:$PATH; export PATH
この手順により、コマンドラインから openssl
ユーティリティーを利用できるようになります。
subjectAltName 拡張機能の設定 (オプション)
証明書が、クライアントが URL 整合性チェックを実施する HTTPS サーバーを対象としている場合、およびサーバーをマルチホームホストまたは複数の DNS 名エイリアスを持つホストに展開する場合 (たとえば、展開する場合) は、この手順を実行します。マルチホーム Web サーバー上の証明書)。この場合、証明書 ID は複数のホスト名と一致する必要がありますが、これは subjectAltName
証明書エクステンションを追加することでのみ行うことができます (「HTTPS 証明書の特別な要件」 を参照)。
subjectAltName
拡張子を設定するには、CA の openssl.cnf
ファイルを次のように編集します。
(
openssl.cnf
ファイルにない場合)req_extensions
設定を[req]
セクションに追加します。# openssl Configuration File ... [req] req_extensions=v3_req
[v3_req]
セクションヘッダーを追加します (openssl.cnf
ファイルにまだ存在しない場合)。[v3_req]
セクションで、subjectAltName
設定を追加または変更して、DNS ホスト名の一覧に設定します。たとえば、サーバーホストが代替の DNS 名であるwww.redhat.com
およびjboss.org
をサポートしている場合、以下のようにsubjectAltName
を設定します。# openssl Configuration File ... [v3_req] subjectAltName=DNS:www.redhat.com,DNS:jboss.org
適切な CA 設定セクションに
copy_extensions
設定を追加します。証明書の署名に使用される CA 設定セクションは、以下のいずれかです。-
openssl ca
コマンドの-name
オプションで指定するセクション [ca]
セクションのdefault_ca
設定で指定されるセクション (通常は[CA_default]
)。たとえば、適切な CA 設定セクションが
[CA_default]
の場合は、copy_extensions
プロパティーを以下のように設定します。# openssl Configuration File ... [CA_default] copy_extensions=copy
この設定により、証明書署名要求に存在する証明書拡張が署名付き証明書に確実にコピーされます。
-
証明書署名リクエストの作成
以下のように、CertName.p12
証明書の新しい証明書署名要求 (CSR) を作成します。
openssl req -new -config X509CA/openssl.cnf -days 365 -out X509CA/certs/CertName_csr.pem -keyout X509CA/certs/CertName_pk.pem
このコマンドは、証明書の秘密鍵のパスフレーズと、証明書の識別名に関する情報の入力を求めるプロンプトを表示します。
CSR 識別名のエントリーの一部は、CA 証明書の値と一致する必要があります (openssl.cnf
ファイルの CA ポリシーセクションで指定)。デフォルトの openssl.cnf
ファイルは、以下のエントリーが一致している必要があります。
- 国名
- 州または地区名
- Organization Name
証明書のサブジェクト DN の共通名は、証明書の所有者の ID を表すために通常使用されるフィールドです。共通名 (Common Name) は、次の条件に準拠している必要があります。
- 共通名は、OpenSSL 認証局によって生成されたすべての証明書で 区別 する必要があります。
- HTTPS クライアントが URL 整合性チェックを実装する場合は、共通名が証明書が展開されるホストの DNS 名と同一であることを確認する必要があります (「HTTPS 証明書の特別な要件」 を参照)。
HTTPS URL の整合性チェックの目的上、subjectAltName
エクステンションは 共通名よりも優先されます。
Using configuration from X509CA/openssl.cnf Generating a 512 bit RSA private key .++ .++ writing new private key to 'X509CA/certs/CertName_pk.pem' Enter PEM 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) []:IE State or Province Name (full name) []:Co. Dublin Locality Name (eg, city) []:Dublin Organization Name (eg, company) []:Red Hat Organizational Unit Name (eg, section) []:Systems Common Name (eg, YOUR name) []:Artix Email Address []:info@redhat.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []:Red Hat
CSR の署名
openssl ca -config X509CA/openssl.cnf -days 365 -in X509CA/certs/CertName_csr.pem -out X509CA/certs/CertName.pem
このコマンドには、new_ca.pem
CA 証明書に関連付けられている秘密鍵のパスフレーズが必要です。以下に例を示します。
Using configuration from X509CA/openssl.cnf Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'IE' stateOrProvinceName :PRINTABLE:'Co. Dublin' localityName :PRINTABLE:'Dublin' organizationName :PRINTABLE:'Red Hat' organizationalUnitName:PRINTABLE:'Systems' commonName :PRINTABLE:'Bank Server Certificate' emailAddress :IA5STRING:'info@redhat.com' Certificate is to be certified until May 24 13:06:57 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
証明書に正常に署名するには、CA 秘密鍵パスフレーズを入力する必要があります (「独自の CA の設定」 を参照)。
openssl.cnf
ファイルの [CA_default]
セクションで copy_extensions=copy
を設定しなかった場合、署名済み証明書には元の CSR にあった証明書エクステンションは含まれません。
ファイルの連結
以下のように、CA 証明書ファイル、CertName.pem
証明書ファイル、CertName_pk.pem
秘密鍵を連結します。
Windows
copy X509CA\ca\new_ca.pem + X509CA\certspass:quotes[_CertName_].pem + X509CA\certspass:quotes[_CertName_]_pk.pem X509CA\certspass:quotes[_CertName_]_list.pem
UNIX
cat X509CA/ca/new_ca.pem X509CA/certs/CertName.pem X509CA/certs/CertName_pk.pem > X509CA/certs/CertName_list.pem
PKCS#12 ファイルの作成
以下のように CertName_list.pem
ファイルから PKCS#12 ファイルを作成します。
openssl pkcs12 -export -in X509CA/certs/CertName_list.pem -out X509CA/certs/CertName.p12 -name "New cert"
PKCS#12 証明書を暗号化するパスワードを入力するように求められます。通常、このパスワードは CSR パスワードと同じです (これは、多くの証明書リポジトリーで必要です)。
必要に応じて手順を繰り返します。
ステップ 3 から 6 を繰り返し、システムの完全な証明書セットを作成します。
subjectAltName 拡張機能の設定 (オプション)
特定のホストマシンの証明書の生成後に、openssl.cnf
ファイルで subjectAltName
設定を消去して、別の証明書セットに間違った DNS 名を誤って割り当てないようにすることが推奨されます。
openssl.cnf
ファイルで、(行頭に #
文字を追加して) subjectAltName
設定をコメントアウトし、さらに copy_extensions
設定もコメントアウトします。