キーストアの構成

TLS/SSLでは、ネットワークを介して接続している2つのアプリケーションが互いのIDを認証できるようにするとともに、アプリケーション間で交換されるデータを暗号化することで、セキュアな接続を実現します。

認証を使用すると、サーバーおよび必要に応じてクライアントはネットワーク接続の相手側アプリケーションのIDを検証できます。ネットワーク経由で送信されるデータは暗号化されるので、予定されている宛先以外には解釈できません。

Oracle WebLogic ServerでのTLS/SSL

WebLogic ServerのTLS/SSLは、Secure Sockets Layer (SSL)およびTransport Layer Security (TLS)仕様の実装です。WebLogic Serverは、専用のリスニング・ポート(デフォルトは7002)でTLS/SSLをサポートします。Oracle WebLogic Server環境でのSSLの構成の詳細は、「SSLの構成」を参照してください。

デフォルトでは、WebLogic Serverは、開発環境またはテスト環境で作業するためのデモ用の証明書またはキーストアを提供します。これらの証明書が本番環境で使用されていないことを確認してください。

自己署名証明書は、開発環境またはテスト環境のWebLogic Serverで作成および構成されます。本番環境では、Verisign、Let's Encrypt、GoDaddyなどの有効な認証局(CA)からCA署名TLS/SSL証明書を購入し、その証明書でキーストアを作成する必要があります。

WebLogic ServerでSSLを構成するには、次のセキュリティ・ファイルが必要です:

  • 信頼ストア: このファイルには、中間CAまたはルートCAからの証明書、あるいはTLS/SSL通信で使用される信頼できるサード・パーティからの証明書が含まれます。
  • アイデンティティ・ストア: アイデンティティ・ストア(またはキーストア)ファイルには、秘密キーおよびサーバーTLS/SSL証明書が含まれます。このファイルはJKSまたはPKCS12形式で格納されます。

キーストア形式

キーストアは、暗号化のキーと証明書を格納するための機能です。サポートされているキーストア形式は次のとおりです:

  • JKS - Javaキーストア
  • PKCS12 - 公開キーの暗号化標準

keypassおよびstorepass

keypassには、生成されるキーのペアのうち、秘密キーを保護するために使用するパスワードを指定します。storepassには、キーストアの整合性を保護するために使用するパスワードを指定します。keypassを指定しない場合、keypassはstorepassと同じ値に設定されます。

IDキーストアと信頼キーストア

WebLogic Serverは、秘密キー、デジタル証明書および認証局によって発行された信頼できる証明書を使用して、サーバーのIDと信頼を確立および検証します。『Oracle WebLogic Serverセキュリティの理解』IDと信頼に関する項を参照してください。

IDキーストアおよび信頼キーストアを作成するには、keytoolユーティリティを使用する必要があります。keytoolとは、JDKに含まれている、キーと証明書を管理するためのユーティリティです。詳細は、次のトピックを参照してください。

自己署名証明書のIDキーストアおよび信頼キーストアの作成

keytoolユーティリティを使用して、自己署名証明書のIDキーストアおよび信頼キーストアを作成します。

これを実行するには:
  1. IDキーストアを作成します:
    keytool -genkey -alias <private_key_alias> -keyalg <key_algorithm> -keysize <key_size> -sigalg <signature_algorithm> -validity <validity_period_in_days> -keystore <keystore_fileName> -keypass <key_passphrase> -storepass <identity_keystore_passphrase>

    たとえば:

    keytool -genkey -alias servercert -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore identity.jks -keypass identityKeyPassword -storepass identityStorePassword
  2. (オプション) PKCS12形式のIDキーストアを使用するには、キーストアをJKSタイプからPKCS12タイプに変換します:
    keytool -importkeystore -srckeystore <keystore_file_in_JKS_Format> -destkeystore <keystore_file_in_PKCS12_format> -deststoretype pkcs12

    たとえば:

    keytool -importkeystore -srckeystore identity.jks -destkeystore identity.p12 -deststoretype pkcs12
  3. IDキーストアをエクスポートして証明書を作成します:
    keytool -export -alias <private_key_alias> -noprompt -file <certificate_name> -keystore <identity_keystore_filename> -storepass <identity_keystore_passphrase>

    たとえば:

    keytool -export -alias servercert -noprompt -file server.cert -keystore identity.jks -storepass identityStorePassword
  4. 信頼キーストアに証明書をインポートします:
    keytool -import -alias <trust_store_alias> -noprompt -file <certificate_name> -keystore <trust_keystore_filename> -storepass <trust_keystore_passphrase>

    たとえば:

    keytool -import -alias trustcert -noprompt -file root.cert -keystore trust.jks -storepass trustKeyStorePassword
  5. (オプション) PKCS12形式の信頼キーストアを使用するには、キーストアをJKSタイプからPKCS12タイプに変換します:
    keytool -importkeystore -srckeystore <keystore_file_in_JKS_Format> -destkeystore <keystore_file_in_PKCS12_format> -deststoretype pkcs12

    たとえば:

    keytool -importkeystore -srckeystore identity.jks -destkeystore identity.p12 -deststoretype pkcs12
  6. IDキーストアおよび信頼キーストアを検証します:
    keytool  -list -v -keystore <keystore_file>

    たとえば:

    keytool -list -v -keystore identity.jks -storepass identityStorePassword
    keytool -list -v -keystore trust.jks -storepass trustKeyStorePassword

CA署名証明書のIDキーストアおよび信頼キーストアの作成

keytoolユーティリティを使用して、自己署名証明書のIDキーストアおよび信頼キーストアを作成します。

これを実行するには:
  1. キーストアを作成します:
    keytool -keystore <keystore_file_in_JKS_Format> -genkey -alias <private_key_alias>

    たとえば:

    keytool -keystore clientkeystore -genkey -alias client

    プロンプトが表示されたら必要な詳細を入力します。たとえば:

    Enter keystore password: javacaps
    What is your first and last name?
    [User]:  example.org.com
    What is the name of your organizational unit?
    [User]:  Development
    What is the name of your organization?
    [User]:  example org
    What is the name of your City or Locality?
    [User]:  San Francisco
    What is the name of your State or Province?
    [User]:  California
    What is the two-letter country code for this unit?
    [User]:  US
    Is <CN=example.org.com, OU=Development, O=example org, L=San Francisco, ST=California, 
    C=US> correct?
    [no]:  yes
    
    Enter key password for <client>
    (RETURN if same as keystore password):
  2. 証明書署名リクエスト(CSR)を生成します:
    keytool -keystore <keystore_file> -certreq -alias <private_key_alias> -keyalg <key_algorithm> -file
          <certificate_signing_request_file>

    たとえば:

    keytool -keystore clientkeystore -certreq -alias client -keyalg rsa -file client.csr

    プロンプトが表示されたら必要な詳細を入力します。たとえば:

    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
      [User]: example.org.com
    What is the name of your organizational unit?
      [User]: Development
    What is the name of your organization?
      [User]: example org
    What is the name of your City or Locality?
      [User]: San Francisco
    What is the name of your State or Province?
      [User]: California
    What is the two-letter country code for this unit?
      [User]: US
    Is CN=example.org.com, OU=Development, O=example org, L=San Francisco, ST=California, C=US correct?
      [no]: yes
    
    Enter key password for <client>
            (RETURN if same as keystore password):
    Re-enter new password:
  3. 証明書署名リクエストを認証局(CA)に送信します:

    CSRのCAへの送信は、オンラインまたは電子メールで行うことができます。CAがCSRを受信すると、リクエストが検証され、TLS/SSL証明書が発行されます。検証プロセスが完了すると、CAはTLS/SSL証明書を電子メールで送信するか、オンライン・アカウントを使用して証明書をダウンロードするためのアクセスをクライアントに提供します。

    認証局は、次のものを含むZIPファイルを提供します:

    • サーバーSSL証明書
    • ルート証明書と中間証明書
    • 秘密キー

    ノート:

    CAは、ルート証明書と中間証明書を結合して、または別々に提供することがあります。また、複数の中間証明書が存在する場合もあります。ルート証明書と中間証明書を結合し、WebLogic ServerでTLS/SSLを構成するために使用できる単一の証明書を作成する必要があります。
  4. 次の手順を実行して、結合された証明書を作成します:
    1. テキスト・エディタを開きます。
    2. ルート証明書の内容(-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----を含む)をコピーし、テキスト・エディタで、もう一方の証明書の下に貼り付けます。
    3. ファイルをcombined.crtとして保存します。
  5. 結合された証明書を検証します:
    bash>openssl verify -CAfile combined.crt certificate.crt
    certificate.crt: OK
  6. 信頼ストア・ファイルを作成します:
    keytool -noprompt -import -alias <server_alias> -file <CA_certificate> -keystore <trust_store_file> -storepass <trust_store_password>

    たとえば:

    keytool -noprompt -import -alias trustcert -file ca_bundle.crt -keystore trust.jks -storepass mypassword
    複数のルート証明書またはCA証明書がある場合は、それらを同じキーストア・ファイルに個別にインポートします。たとえば:
    keytool -import -file /u01/app/cascerts/rootCA.cert -alias rootCA -keystore trust.jks
    keytool -import -file /u01/app/cascerts/firstCA.cert -alias firstCA -keystore trust.jks
    keytool -import -file /u01/app/cascerts/secondCA.cert -alias secondCA -keystore trust.jks
    keytool -import -file /u01/app/cascerts/thirdCA.cert -alias thirdCA -keystore trust.jks
  7. すべての中間証明書を1つのファイル(たとえば、combined.crt)にマージします:
    cat ca_1.crt ca_2.crt > combined.crt
  8. アイデンティティ・ストア・ファイルを作成します:
    openssl pkcs12 -export -in <server_certificate> -inkey <private_key> -chain -CAfile <combined_certificate_file> -name <private_key_alias> -out <identity_keystore_in_PKCS12_format>
    
    keytool -noprompt -importkeystore -destorepass <destination_store_password> -destkeystore <destination_keystore_file> -srckeystore <source_keystore_file> -srcstoretype <source_keystore_type> -srcalias <source_alias> -destalias <destination_alias> -srckeypass <source_key_password>

    たとえば:

    openssl pkcs12 -export -in certificate.crt -inkey private.key -chain -CAfile combined.crt -name servercert -out mycert.p12
    
    keytool -noprompt -importkeystore -deststorepass mypassword -destkeystore identity.jks -srckeystore mycert.p12 -srcstoretype PKCS12 -srcalias servercert -destalias servercert -srckeypass mypassword

Azure Key Vaultへのキーストアおよびパスフレーズの格納

セキュアなキー管理は、クラウド内のデータを保護するために不可欠です。

Azure Key Vaultでは、TLS/SSL証明書、機密キーおよびその他のシークレット(パスワードなど)を格納できます。次の例は、TLS/SSL証明書およびキーストアをAzure KeyVaultに格納する方法を示しています:

az keyvault secret set --vault-name mySecureKeyVault  --encoding base64 --description text/plain --name identityKeyStoreData --file identity.jks
az keyvault secret set --vault-name mySecureKeyVault  --name "identityKeyPassPhrase" --value "identityKeyPassword"
az keyvault secret set --vault-name mySecureKeyVault  --encoding base64 --description text/plain --name trustKeyStoreData --file trust.jks
az keyvault secret set --vault-name mySecureKeyVault  --name "trustKeyPassPhrase" --value "trustKeyPassword"
az keyvault secret set --vault-name mySecureKeyVault  --name "privateKeyAlias" --value "servercert"
az keyvault secret set --vault-name mySecureKeyVault  --name "privateKeyPassPhrase" --value "myPrivateKey"

Azure Key Vaultシークレットの管理の詳細は、Azure Key Vaultシークレットに関するMicrosoftのドキュメントを参照してください。