Oracle WebLogic ServerでのOracle JDBC Driver SSLの設定および使用方法

2009年4月
Pas Apicella、Frances Zhao

はじめに

Secure Sockets Layer(SSL)は、ネットワーク接続を保護するための業界標準プロトコルです。 SSLは、RSA公開鍵による暗号化と対称鍵による暗号化を組み合わせて使用することで、認証、暗号化、データの整合性を実現します。

JDBCシン・クライアントとサーバー間のコミュニケーションを保護する際、Oracle Advanced SecurityのSSL機能を使用すると、以下の事項が可能になります。

  • クライアントとサーバー間の接続の暗号化
  • ネットワーク・クライアント層の認証:データベース・サーバーは、信頼できる機関により署名された証明書をもつクライアント(Oracle Application Serverなど)からの接続だけを受け入れます。 データベースに信頼されていないクライアント層や、アプリケーションが接続を試みた場合、これらはすべて失敗します。
  • データベース層の認証:データベースの証明書を検証するように、JDBCシン・ドライバを設定できます。 信頼できる機関により署名されていない証明書の場合、接続は失敗します。 アプリケーション側から見ると、データベースが信頼できるという証明が得られます。
  • サーバー上の認証サービスとしてのSSLの使用(JDBCシン・ドライバの場合、11.1.0.6以降):ネットワーク・クライアント層とは対照的に、データベース・ユーザーはSSLを介して認証されます。 この場合、データベース・ユーザーは各自の証明書をもっていることになります。

次の例は、11.1.0.6 JDBCドライバを使用した、11.1.0.6 Oracle Database Serverに対するJDBC/シンのSSL設定に関する手順です。 ここでは、サーバーとクライアントに対して自己署名付きのOracle Walletを作成し、これを使用してOracle WebLogic Server 10.3のデータソースを作成する方法を説明します。 この例では、証明書を生成する際、Oracle Public Key Infrastructure(Oracle PKI)を使用して鍵を作成しています。

必須知識

  • Oracle Database JDBC DriverとOracle WebLogic Serverのテクノロジーに関する知識が必要です。

Oracle WebLogic ServerでのOracle JDBC Driver SSLの設定および使用方法

ウォレットの作成

サーバーおよびクライアントの鍵と証明書を作成する方法については、次のMetaLink Noteを参照してください。

                           
Article-ID:         Note 762286.1
                          
                             
Title: End To End Examples of using SSL With Oracle's JDBC THIN Driver

JDBC/シンでSSLを使用するためのOracle WebLogic Serverの設定

1. はじめに、SSLに必要なOracle JARファイルをコピーします (ファイル名は以下を参照)。 この例では、" oraclelibs"という名前のサブディレクトリ内のドメイン・ディレクトリにファイルが配置されています。

[oracle@@papice ll-au2 /u01/bea103/use r_projects/doma ins/jdbcssl/ora clelibs]$ d
total 2868
-rw-r--r--   1 oracle oinstall  473050 Apr 27  2007 osdt_core.jar
-rw-r--r--   1 oracle oinstall  260444 Apr 27  2007 osdt_cert.jar
-rw-r--r--   1 oracle oinstall  158342 Sep 20  2007 oraclepki.jar
-rw-r--r--   1 oracle oinstall 1988051 Aug 28 18:16 ojdbc6.jar
drwxr-xr-x  11 oracle oinstall    4096 Feb 11 11:27 ../
drwxr-xr-x   2 oracle oinstall    4096 Feb 11 11:29 ./
[oracle@@papice ll-au2 /u01/bea103/use r_projects/doma ins/jdbcssl/ora clelibs]

2. JARファイルをドメインのCLASSPATHに追加します。 setDomainEnv.shファイルを編集します。

# SET THE CLASSPATH

CLASSPATH="${PRE_CLASSPATH}${CLASSPATHSEP}${WEBLOGIC_CLASSPATH}${CLASSPATHSEP}
${POST_CLASSPATH}${CLASSPATHSEP}${WLP_POST_CLASSPATH}
/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/oraclepki.jar
:/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/osdt_core.jar
:/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/osdt_cert.jar"
export CLASSPATH

注:ojdbc6.jarファイルは、標準でOracle WebLogic Server 10.3に同梱されているため、ここでは追加しません。

3. クライアントおよびサーバーのウォレットをドメイン・ホームにコピーします。ここで必要なのは、クライアント・ウォレットのみです。

[oracle@@papice ll-au2 /u01/bea103/use r_projects/doma ins/jdbcssl/wal lets]$ ls -lRt
.:
total 16
drwxr-xr-x  2 oracle oinstall 4096 Jan 16 17:17 client
drwxr-xr-x  2 oracle oinstall 4096 Jan 16 16:43 server

./client:
total 40
-rw-------  1 oracle oinstall 9116 Jan 16 17:22 cwallet.sso
-rw-------  1 oracle oinstall 9088 Jan 16 17:22 ewallet.p12
-rw-------  1 oracle oinstall  414 Jan 16 17:17 client_ca.cert

./server:
total 40
-rw-------  1 oracle oinstall 9140 Jan 16 17:21 cwallet.sso
-rw-------  1 oracle oinstall 9112 Jan 16 17:21 ewallet.p12
-rw-------  1 oracle oinstall  438 Jan 16 16:43 server_ca.cert
[oracle@@papice ll-au2 /u01/bea103/use r_projects/doma ins/jdbcssl/wal lets]$

4. 以下に示すとおり、WebLogicのStartupクラスを作成します。

package pas.au.wls;

import weblogic.common .T3StartupDef;
import weblogic.common .T3ServicesDef;
import java.util.Hasht able;
import java.security.S ecurity;
import oracle.security .pki.OraclePKIP rovider;

public class JDBCStartupClas s implements T3StartupDef
{
  public String startup(String name, Hashtable ht)
  {
    // instantiate OraclePKIProvid er and put it into provider slot #3
    Security.insert ProviderAt(new OraclePKIProvid er(), 3);
    System.out.prin tln("JDBCSSLSet up startup class: OraclePKIProvid er has been successfully instantiated");

     return name;
  }

  public void setServices(T3S ervicesDef serv)
  {
  }
}

5. CLASSPATHに追加するJARファイルを作成します。次のZIPファイルにはここで使用するJARファイルが格納されているため、これを使用します。 このJARファイルには上記クラスが含まれており、Oracle PKIの使用を必要とするすべてのWebLogic Server上で動作します。

wls103startup.zip

6. 以下のとおりに setDomainEnv.shを編集して、ZIPファイルから抽出したJARファイルをドメインのCLASSPATHに追加します。

# SET THE CLASSPATH

CLASSPATH="${PRE_CLASSPATH}${CLASSPATHSEP}${WEBLOGIC_CLASSPATH}${CLASSPATHSEP}
${POST_CLASSPATH}${CLASSPATHSEP}${WLP_POST_CLASSPATH}
/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/oraclepki.jar
:/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/osdt_core.jar
:/u01/bea103/user_projects/domains/jdbcssl/oraclelibs/osdt_cert.jar
: /u01/bea103/user_projects/domains/jdbcssl/wls103startup.jar"
export CLASSPATH

7. 次のURLを使用して、コンソールにログインします。

http://<server>:<port>/console

8. 左側にある"Domain Structure"ウィンドウで、「 Environment」→「 Startup & Shutdown Classes」に移動します。
9. 「 New」ボタンをクリックします。
10. ラジオ・オプション「 Startup Class」が選択されていることを確認して、「 Next」をクリックします。
11. 次のStartup Classプロパティを指定します。

Name:Oracle JDBC Startup Class
Class Name:pas.au.wls.JDBCStartupClass


12. 「 Next」をクリックします。
13. ターゲットとして、管理対象サーバーと"AdminServer"を指定します。 次に示すとおり、この例の管理対象サーバーは"apple"と名づけられています。 Oracle WebLogic Serverの起動時にJDBCリソースが作成されるため、ターゲットとしてAdminServerを指定します。Oracle WebLogic Serverでは、Oracle PKIプロバイダが有効化されている必要があるため、startupクラスでこれを実行します。

IMG1

14. 「 Next」をクリックします。
15. 「 Finish」をクリックします。
16. Startupクラスを編集します。
17. 「 Run Before Application Deployments」チェック・ボックスを選択して、いずれかのサービスが作成される前に、このstartupクラスが実行されるようにします。 これにより、コンテナの起動時に、ランタイム・エラーなしで接続プールが作成されます。
18. 「 Save」ボタンをクリックします。

ここで、Oracle WebLogic Serverを停止して、次に示すとおり再起動します。 AdminServerと管理対象サーバー"apple"に対して、startupクラスが正しく実行されます。 AdminServerと管理対象サーバー"apple"のいずれの起動時にも、" JDBCSSLSetup startup class: OraclePKIProvider has been successfully instantiated"というメッセージが表示されます。

[oracle@@papice ll-au2 /u01/bea103/use r_projects/doma ins/jdbcssl/bin ]$ ./startWebLogic .sh
.
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:CompileThre shold=8000 -XX:PermSize=48 m  -XX:MaxPermSize =128m
.
WLS Start Mode=Developmen t
.
CLASSPATH=:/u01 /bea103/patch_w lw1030/profiles /default/sys_ma nifest_classpat h/weblogic_patc h.jar:/u01/bea1 03/patch_wls103 0/profiles/defa ult/
sys_manifest_cl asspath/weblogi c_patch.jar:/u0 1/bea103/patch_ jdev1111/profil es/default/sys_ manifest_classp ath/weblogic_pa tch.jar:/u01/be a103/
patch_cie660/pr ofiles/default/ sys_manifest_cl asspath/weblogi c_patch.jar:/u0 1/bea103/jdk160 _05/lib/tools.j ar:/u01/bea103/ wlserver_10.3/s erver/lib/
weblogic_sp.jar :/u01/bea103/wl server_10.3/ser ver/lib/weblogi c.jar:/u01/bea1 03/modules/feat ures/weblogic.s erver.modules_1 0.3.0.0.jar:/u0 1/bea103/
wlserver_10.3/s erver/lib/webse rvices.jar:/u01 /bea103/modules /org.apache.ant _1.6.5/lib/ant- all.jar:/u01/be a103/modules/ne t.sf.antcontrib _1.0.0.0_1-0b2/ lib/
ant-contrib.jar ::/u01/bea103/w lserver_10.3/co mmon/eval/point base/lib/pbclie nt57.jar:/u01/b ea103/wlserver_ 10.3/server/lib /xqrl.jar:/u01/ bea103/user_pro jects/
domains/jdbcssl /oraclelibs/ora clepki.jar:/u01 /bea103/user_pr ojects/domains/ jdbcssl/oraclel ibs/osdt_core.j ar:/u01/bea103/ user_projects/d omains/jdbcssl/
oraclelibs/osdt _cert.jar:/u01/ bea103/user_pro jects/domains/j dbcssl/wls103st artup.jar:
.
PATH=/u01/bea10 3/wlserver_10.3 /server/bin:/u0 1/bea103/module s/org.apache.an t_1.6.5/bin:/u0 1/bea103/jdk160 _05/jre/bin:/u0 1/bea103/jdk160 _05/bin:/
u01/bea103/jroc kit_160_05/bin: /home/oracle/bi n:/home/oracle/ pas/scripts:/ho me/oracle/bin:/ bin:/OPatch:/ho me/oracle/pas/s cripts:/usr/ker beros/bin:/usr/ local/
bin:/bin:/usr/b in:/usr/X11R6/b in
.
*************** *************** *************** ******
*  To start WebLogic Server, use a username and   *
*  password assigned to an admin-level user.  For *
*  server administration, use the WebLogic Server *
*  console at http://hostname :port/console        *
*************** *************** *************** ******
starting weblogic with Java version:
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)
Starting WLS with line:
/u01/bea103/jdk 160_05/bin/java -client   -Xms256m -Xmx512m -XX:CompileThre shold=8000 -XX:PermSize=48 m  -XX:MaxPermSize =128m  -Xverify:none
-da -Dplatform.home =/u01/bea103/wl server_10.3 -Dwls.home=/u01 /bea103/wlserve r_10.3/server -Dweblogic.home =/u01/bea103/wl server_10.3/ser ver 
-Dweblogic.mana gement.discover =true  -Dwlw.iterative Dev= -Dwlw.testConso le= -Dwlw.logErrors ToConsole= -Dweblogic.ext. dirs=/u01/bea10 3/
patch_wlw1030/p rofiles/default /sysext_manifes t_classpath:/u0 1/bea103/patch_ wls1030/profile s/default/sysex t_manifest_clas spath:/u01/bea1 03/
patch_jdev1111/ profiles/defaul t/sysext_manife st_classpath:/u 01/bea103/patch _cie660/profile s/default/sysex t_manifest_clas spath -Dweblogic.Name =
AdminServer -Djava.security .policy=/u01/be a103/wlserver_1 0.3/server/lib/ weblogic.policy    weblogic.Server
<Feb 11, 2009 7:45:27 PM EST> <Notice> <WebLogicServer > <BEA-000395> <Following extensions directory contents added to the end of the classpath:
/u01/bea103/pat ch_wls1030/prof iles/default/sy sext_manifest_c lasspath/weblog ic_ext_patch.ja r>
<Feb 11, 2009 7:45:27 PM EST> <Info> <WebLogicServer > <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VM Version
10.0-b19 from Sun Microsystems Inc.>
<Feb 11, 2009 7:45:28 PM EST> <Info> <Management> <BEA-141107> <Version: WebLogic Server Temporary Patch for CR380042 Thu Sep 11
13:33:40 PDT 2008
WebLogic Server Temporary Patch for 7372756 Fri Sep 12 17:05:44 EDT 2008
WebLogic Server Temporary Patch for CR381265 Wed Oct 08 10:15:58 PDT 2008
WebLogic Server Temporary Patch for CR380913 Wed Oct 15 13:24:22 PDT 2008
WebLogic Server Temporary Patch for CR381739 Tue Oct 21 14:06:14 IST 2008
WebLogic Server 10.3  Fri Jul 25 16:30:05 EDT 2008 1137967 >
<Feb 11, 2009 7:45:30 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to STARTING>
<Feb 11, 2009 7:45:30 PM EST> <Info> <WorkManager> <BEA-002900> <Initializing self-tuning thread pool>
<Feb 11, 2009 7:45:30 PM EST> <Notice> <Log Management> <BEA-170019> <The server log file /u01/bea103/use r_projects/doma ins/jdbcssl/ser vers/
AdminServer/log s/AdminServer.l og is opened. All server side log events will be written to this file.>
<Feb 11, 2009 7:45:33 PM EST> <Notice> <Security> <BEA-090082> <Security initializing using security realm myrealm.>
JDBCSSLSetup startup class: OraclePKIProvid er has been successfully instantiated
<Feb 11, 2009 7:45:34 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to STANDBY>
<Feb 11, 2009 7:45:34 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to STARTING>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Log Management> <BEA-170027> <The Server has established connection with the Domain level Diagnostic
Service successfully.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to ADMIN>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to RESUMING>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Security> <BEA-090171> <Loading the identity certificate and private key stored under the alias
DemoIdentity from the jks keystore file /u01/bea103/wls erver_10.3/serv er/lib/DemoIden tity.jks.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Security> <BEA-090169> <Loading trusted certificates from the jks keystore file /u01/bea103/wls erver_10.3/
server/lib/Demo Trust.jks.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Security> <BEA-090169> <Loading trusted certificates from the jks keystore file /u01/bea103/jdk 160_05/
jre/lib/securit y/cacerts.>
<Feb 11, 2009 7:45:35 PM EST> <Warning> <Server> <BEA-002611> <Hostname "localhost.loca ldomain", maps to multiple IP addresses: 10.187.80.136,
127.0.0.1>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure" is now listening on 10.187.80.136:7 002 for protocols iiops,
t3s, ldaps, https.>
<Feb 11, 2009 7:45:35 PM EST> <Warning> <Server> <BEA-002611> <Hostname "papicell-au2.a u.oracle.com", maps to multiple IP addresses:
10.187.80.136, 127.0.0.1>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.187.80.136:7 001 for protocols iiop, t3,
ldap, snmp, http.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[ 1]" is now listening on 127.0.0.1:7002 for protocols iiops,
t3s, ldaps, https.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap,
snmp, http.>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <WebLogicServer > <BEA-000331> <Started WebLogic Admin Server "AdminServer" for domain "jdbcssl"
running in Development Mode>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <WebLogicServer > <BEA-000365> <Server state changed to RUNNING>
<Feb 11, 2009 7:45:35 PM EST> <Notice> <WebLogicServer > <BEA-000360> <Server started in RUNNING mode>

・a name="Create_the_data_Source" id="Create_the_data_Source">データソースの作成

1. 次のURLを使用して、コンソールにログインします。

http://<server>:<port>/console

2. 「 Services」→「 JDBC」→「 Data Sources」の順に選択します。
3. 「 New」をクリックします。
4. 次のとおり、詳細情報を入力します。

IMG2

5. 「 Next」をクリックします。
6. 「 Next」をクリックします。
7. データベース接続情報を入力し、「 Next」をクリックします。
8. TCPSを使用して接続していることを確認します。次のとおりにURLを変更します。

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=beast.au.oracle.com)
(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=linux11g)))


9. 次のJDBCドライバ・プロパティと現在のユーザーのプロパティを入力します。

user=scott
javax.net.ssl.trustStore=/u01/bea103/user_projects/domains/jdbcssl/wallets/client/ewallet.p12
javax.net.ssl.trustStoreType=PKCS12
javax.net.ssl.trustStorePassword=myclient123

10. 「 Next」をクリックします。
11. ターゲットに管理対象サーバー(ここでは"apple")を指定します。
12. 「 Finish」をクリックします。
13. 「 jdbc/scottSSLDS」データソースをクリックします。
14. 「 Connection Pool」タブをクリックします。
15. ページ下部へスクロールし、「 Advance」リンクをクリックして展開します。
16. 「 Test Connections On Reserve」オプションを選択します。
17. 「 Save」ボタンをクリックします。
18. 「 Monitoring」タブをクリックします。
19. 「 Testing」タブをクリックします。
20. データソースのターゲット・サーバー(ここでは「 apple」)を選択します。
21. 「 Test Data Source」ボタンをクリックします。

JDBC/シンでSSLを使用するためのデータソースの設定が正しく完了したことを確認します。

IMG3