高度なカスタマイズ > ビジネスロジックのカスタマイズ > 暗号化されたパスワード > 手順 – .xconf が管理する単一値の静的プロパティの暗号化
  
手順 – .xconf が管理する単一値の静的プロパティの暗号化
xconf が管理し、静的な (変更されない) プロパティ名を持ち、単一値を含んでいる新しいプロパティは、Windchill がこれらのプロパティの定義済みの暗号化を行うために依存するのと同じ方法で暗号化できます。
プロパティ値の暗号化 (.xconf が管理する新しいプロパティをすでに作成していることを前提としています)
1. <Windchill>/bin/adminTools/sip/validProperties.list ファイルを編集し、最後のファイルエントリの下の新しい行にプロパティ名を追加します。これにより、暗号化メカニズムはこのプロパティを暗号化する必要があることを認識します。
2. windchill シェルから xconfmanager を実行して、このプロパティの値を設定します。以下に例を示します。<Windchill>/bin/xconfmanager -s <name>=<value> - pこれにより properyValue が暗号化されます。値が格納されている site.xconf とコンパニオン .properties ファイルで、コマンドラインに入力した値ではなく、暗号化された値を確認できます。実際の値は、Windchill の暗号化メカニズムによって保存されています。
Windchill に付属する定義済みの .xconf プロパティも、そのプロパティの値が機密情報である場合には暗号化できます。これを行うには、上記の手順に従います。唯一異なる点は、プロパティが Windchill に付属するものであり、カスタマイズの一部として作成されたものではないことです。
さらに、EncryptPasswords.xml ファイルを使用してパスワードを暗号化する第 2 の手段があります。
1. <Windchill>/bin/adminTools/sip/validProperties.list ファイルを編集し、最後のファイルエントリの下の新しい行にプロパティ名を追加します。これにより、暗号化メカニズムはこのプロパティを暗号化する必要があることを認識します。
2. Windchill シェルから <Windchill>/bin/adminTools/sip/EncryptPasswords.xml encryptPw -DpropertyName=<property> -Dpassword=<password_value> を実行します。
3. 詳細については、システムパスワード暗号化のオプションを参照してください。
これにより、プロパティ値が暗号化されます。しかし、値に依存するコードで値を適切に使用されるようにするには、使用前にコードを更新して値を解読しておく必要があります。定義済みのプロパティでは、Windchill によって適切なインタフェース場所でプロパティが解読されます。
この値に依存するコードは、適切に値を解読するように更新する必要があります。
手順 - プロパティ値の解読
1. プロパティ値を返すメソッドが上書きされる場合、プロパティ値を読み込む Windchill の基本クラスを拡張するすべてのコードを更新する必要があります。プロパティ値を取得して使用するカスタムコードでは、以下を使用して暗号化された値を解読できます。
a. プロパティ値が暗号化されている場合、com.ptc.windchill.keystore.WTKeyStoreUtil はプロパティ値の解読された値を取得するために API を提供します。API は、次のとおりです。
public static String decryptProperty(String property_name,
String property_value, String product_root)
property_name は値の解読対象のプロパティ名、property_value は現在暗号化されている値、product_root<Windchill> (または、アダプタインストールの <adapater_home>) の完全修飾パスです。
この API を使用するためのコード例は次のとおりです。
final String encrypted_value = “encrypted.wt.pom.dbPassword”;
final String property = “wt.pom.dbPassword”;
final String PATH = “D:\ptc\Windchill\”;
String decrypted = com.ptc.windchill.keystore.WTKeyStoreUtil. decryptProperty(property,encrypted_value, PATH);
解読された文字列は解読された値を含み、文字列に依存するコード内のどこかで適切に使用されます。
手順 – .xconf が管理する単一値の動的プロパティの暗号化
xconf が管理し、動的な (変更される) プロパティ名を持ち、単一値を含んでいる新しいプロパティは、Windchill がこれらのプロパティの定義済みの暗号化を行うために依存するのと同じ方法で暗号化できます。
動的プロパティ名とは、コードでオンザフライで構築され、所定の派生情報 (ホスト名など) に依存するプロパティ名のことです。
動的プロパティを暗号化するときには、注意が必要です。動的プロパティの暗号化は、プロパティが動的であるため、正規表現を使用して行います。したがって、プロパティを暗号化するために使用する正規表現は、暗号化の対象であるプロパティのみを暗号化するように、可能なかぎり狭義である必要があります。使用する正規表現が広義であると、必要な解読コードがまだないほかのプロパティも暗号化されるおそれがあります。
プロパティ値の暗号化
(.xconf が管理する新しいプロパティをすでに作成していることを前提としています)
1. <Windchill>/bin/adminTools/sip/validProperties.list ファイルを編集し、最後のファイルエントリの下の新しい行にプロパティ名を追加します。これにより、このトークンを使用して正規表現と一致するプロパティが暗号化されることが暗号化メカニズムに通知されます。一貫性を保つため、このトークンはプロパティを検索するために使用する正規表現と似ている必要があります。
2. 次に、private Static List<String> getEncryptionPropertiesRegExList(final String productRoot) メソッドを拡張することによって WTKeyStore.java の実装を追加する必要があります。このメソッドの実装により、プロパティ名を検索するために使用する正規表現の集合が生成されます。正規表現と一致するプロパティ名が検索されると、そのプロパティ値が暗号化されます。
このメソッドの実装をオーバーライドするには、カスタム実装を使用します。
3. <Windchill>/bin/adminTools/sip/EncryptPasswords.xml ファイルを変更するには、さらに作業を行う必要があります。このファイル内の特定の Ant ターゲットがプロパティ名の入力を検証します。前のステップで追加した正規表現を検証するためには、-validInput プライベートターゲットを更新する必要もあります。このファイルの現在の実装は、これを行う方法のガイダンスとして参照できます。
* 
この値に依存するコードは、適切に値を解読するように更新する必要があります。
プロパティ値の解読
1. プロパティ値を返すメソッドが上書きされる場合、プロパティ値を読み込む Windchill の基本クラスを拡張するすべてのコードを更新する必要があります。プロパティ値を取得して使用するカスタムコードでは、以下を使用して暗号化された値を解読できます。
プロパティ値が暗号化されている場合、com.ptc.windchill.keystore.WTKeyStoreUtil はプロパティ値の解読された値を取得するために API を提供します。API は、public static String decryptProperty(String property_name, String property_value, String product_root) です。
この API を使用するためのコード例は次のとおりです。
final String encrypted_value = “encrypted.wt.federation.defaultAuthorization.machine123.subnet.net”;
inal String property = “wt.federation.defaultAuthorization.machine123.subnet.net”;
inal String PATH = “D:\ptc\Windchill\”;
String decrypted = com.ptc.windchill.keystore.WTKeyStoreUtil.decryptProperty(property,encrypted_value, PATH);
解読された文字列は解読された値を含み、文字列に依存するコード内のどこかで適切に使用されます。
property_name は値の解読対象のプロパティ名、property_value は現在暗号化されている値、product_root は <Windchill> (または、アダプタインストールの <アダプタホーム>) の完全修飾パスです。
手順 - .xconf が管理しないプロパティの暗号化
.xconf が管理しない新しいプロパティは、Windchill の暗号化メカニズムを使用して暗号化できます。ただし、パスワードを暗号化および解読する手段を作成する必要があります。
プロパティ値の暗号化
1. プロパティ値を暗号化する手段を作成する必要があります。これは、main() メソッドで呼び出すことができる Java クラスを介して、および <Windchill>/bin/adminTools/sip/EncryptPasswords.xml を修正することによって行うことができます。
a. <Windchill>/bin/adminTools/sip/EncryptPasswords.xml には、xconf が管理しないプロパティ値を暗号化する encryptWVSWorkerAgent および encryptWVSCADAgent の 2 つの ANT ターゲットが含まれています。これらのターゲットは、これを行う方法の例として参照できます。暗号化を行うための Java クラスを呼び出す、パラメータを受け入れる新しいターゲットを作成する必要があります。
b. この呼び出される Java クラスは、プロパティと値のパラメータを使用し、Windchill の暗号化メカニズムを使用してこれらを暗号化します。この Java クラスには、このプロパティが保存されているファイルを適切に暗号化し、Java キーストアに正しい値を配置するためのロジックも含まれている必要があります。WTKeyStoreUtilWVS.java クラスには、encryptWCSWorkerAgent ターゲットと encryptWCSCADAgent ターゲットによって呼び出されるコードが含まれています。これは、プロパティ値が保存されているファイルを暗号化するために使用されるロジックの例として参照できます。
これにより、プロパティ値が暗号化されます。しかし、値に依存するコードで値を適切に使用されるようにするには、使用前にコードを更新して値を解読しておく必要があります。定義済みのプロパティでは、Windchill によって適切なインタフェース場所でプロパティが解読されます。
* 
この値に依存するコードは、適切に値を解読するように更新する必要があります。
プロパティ値の解読
プロパティ値を返すメソッドが上書きされる場合、プロパティ値を読み込む Windchill の基本クラスを拡張するすべてのコードを更新する必要があります。プロパティ値を取得して使用するカスタムコードでは、以下を使用して暗号化された値を解読できます。
プロパティ値が暗号化されている場合、com.ptc.windchill.keystore.WTKeyStoreUtil はプロパティ値の解読された値を取得するために API を提供します。API は、public static String decryptProperty(String property_name, String property_value, String product_root) です。
値を解読しようとするプロパティ名が property_name ならば、property_value が現在暗号化されている値で、product_root<Windchill> (または、アダプタインストールの <adapater_home>) の完全修飾パスです。
この API を使用するためのコード例は次のとおりです。
final String encrypted_value = “encrypted.wt.pom.dbPassword”;
final String property = “wt.pom.dbPassword”;
final String PATH = “D:\ptc\Windchill\”;
String decrypted = com.ptc.windchill.keystore.WTKeyStoreUtil.decryptProperty(property,encrypted_value, PATH);
解読された文字列は解読された値を含み、文字列に依存するコード内のどこかで適切に使用されます。