如何在Liberty上使用TLS_CLIENT_CERTIFICATE_SECURITY选项设置JDBC驱动程序的securityMechanism属性?

时间:2015-06-29 00:17:49

标签: ssl jdbc db2 websphere-liberty custom-properties

我尝试在JDBC driver上使用securityMechanism选项设置Websphere Liberty®TLS_CLIENT_CERTIFICATE_SECURITY属性,引用以下IBM®知识中心,但获得{{3}我启动Websphere Liberty时的警告消息(2015年7月测试版)。

您能告诉我如何在Websphere Liberty上使用securityMechanism选项设置JDBC驱动程序的TLS_CLIENT_CERTIFICATE_SECURITY属性吗?

CWWKG0032W

  

用于JDBC和SQLJ的IBM®数据服务器驱动程序提供支持   客户端支持与DB2®连接的证书身份验证   适用于z /OS®版本10或更高版本的数据服务器。

Websphere Liberty Server启动时

console.log

CWWKG0032W: Unexpected value specified for property
            [securityMechanism], value = [18]. >Expected value(s) are:
            [3][4][7][9][11][12][13][15][16].

securityMechanism="18"TLS_CLIENT_CERTIFICATE_SECURITY,我通过以下方式确认了该值:

\>javac -classpath .;db2jcc4.jar; JDBCCheck
\>java -classpath .;db2jcc4.jar; JDBCCheck
  TLS_CLIENT_CERTIFICATE_SECURITY: 18

JDBCCheck 类:

class JDBCCheck{
  public static void main(String args[]){
    com.ibm.db2.jcc.DB2SimpleDataSource dataSource =
                                   new com.ibm.db2.jcc.DB2SimpleDataSource();
    System.out.println( "TLS_CLIENT_CERTIFICATE_SECURITY: "
                        + dataSource.TLS_CLIENT_CERTIFICATE_SECURITY);
  }
}

server.xml中

<library id="db2-library">
  <fileset dir="lib" id="db2-fileset" includes="db2jcc4.jar db2jcc_license_cu.jar"/>
</library>

<dataSource id="db2" jndiName="jdbc/sampledb">
  <jdbcDriver libraryRef="db2-library"/>
  <properties.db2.jcc databaseName="SAMPLEDB" password="password" portNumber="10443"
              serverName="XX.XX.XX.XX" user="db2inst1" sslConnection="true"
              sslTrustStoreLocation="ssld/defaultTrustStore"
              sslTrustStorePassword="trustpassword" securityMechanism="18"/>
</dataSource>

更新01:

3 个答案:

答案 0 :(得分:2)

基于IBM®KnowledgeCenter中的此主题: Java EE Full Platform 7.0部分:交易&gt; dataSource&gt; properties.db2.jcc

目前,WebSphere Liberty仅支持securityMechanism的以下值:

  • value =“3”name =“CLEAR_TEXT_PASSWORD_SECURITY”
  • value =“4”name =“USER_ONLY_SECURITY”
  • value =“7”name =“ENCRYPTED_PASSWORD_SECURITY”
  • value =“9”name =“ENCRYPTED_USER_AND_PASSWORD_SECURITY”
  • value =“11”name =“KERBEROS_SECURITY”
  • value =“12”name =“ENCRYPTED_USER_AND_DATA_SECURITY”
  • value =“13”name =“ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY”
  • value =“15”name =“PLUGIN_SECURITY”
  • value =“16”name =“ENCRYPTED_USER_ONLY_SECURITY”

如果您希望在Liberty中添加TLS_CLIENT_CERTIFICATE_SECURITY作为securityMechanism,我建议opening an RFE以便Liberty开发人员了解支持此功能的需求。

<强>更新
要解决此问题,您仍然可以指定securityMechanism =“18”,但只能在泛型&lt; properties&gt;中执行此操作。元素而不是db2 specific&lt; properties.db2.jcc&gt;元素(看起来你已经想到了)。

答案 1 :(得分:1)

设置TLS_CLIENT_CERTIFICATE_SECURITY的另一种方法是:

com.ibm.db2.jcc.DB2SimpleDataSource dataSource = new 
                                    com.ibm.db2.jcc.DB2SimpleDataSource();
dataSource.setSecurityMechanism 
           (com.ibm.db2.jcc.DB2BaseDataSource.TLS_CLIENT_CERTIFICATE_SECURITY);

查看此IBM®知识中心以获取更多信息:

IBM Data Server Driver for JDBC and SQLJ support for certificate authentication

这应该适用于Websphere Full Profile和Websphere Liberty Profile。

答案 2 :(得分:1)

这里是用用户ID和加密的密码设置安全性机制以建立DB2连接的代码。传递用户名,密码和网址字符串。

Properties properties = new Properties(); // Create a Properties object
    properties.put("user", user);          // Set user ID for the connection
    properties.put("password", password);      // Set password for the connection
    properties.put("securityMechanism", 
      new String("" + 
      DB2BaseDataSource.ENCRYPTED_USER_AND_PASSWORD_SECURITY +
      ""));
                                              // Set security mechanism to 
                                              // user ID and encrypted password
    properties.put("encryptionAlgorithm", "2");

    Connection connection = DriverManager.getConnection("jdbc:db2://" + url, properties);