JCEの構成
専用キー管理JCEプロバイダを構成するには、次のトピックの情報を使用します。
JCEプロバイダの環境変数の設定
JCEプロバイダを使用するには、次の環境変数を設定します。
LD_LIBRARY_PATH
: この変数には、ocidkmsjca.so
ファイルを含むディレクトリへのパスを含める必要があります。この変数を使用すると、JCEはHSMとの通信に必要なネイティブjavaライブラリを検出できます。標準インストールの場合、ディレクトリは/opt/oci/hsm/lib
です。
JavaセキュリティへのJCEプロバイダの追加
この項で説明する方法のいずれかを使用して、JCEプロバイダをシステムのJavaセキュリティ構成に追加する必要があります。
JAVA_HOMEで、OCI専用KMSセキュリティ・プロバイダをセキュリティ・プロバイダのリストの最後に追加します。プロバイダ・エントリは次のとおりです。
security.provider.<list-number>=com.oracle.dkms.jce.provider.DedicatedKmsProvider
-
エディタでjava.securityファイルを開きます。たとえば、次のコマンドを実行して、VIMエディタでファイルを開きます。
$ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
-
ファイル内のセキュリティ・プロバイダのリストの最後にエントリを追加します。次の例では、エントリが
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
次のように、Security JavaクラスのaddProvider
メソッドを使用してJCEプロバイダを追加します。
DedicatedKmsProvider provider = new DedicatedKmsProvider();
Security.addProvider(provider);
詳細は、JavaドキュメントのaddProviderを参照してください。
認証
ユーザーは、特定の優先順位で複数のソースから取得された資格証明によってHSMへのログイン用に認証されます。有効な資格証明がいずれかのソースで見つかった場合、ログインは完了します。有効な資格証明が見つからない場合、ログインは失敗します。
資格証明ソースおよび優先順位
ログイン資格証明は、次のメカニズムによって提供されます。
-
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);
-
HsmCredentials.propertiesファイル:アプリケーションは、クラスパスで
HsmCredentials.properties
という名前のプロパティ・ファイルをチェックします。ファイルが存在し、有効な資格証明が含まれている場合は、認証に使用されます。このファイルには次のものが含まれている必要があります。- HSM_USER = crypto_user
- HSM_PASSWORD = cupassword
-
Javaシステム・プロパティ:プロパティ・ファイルに資格証明が見つからない場合は、Javaシステム・プロパティがチェックされます。
HSM_USER
およびHSM_PASSWORD
の値は、システム・プロパティとして設定する必要があります。これらは、javaアプリケーションの実行時に-D
フラグを使用して設定できます。たとえば-DHSM_USER=crypto_user -DHSM_PASSWORD=cupassword
-
オペレーティング・システムの環境変数(最も低い優先度): Javaシステム・プロパティに資格証明が見つからない場合、環境変数が設定されていれば、環境変数から取得できます。
HSM_USER
およびHSM_PASSWORD
の値を環境変数として設定し、次の例に示すようにエクスポートします。export HSM_USER=crypto_user export HSM_PASSWORD=cupassword