13 セキュリティ対応クライアントの開発

セキュリティ対応クライアントを作成するためにJAAS (Java Authentication and Authorization Service)およびSecure Sockets Layer (SSL)を使用するWebLogicクライアントの開発方法を学習します。

この章の内容は次のとおりです。

JAASを使用するクライアントの開発

JAASでは、ユーザーIDに基づくアクセス制御機能が提供されます。ほとんどのWebLogic Serverクライアントの認証方法として推奨される手法です。一般には、ファイルの読取りや書込みの認証方法として使用します。

JAAS認証を実装する方法の詳細は、『WebLogicセキュリティ・サービスによるアプリケーションの開発』JavaクライアントでのJAAS認証の使用に関する項を参照してください。

ノート:

WLS-IIOPクライアントはJAASをサポートしていません。「JNDI認証を使用するクライアントの開発」を参照してください。

JNDI認証を使用するクライアントの開発

JNDI認証を使用した証明書認証(双方向SSL認証とも呼ばれる)の開発方法を学習します。

『WebLogicセキュリティ・サービスによるアプリケーションの開発』JNDI認証の使い方に関する項を参照してください。

SSLを使用するクライアントの開発

WebLogic Serverは、WebLogic Serverクライアントとサーバー、Javaクライアント、Webブラウザ、および他のサーバーの間で転送されるデータを暗号化するためにSecure Sockets Layer (SSL)をサポートしています。すべてのSSLクライアントに、信頼を指定する必要があります。信頼とは、どの信頼性のある認証局がクライアントから信頼されるのかを指定するCA証明書の集合です。

SSL接続を確立するためには、RMIクライアントでサーバーのデジタル証明書を発行した認証局を信頼する必要があります。サーバーの信頼性のあるCA証明書の場所は、RMIクライアントを起動する際に指定します。

ノート:

WebLogic ServerのJava Secure Socket Extension (JSSE)との統合では、デフォルトのjavax.net.ssl.SSLContextインスタンスも、キーストア設定を定義する次のJVMシステム・プロパティのいずれも使用しません。

  • javax.net.ssl.keyStore

  • javax.net.ssl.keyStorePassword

  • javax.net.ssl.keyStoreType

  • javax.net.ssl.trustStore

  • javax.net.ssl.trustStorePassword

  • javax.net.ssl.trustStoreType

デフォルトでは、JDK(...\jre\lib\security\cacerts)から利用できるすべての信頼性のある認証局がRMIクライアントから信頼されます。ただし、サーバーの信頼性のあるCA証明書が、次のいずれかの信頼キーストアに格納されている場合は、そのキーストアを使用するために特定のコマンド・ライン引数を指定する必要があります。

  • デモ信頼 - デモ用信頼キーストア(DemoTrust.jks)の信頼性のあるCA証明書は、WL_HOME\server\libディレクトリに格納されます。JDK cacertsキーストアの信頼性のあるCAも信頼されます。デモ信頼を使用するには、次のコマンド・ライン引数を指定します。

    -Dweblogic.security.TrustKeyStore=DemoTrust
    

    必要に応じて、次のコマンド・ライン引数を使用するとJDK cacerts信頼キーストアのパスワードを指定できます。

    -Dweblogic.security.JavaStandardTrustKeyStorePassPhrase=password 
    

    passwordは、Java標準信頼キーストアのパスワードです。このパスワードは、キーストアを作成するときに定義します。

  • カスタム信頼 - 独自に作成した信頼キーストア。カスタム信頼を使用するには、次のコマンド・ライン引数を指定します。

    信頼キーストアへの完全修飾パスを指定します。

    -Dweblogic.security.CustomTrustKeyStoreFileName=filename 
    

    キーストアのタイプを指定します。

    -Dweblogic.security.CustomTrustKeyStoreType=jks 
    

    必要に応じて、キーストアの作成時に定義されたパスワードを指定します。

    -Dweblogic.security.CustomTrustKeyStorePassPhrase=password 
    
  • Oracleのkeytoolユーティリティ。このユーティリティを使用すると、秘密キー、WebLogic Server用の自己署名デジタル証明書、およびCSR (証明書署名リクエスト)を取得できます。Oracleのkeytoolユーティリティの詳細は、http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.htmlのkeytool-Keyおよび証明書管理ツールに関する項を参照してください。

    クライアント証明書を作成するkeytoolの使用に関するチュートリアルは、『The Java EE 6 Tutorial』の、相互認証のためのクライアント証明書の作成に関する項(https://docs.oracle.com/javaee/7/tutorial/security-advanced002.htm#GLIEN)を参照してください。

ノート:

keytoolユーティリティを使用する場合、デフォルトのキー・ペア生成アルゴリズムはDSAです。WebLogic Serverでは、DSA (Digital Signature Algorithm)の使用はサポートされていません。WebLogic Serverを使用する場合には、別のキー・ペア生成および署名アルゴリズムを指定します。

SSLの実装方法の詳細は、『Oracle WebLogic Serverセキュリティの管理』SSLの構成に関する項およびキーストアの構成に関する項を参照してください。

ノート:

JSSEは、そのSSL実装においてServer Name Indication (SNI)をサポートしますが、WebLogic ServerはSNIをサポートしません。

シン・クライアントでJAASおよびSSLを使用する際の制約

WebLogicシン・クライアントでは双方向SSLのみがサポートされますが、これには、SECURITY_CREDENTIALSプロパティにSSLContextが指定されている必要があります。

WebLogicシン・クライアント・アプリケーションでのJAAS認証は以下の方法でのみサポートされます。

SSLContextを使用して双方向SSLがシン・クライアントでサポートされる方法を理解するには、次のサンプル・クライアント・コードを参照してください。

例13-1 SSLContextを使用したクライアント・コード

.
.
.
System.out.println("Getting initial context");
Hashtable props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL,"corbaloc:iiops:" + host + ":" + port +"/NameService");
 
props.put(Context.SECURITY_PRINCIPAL,"weblogic");
props.put(Context.SECURITY_CREDENTIALS, "password");
 
//Set the ssl properties through system property
//set the path to the keystore file (one key inside the store)
System.setProperty("javax.net.ssl.keyStore", YOUR-KEY_STORE_FILE_PATH);
//set the keystore pass phrase
System.setProperty("javax.net.ssl.keyStorePassword",YOUR_KEY_STORE_PASS_PHRASE);
 
//Set the trust store
//set the path to the trust store file
System.setProperty("javax.net.ssl.trustStore",YOUR-TRUST_STORE_FILE_PATH);
//set the trust store pass phrase
System.setProperty("javax.net.ssl.trustStorePassword",YOUR_TRUST_STORE_PASS_PHRASE);
 
Context ctx = new InitialContext(props);
.
.
.

セキュリティのサンプル・コード

WebLogic Server製品には、オプションで、セキュリティのサンプルが用意されています。各サンプルの説明と、サンプルをビルド、構成、実行する方法については、package-summary.htmlファイルを参照してください。

これらのサンプルは、ORACLE_HOME\wlserver\samples\server\examples\src\examples\securityディレクトリにあります。これらのサンプル・コードは、変更して再利用できます。『Oracle WebLogic Serverの理解』サンプル・アプリケーションとコード例に関する項を参照してください。