过程 - 加密静态 .xconf 托管的单值特性
对于 xconf 托管的、具有静态特性名称 (即特性名称永不改变) 并且包含单值的新特性,可使用 Windchill 依赖的这些特性的预设加密方法对其进行加密。
加密特性值。(这假定您已创建新的 .xconf 托管特性):
1. 编辑 <Windchill>\bin\adminTools\sip\validProperties.list 文件,然后将特性名称添加至最后一个文件条目下方的新行。这将告知加密机制应加密此特性。
2. 从 Windchill shell,运行 xconfmanager 设置此特性的值。例如,<Windchill>/bin/xconfmanager -s <name>=<value> - p。这将加密 "properyValue"。在值所在的 site.xconf 和辅助 .properties 文件中,您将看到已加密的值,而不是在命令行中输入的值。实际值通过 Windchill 的加密机制进行存储。
如果特性的值是敏感信息,则还可以加密 Windchill 预设的其他 .xconf 特性。要执行此操作,请遵循上述过程,唯一的区别是特性是由 Windchill 提供的,而不是在自定义期间创建的。
此外,还有一个次要方法,使用 EncryptPasswords.xml 文件对密码进行加密。
1. 编辑 <Windchill>\bin\adminTools\sip\validProperties.list 文件,然后将特性名称添加至最后一个文件条目下方的新行。这将告知加密机制应加密此特性。
2. 从 Windchill shell,运行 <Windchill>/bin/adminTools/sip/EncryptPasswords.xml encryptPw -DpropertyName=<property> -Dpassword=<password_value>。
这将加密特性值。但是,要使值正确用于依赖于该值的代码,必须更新代码以在使用之前解密该值。对于预设特性,Windchill 将在相应的接口位置解密特性。
必须更新依赖该值的所有代码,才能正确解密该值。
过程 - 解密特性值
1. 如果用于扩展检索特性值的 Windchill 基本类的代码会覆盖返回特性值的方法,则所有此类代码都必须进行更新。对于获取并使用特性值的自定义代码,可以使用以下方法解密已加密值:
a. com.ptc.windchill.keystore.WTKeyStoreUtil 提供一个 API,用于获取已加密特性值的解密值 (有关完整的详细信息,请参阅 Javadoc)。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 目标用于验证特性名称输入。要验证在第 2 步中添加的正则表达式,还需要更新 -validInput 专用目标。有关如何完成此操作的指导,可查看文件当前实现。
解密特性值:
1. 如果用于扩展检索特性值的 Windchill 基本类的代码会覆盖返回特性值的方法,则所有此类代码都必须进行更新。对于获取并使用特性值的自定义代码,可以使用以下方法解密已加密值:
com.ptc.windchill.keystore.WTKeyStoreUtil 提供一个 API,用于获取已加密特性值的解密值 (有关完整的详细信息,请参阅 Javadoc)。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> (或 <adapater_home>,针对适配器安装) 的完全限定路径。
过程 - 加密非 .xconf 托管特性
非 .xconf 托管且包含的新特性可使用 Windchill 加密机制进行加密。但是,您必须创建用于加密和解密密码的方法。
加密特性值
1. 必须创建用于加密特性值的方法。这可通过借助 main() 方法调用的 Java 类和通过修改 <Windchill>\bin\adminTools\sip\EncryptPasswords.xml 来完成。
a. <Windchill>/bin/adminTools/sip/EncryptPasswords.xml 包含 ANT 目标 encryptWVSWorkerAgent 和 encryptWVSCADAgent,用于加密非 xconf 托管的特性值。有关如何执行此操作的示例,可查看这些目标。必须创建一个接受参数的新目标,用于调用 Java 类来进行加密。
b. 调用的 Java 类使用参数、特性和值,并使用 Windchill 加密机制对它们进行加密。此 Java 类还必须包含特性逻辑,用于对存储此特性的文件进行加密,并将正确的值放入 Java 密钥库中。WTKeyStoreUtilWVS.java 类包含通过 encryptWCSWorkerAgent 和 encryptWCSCADAgent 目标调用的代码,如需用于加密特性值的文件的逻辑,请查看有关这两个目标的示例。
这将加密特性值。但是,要使值正确用于依赖于该值的代码,必须更新代码以在使用之前解密该值。对于预设特性,Windchill 将在相应的接口位置解密特性。
解密特性值
如果用于扩展检索特性值的 Windchill 基本类的代码会覆盖返回特性值的方法,则所有此类代码都必须进行更新。对于获取并使用特性值的自定义代码,可以使用以下方法解密已加密值:
com.ptc.windchill.keystore.WTKeyStoreUtil 提供一个 API,用于获取已加密特性值的解密值 (有关完整的详细信息,请参阅 Javadoc)。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);
解密的字符串现在包含已解密值,并且可在其依赖的代码的其他位置中正确使用。