JCEの構成

専用キー管理JCEプロバイダを構成するには、次のトピックの情報を使用します。

JCEプロバイダの環境変数の設定

JCEプロバイダを使用するには、次の環境変数を設定します。

LD_LIBRARY_PATH: この変数には、ocidkmsjca.soファイルを含むディレクトリへのパスを含める必要があります。この変数を使用すると、JCEはHSMとの通信に必要なネイティブjavaライブラリを検出できます。標準インストールの場合、ディレクトリは/opt/oci/hsm/libです。

JavaセキュリティへのJCEプロバイダの追加

この項で説明する方法のいずれかを使用して、JCEプロバイダをシステムのJavaセキュリティ構成に追加する必要があります。

Javaセキュリティ・ファイルを編集するには

JAVA_HOMEで、OCI専用KMSセキュリティ・プロバイダをセキュリティ・プロバイダのリストの最後に追加します。プロバイダ・エントリは次のとおりです。

security.provider.<list-number>=com.oracle.dkms.jce.provider.DedicatedKmsProvider
  1. エディタでjava.securityファイルを開きます。たとえば、次のコマンドを実行して、VIMエディタでファイルを開きます。

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
  2. ファイル内のセキュリティ・プロバイダのリストの最後にエントリを追加します。次の例では、エントリがsecurity.provider.13として追加されます。

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
    security.provider.1=SUN
    security.provider.2=SunRsaSign
    security.provider.3=SunEC
    security.provider.4=SunJSSE
    security.provider.5=SunJCE
    security.provider.6=SunJGSS
    security.provider.7=SunSASL
    security.provider.8=XMLDSig
    security.provider.9=SunPCSC
    security.provider.10=JdkLDAP
    security.provider.11=JdkSASL
    security.provider.12=SunPKCS11
    security.provider.13=com.oracle.dkms.jce.provider.DedicatedKmsProvider
JavaアプリケーションでJCEプロバイダを動的にロードするには

次のように、Security JavaクラスのaddProviderメソッドを使用してJCEプロバイダを追加します。

DedicatedKmsProvider provider =  new DedicatedKmsProvider();
Security.addProvider(provider);

詳細は、JavaドキュメントのaddProviderを参照してください。

認証

ユーザーは、特定の優先順位で複数のソースから取得された資格証明によってHSMへのログイン用に認証されます。有効な資格証明がいずれかのソースで見つかった場合、ログインは完了します。有効な資格証明が見つからない場合、ログインは失敗します。

資格証明ソースおよび優先順位

ログイン資格証明は、次のメカニズムによって提供されます。

  1. CallbackHandler:これを指定すると、資格証明が動的に取得されます。たとえば:

    public class CustomCallbackHandler implements CallbackHandler {
        private final String username;
        private final char[] password;
     
        public CustomCallbackHandler(String username, char[] password) {
            this.username = username;
            this.password = password;
        }
     
        @Override
        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
            for (Callback callback : callbacks) {
                if (callback instanceof NameCallback) {
                    ((NameCallback) callback).setName(username);
                } else if (callback instanceof PasswordCallback) {
                    ((PasswordCallback) callback).setPassword(password);
                } else {
                    throw new UnsupportedCallbackException(callback, "Unsupported callback type");
                }
            }
        }
    }            
    
    DedicatedKmsProvider provider = new DedicatedKmsProvider();
    Security.addProvider(provider);
    CustomCallbackHandler handler = new CustomCallbackHandler(crypto_user, cupassword.toCharArray());
    provider.login(null, handler);
  2. HsmCredentials.propertiesファイル:アプリケーションは、クラスパスでHsmCredentials.propertiesという名前のプロパティ・ファイルをチェックします。ファイルが存在し、有効な資格証明が含まれている場合は、認証に使用されます。このファイルには次のものが含まれている必要があります。

    • HSM_USER = crypto_user
    • HSM_PASSWORD = cupassword
  3. Javaシステム・プロパティ:プロパティ・ファイルに資格証明が見つからない場合は、Javaシステム・プロパティがチェックされます。HSM_USERおよびHSM_PASSWORDの値は、システム・プロパティとして設定する必要があります。これらは、javaアプリケーションの実行時に-Dフラグを使用して設定できます。たとえば

    -DHSM_USER=crypto_user 
    -DHSM_PASSWORD=cupassword
  4. オペレーティング・システムの環境変数(最も低い優先度): Javaシステム・プロパティに資格証明が見つからない場合、環境変数が設定されていれば、環境変数から取得できます。HSM_USERおよびHSM_PASSWORDの値を環境変数として設定し、次の例に示すようにエクスポートします。

    export HSM_USER=crypto_user 
    export HSM_PASSWORD=cupassword