インストールおよびアップグレード > 高度な展開の検討事項 > 高度なデータベース設定 > JDBC over SSL を使用するための Windchill の設定 > JDBC over SSL を使用して Oracle データベースに接続するための Windchill の設定
  
JDBC over SSL を使用して Oracle データベースに接続するための Windchill の設定
* 
注意: このトピックでは、Windchill サーバーホストを "クライアント" と呼び、Oracle サーバーが動作している Oracle データベースホストを "サーバー" と呼んでいます。データベースとの関係においては、Windchill サーバーはデータベースサーバーのクライアントとして機能します。
Oracle データベースサーバー用 Microsoft JDBC ドライバーを使用して Oracle 12C データベースサーバーがそのクライアント (Windchill サーバー) と暗号化された通信を行うよう設定するときの大まかなステップは以下のとおりです。
1. クライアント側とサーバー側で証明書を作成して交換する
2. サーバーキーを使用した TCPS を使用するようデータベースを設定する
3. JDBC over SSL を設定する
以降の各セクションでは、これらの各ステップの手順について説明します。
Windchill 11.1 F000 以降のリリースでは、12C R2 データベースととも使用することで、この機能がサポートされます。
Oracle Wallet Manager または orapki によって作成された Oracle ウォレットでは、標準の PKCS12 フォーマットで X.509 証明書と秘密キーが保存されます。このウォレットは ewallet.p12 という名前のファイルに保存されます。以下の例では、クライアント側で既存の Windchill Java キーストアを使用します。サーバー側では、Oracle によって Oracle ウォレット用の SSL サポートが提供されるので、orapki を使用してウォレットを作成します。OraclePKI コマンドは $ORACLE_HOME/bin フォルダに保存されています。Oracle ウォレットの詳細については、https://docs.oracle.com/middleware/1213/wls/JDBCA/oraclewallet.htm#JDBCA598 を参照してください。
クライアント/サーバー側での証明書の作成と交換
Oracle 12C R2 データベースサーバーでは、任意のディレクトリの場所にウォレットを作成できます。ただし、Oracle はウォレットを ORACLE_HOME データベース環境内に作成することを推奨しています。Oracle サービスが実行しているウォレットディレクトリに対して必要な読み取りアクセス許可を持っていることを確認します。ウォレットは Unix プラットフォームでは SUDO ユーザーを使用して作成でき、Windows プラットフォームでは管理ユーザーを使用して作成できます。
以下のステップを実行して、2 つのウォレット (サーバーウォレットとクライアントウォレット) および自己署名証明書を作成します。
1. すべてのウォレットを保存するためのディレクトリを作成します。このウォレットディレクトリは任意の場所に作成できます。Oracle はウォレットを以下の場所に作成することを推奨しています。
> mkdir wallets
> cd wallets
例: %ORACLE_HOME%\wallets
2. Oracle サーバー用のウォレットを作成します。自動ログインが有効な空のウォレットを作成します。
> orapki wallet create -wallet ./server_wallet -auto_login -pwd server01
例:
orapki wallet create -wallet %ORACLE_HOME%\wallets\server_wallet
-auto_login -pwd server01
server_wallet ディレクトリの下に以下の 2 つのファイルが作成されます。
server_wallet/cwallet.sso
server_wallet/ewallet.p12
3. ウォレットに自己署名証明書を追加します。秘密キーまたは公開キーの新しいペアが作成されます。
> orapki wallet add -wallet ./server_wallet -dn “CN=server”
-keysize 1024 -self_signed -validity 365 -pwd server01
a. server_wallet ディレクトリを表示します。
> orapki wallet display -wallet ./server_wallet
...
Requested Certificates:
Subject: CN=server
...
b. サーバー証明書をエクスポートします。
> orapki wallet export –wallet ./server_wallet -dn “CN=server”
-cert ./server_wallet/cert.txt
Windchill クライアント側に cert.txt ファイルをコピーします。
4. サーバー証明書をクライアントキーストアにインポートします。クライアントでは、Java キーストアを使用してサーバー証明書を保存します。
> keytool -importcert -alias <ALIAS-NAME> -keystore <PATH-TO-KEYSTORE>
-file <FILE-PATH-TO-SERVER-CERTIFICATE>
例:
keytool -importcert -alias oraclessl
-keystore JAVA_HOME\jre\lib\security\cacerts
-file JAVA_HOME\bin\cert.txt
以下のパラメータを使用します。
<ALIAS-NAME> - サーバー証明書ファイルをキーストアに保存するときに使用するエイリアス名。
<PATH-TO-KEYSTORE> - サーバー証明書のインポート先となるキーストアの場所。Windchill のデフォルトの Java キーストアを使用する場合、これは {wt.jdk}/jre/lib/security に cacerts という名前で存在します。wt.jdk の値は WT_HOME/codebase/wt.properties ファイルで見つけることができます。
<FILE-PATH-TO-SERVER-CERTIFICATE> - サーバー証明書が保存されているディレクトリの場所。この例では、ファイル cert.txt です。
5. クライアントキーストア内に自己署名クライアント証明書を作成します。
keytool -genkeypair -alias "<ALIAS-OF-YOUR-CLIENT-SSL-CERT>" -keyalg RSA
-validity 365 -keysize 2048 -keystore <PATH-TO-KEYSTORE>
例:
keytool -genkeypair -alias ClientCerts -keylag RSA -validity 365
-keysize 2048 -keystore JAVA_HOME\jre\lib\security\cacerts
キーストアパスワードを入力するよう求められます。デフォルトのキーストアパスワードは changeit です。
以下のパラメータを使用します。
<ALIAS-OF-YOUR-CLIENT-SSL-CERT> - 自己署名証明書を作成するときに使用する証明書のエイリアス。
<PATH-TO-KEYSTORE> - サーバー証明書のインポート先となるキーストアの場所。
6. server_wallet ディレクトリからインポート可能なファイルにクライアント証明書をエクスポートします。
keytool -export -alias <ALIAS-OF-YOUR-CLIENT-SSL-CERT>
-keystore <PATH-TO-KEYSTORE> -rfc -file <PATH-TO-OUTPUT-FILE>
例:
keytool -export -alias CLientCerts
-keystore JAVA_HOME\jre\lib\security\cacerts
-rfc -file JAVA_HOME\bin\ClientCertificate.txt
Oracle データベースサーバーに ClientCertificate.txt ファイルをコピーします。
以下のパラメータを使用します。
<ALIAS-OF-YOUR-CLIENT-SSL-CERT> - クライアントのアイデンティティを認証するために、ファイルにエクスポートして、サーバーウォレットからインポートする際に使用可能な証明書のエイリアス。
<PATH-TO-KEYSTORE> - サーバー証明書のインポート先となるキーストアの場所。
<PATH-TO-OUTPUT-FILE> - クライアントキーのエクスポート先となるファイルの場所。
7. クライアント証明書をサーバーウォレットにインポートします。
> orapki wallet add –wallet ./server_wallet -trusted_cert
-cert ./client_wallet/cert.txt -pwd server01
例:
orapki wallet add -wallet Oracle_Home\wallets\server_wallet
-trusted_cert -cert Oracle_Home\wallets\client_wallet\ClientCertificate.txt
-pwd server01
コマンド client_wallet/cert.txt は、エクスポートされたクライアント証明書を参照します。
* 
クライアントの認証が必要な場合、クライアント証明書をサーバーウォレットにインポートする必要があります。暗号化とサーバー認証のみを必要とする場合、このステップはスキップできます。
8. サーバーウォレットとクライアントキーストアの結果を表示します。サーバーウォレットにクライアントキーのエントリがあり、クライアントキーストアにサーバーキーのエントリがあることを確認します。
User Certificates の下:
Subject: CN=server
Trusted Certificates の下:
Subject: CN=sam,OU=ptc,O=isg,L=pune,ST=mh,C=in
Client Keystore Output の下:
Owner: CN=server
Issuer: CN=server
Certificate[1] の下:
Owner: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Issuer: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Server Wallet Output -
> orapki wallet display -wallet .
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=server
Trusted Certificates:
Subject: CN=client
Subject: CN=VAGRANT
Subject: CN=VAGRANT_CLIENT
Subject: CN=server
Subject: CN=sam,OU=ptc,O=isg,L=pune,ST=mh,C=in
Client Keystore Output –
> keytool -list -v -keystore selfsigned3.jks
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 3 entries
.
.
.
*******************************************
*******************************************
Alias name: stepde-cert
Creation date: 24 Aug, 2017
Entry type: trustedCertEntry
Owner: CN=server
Issuer: CN=server
Serial number: 0
Valid from: Wed Jun 28 15:17:33 IST 2017 until: Thu Jun 28 15:17:33 IST 2018
Certificate fingerprints:
MD5: F3:46:9C:70:74:93:75:EA:08:F6:35:D9:EC:A5:20:F0
SHA1: 5D:43:23:4F:FA:C8:5B:48:C5:61:A5:CB:02:66:E7:CD:F4:47:4E:95
SHA256: BE:26:3F:88:E8:DD:F2:57:F3:D4:5F:4C:70:4A:0F:D2:99:10:D5:
27:18:BA:29:E5:00:AD:00:41:78:1E:CE:92
Signature algorithm name: MD5withRSA
Version: 1

*******************************************
*******************************************

Alias name: smandaokar2l_selfsigned3
Creation date: 24 Aug, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Issuer: CN=sam, OU=ptc, O=isg, L=pune, ST=mh, C=in
Serial number: dccd23b
Valid from: Thu Aug 24 18:49:15 IST 2017 until: Fri Aug 24 18:49:15 IST 2018
Certificate fingerprints:
MD5: 5A:39:55:EA:29:0C:46:C7:86:92:DF:98:4B:C9:E5:93
SHA1: 9D:75:AE:C8:F0:EE:B9:E1:9B:E5:98:10:47:7F:3D:CE:C9:D9:47:18
SHA256: F0:78:81:AA:C4:AC:17:1C:3B:10:87:9B:A7:DF:CE:0F:BE:A0:B6:42:08:90:D9:
BC:59:23:91:BA:03:02:44:1D
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D3 CF 0B 8B 41 B6 63 13 B8 D3 59 57 DB E2 75 7F ....A.c...YW..u.
0010: C5 50 DE 88 .P..
]
]
*******************************************
*******************************************
サーバーキーを使用した TCPS を使用するためのデータベースの設定
SSL をアクティブ化するようネットワークを設定するため、Oracle Network Manager を使用して Oracle データベースサーバーで以下のステップを実行します。
listener.ora ファイルを設定します。
1. Net Manager ツールを起動します。ORACLE_HOME が環境変数として設定されている場合、netmgr コマンドを使用できます。コマンドプロンプトまたはターミナルで、以下のコマンドを入力して Network Manager を開きます。
> netmgr
2. 「Local」 > 「Listeners」 > 「Listener」に移動します。
3. 「Add Address」をクリックして「TCP/IP with SSL」を選択し、プロトコル、ホスト名、ポートの値を以下のように入力します。
Protocol: TCP/IP with SSL
Host Name: vv-stepde-vm
Port: 2484
* 
Windchill リリース 11.1 F000 では、Oracle データベースサーバーに設定されている専用の TCPS ポート 2484 での JDBCs 通信がサポートされています。Cognos と Solr では JDBCs はサポートされません。すべての JDBC 通信が、デフォルトの Windchill インストールとして設定される既存のデフォルト TCP ポート 1521 で管理されます。listener.ora コンフィギュレーションに関する次のステップで、Oracle が 2 つの異なるポートで JDBC と JDBCs の両方の機能をどのように提供するかがわかります。
4. 「File」 > 「Save Network Configuration」の順にクリックします。
作成した listener.ora ファイルの例を以下に示します。
...
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC2)))
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vv-stepde-vm
)(PORT = 1521)))
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = vv-stepde-vm)(PORT = 2484)))
)
...
クライアント認証が必要な場合、listener.ora ファイルでプロパティ SSL_CLIENT_AUTHENTICATIONTRUE に設定します。
SSL_CLIENT_AUTHENTICATION = TRUE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = C:\wallets\server_wallet)))
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = PROTOCOL = IPC) (KEY = EXTPROC1)))
(DESCRIPTION =
(ADDRESS = PROTOCOL = TCP) (HOST = vv-stepde-vm)(PORT = 1521)))
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCPS)(HOST = vv-stepde-vm)(PORT = 2484))))
5. sqlnet.ora ファイルを設定します。「Profile」をクリックし、ドロップダウンリストから「Oracle Advanced Security」を選択し、SSL フォームがない場合には「SSL」タブで「Server」をクリックします。SSL フォームがある場合、SSL フォームのウォレットディレクトリが server_wallet ディレクトリを指していることを確認します。
完全な SSL フォームの例を以下に示します。
Configure Method: File System
Wallet Directory: C:\wallets\server_wallet
Configure SSL for: Server
Revocation Check: None
Require SSL Version: Any
Require Client Authentication: <Leave unchecked>
クライアント認証が必要な場合、SSL フォームで「Require Client Authentication」チェックボックスをオンにします。このネットワーク設定を保存した後、sqlnet.ora ファイルで認証パラメータが TRUE に設定されていることを確認します。
SSL_VERSION = 0
SSL_CLIENT_AUTHENTICATION = TRUE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = C:\wallets\server_wallet)
)
)
* 
暗号化とサーバー認証のみを必要とする場合、このステップはスキップできます。
6. 「File」 > 「Save Network Configuration」の順にクリックします。
7. Net Manager ツールを終了します。ただし、新しい変更を反映するために、変更内容を保存してリスナーを再起動していることを確認します。
> lsnrctl stop
> lsnrctl start
8. Net Manager ツールを起動します。
クライアント認証なしで作成した sqlnet.ora ファイルと listener.ora ファイルの例を以下に示します。クライアント認証が必要な場合、listener.ora ファイルでプロパティ SSL_CLIENT_AUTHENTICATIONTRUE に設定します。
sqlnet.ora
...
SQLNET.AUTHENTICATION_SERVICES=(TCPS,NTS)
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA = (DIRECTORY = C:\wallets\server_wallet))
)
SSL_CIPHER_SUITES= (SSL_RSA_WITH_AES_128_CBC_SHA,
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA)
...
listener.ora
...
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA = (DIRECTORY = C:\wallets\server_wallet))
)
...
9. tnsnames.ora ファイルを設定します。Net Manager ツールで、「Service Naming」をクリックします。
10. 新規サービスを作成するため、「Edit」をクリックしてから、「Create」をクリックします。「Net Service Name Wizard」で以下の情報を入力します。
Net Service Name: vv-stepde-vm_tcps
Select: TCP/IP with SSL (Secure Internet Protocal)
Host Name: vv-stepde-vm
Port Number: 2484
(Oracle8i or later) Service Name: orcl
Connection Type: Default database
Test the connection on page 5 of the wizard
作成した tnsnames.ora ファイルの例を以下に示します。
...
vv-stepde-vm_tcps =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCPS)(HOST = vv-stepde-vm)(PORT = 2484)))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)
...
11. 「File」 > 「Save Network Configuration」の順にクリックします。
12. 「File」 > 「Exit」の順にクリックします。以上で設定が完了しました。
JDBC over SSL の設定
JDBC over SSL を設定するため、以下のステップを実行します。
1. Windchill サーバーの db.properties ファイルで以下のプロパティを定義します。
wt.pom.dbConnectionPropertiesNameList=javax.net.ssl.trustStore,
javax.net.ssl.trustStoreType,javax.net.ssl.trustStorePassword,
oracle.net.ssl_cipher_suites
wt.pom.dbConnectionPropertiesValueList=C:\\jks\\selfsigned3.jks,
JKS,client01,(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,
SSL_DH_anon_WITH_RC4_128_MD5,SSL_DH_anon_WITH_DES_CBC_SHA)
* 
SSL 暗号化スイートがインストールされている場合、プロパティ 'oracle.net.ssl_cipher_suites' とその値を指定する必要があります。SSL 暗号化スイートがインストールされていない場合、このプロパティとその値は必要ありません。
クライアント認証が必要な場合、トラストストアのプロパティの代わりにキーストアのプロパティを設定します。
wt.pom.dbConnectionPropertiesNameList=javax.net.ssl.keyStore,
javax.net.ssl.keyStoreType,javax.net.ssl.keyStorePassword,
oracle.net.ssl_cipher_suites
wt.pom.dbConnectionPropertiesValueList= C:\\jks\\selfsigned3.jks,
JKS,client01,(SSL_DH_anon_WITH_3DES_EDE_CBC_SHA,
SSL_DH_anon_WITH_RC4_128_MD5,SSL_DH_anon_WITH_DES_CBC_SHA)
2. JDBC で SSL をアクティブ化するかどうかを指定する、以下に示す新しいプロパティを Windchill サーバーの db.properties ファイルに追加します。
wt.pom.jdbc.protocol=TCPS
* 
このプロパティが指定されていない場合、Windchill は標準の JDBC 接続を提供します。ただし、このプロパティで値 TCPS が指定されている場合、プロパティ wt.pom.jdbc.port でそれに対応するポート番号が指定されていなければなりません。
設定ステップを完了した後、Windchill を再起動します。この新しいセットアップによって、JDBC over SSL を使用した Windchill と Oracle データベースサーバー間の通信が可能になります。
データベースクライアント接続の設定の詳細については、Oracle から提供されている以下のドキュメントを参照してください。
https://docs.oracle.com/cd/E12517_01/back_office/pdf/141/html/pos_sg/appendix_jdbc_oracle.htm
http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin-ssl-130128.pdf