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 ファイルを次のように編集します。

  1. (openssl.cnf ファイルにない場合)req_extensions 設定を [req] セクションに追加します。

    # openssl Configuration File
    ...
    [req]
    req_extensions=v3_req
  2. [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
  3. 適切な 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 の署名

以下のように CA を使用して 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 設定もコメントアウトします。