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 を設定するには、高度な専門知識が必要であり、外部の脅威から証明書ストアを保護するために特別な注意を払う必要があります。

プライベート認証局の設定手順

独自のプライベート認証局を設定するには、以下を実行します。

  1. 次のように、CA のディレクトリー構造を作成します。

    X509CA/demoCA
    X509CA/demoCA/private
    X509CA/demoCA/certs
    X509CA/demoCA/newcerts
    X509CA/demoCA/crl
  2. テキストエディターを使用して、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 設定ファイルは、デモンストレーションとしてのみ提供されます。実稼働環境では、この設定ファイルは、高度なセキュリティー専門知識を持つエンジニアが慎重に作成し、進化するセキュリティーの脅威から保護するために積極的に保守する必要があります。

  3. demoCA/serial ファイルを初期化します。このファイルには、初期のコンテンツ 01 が必要です。以下のコマンドを入力します。

    echo 01 > demoCA/serial
  4. demoCA/index.txt を初期化します。最初は空である必要があります。以下のコマンドを入力します。

    touch demoCA/index.txt
  5. 以下のコマンドを使用して、新しい自己署名 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 証明書をトラストストアファイルに追加するには、以下を実行します。

  1. デプロイする信頼される CA 証明書のコレクションをアセンブルします。

    信頼できる CA 証明書は、パブリック CA またはプライベート CA から取得できます。信頼できる CA 証明書は、Java keystore ユーティリティー (例: PEM 形式) と互換性のある任意の形式にすることができます。必要なのは証明書だけです。秘密鍵とパスワードは 必要ありません

  2. 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 はキーストアファイルへのアクセスに必要なパスワードです。

  3. 前の手順を繰り返して、すべての CA 証明書をトラストストアに追加します。

A.5.4. 新しい証明書の生成と署名

概要

証明書を実用するためには、証明書の信頼性を保証する CA によって署名されている必要があります。これにより、単一の CA 証明書を使用して多数の証明書を検証できるため、証明書検証のスケーラブルなソリューションが容易になります。

新しい証明書の生成および署名手順

独自のプライベート CA を使用して新しい証明書を生成し、署名するには、次の手順を実行します。

  1. 以下のように、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 アルゴリズムを使用します。

  2. keystore -certreq コマンドを使用して、証明書署名要求を作成します。

    以下のように、alice.ks 証明書の新規の証明書署名要求を作成し、alice_csr.pem ファイルにエクスポートします。

    keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
  3. 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# を参照してください。

  4. -outform オプションが PEM に設定された openssl x509 コマンドを使用して、署名付き証明書を PEM 専用形式に変換します。以下のコマンドを入力します。

    openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
  5. CA 証明書ファイルと変換された署名付き証明書ファイルを連結し、証明書チェーンを形成します。たとえば、Linux および UNIX プラットフォームでは、以下のように CA 証明書ファイルと署名済み Alice 証明書 alice_signed.pem を連結できます。

    cat demoCA/cacert.pem alice_signed.pem > alice.chain
  6. keytool -import コマンドを使用して、新しい証明書の完全な証明書チェーンを Java キーストアにインポートします。以下のコマンドを入力します。

    keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass