【问题标题】:Send hashed or encrypted password to AS400 jdbc connection将散列或加密密码发送到 AS400 jdbc 连接
【发布时间】:2013-06-11 13:21:56
【问题描述】:

创建数据库连接时需要发送一个散列或加密的密码,详见下文:

我们有一个连接到 DB2 AS400 数据库的 Spring 应用程序。我们目前正在使用配置文件(.properties)来存储连接详细信息,Spring 在上下文创建阶段读取这些文件并相应地创建数据源。

...
database.driverClassName=com.ibm.as400.access.AS400JDBCDriver
database.url=jdbc:as400:<host>:naming=sql;libraries=*LIBL,...;transaction isolation=none

database.username=<user>
database.password=<password>

database.initialPoolSize=2
database.maxPoolSize=5
...

此 .properties 文件位于应用程序/Web 服务器的文件系统中。

我需要存储散列密码而不是直接存储密码,这样如果有人查看文件内容就无法知道真正的密码是什么。

像这样使用 SHA:

...
database.password=5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
...

必须有办法告诉 AS400 发送的密码是经过哈希处理的。

在我的研究中,我发现 AS400 使用 QSYS 库中的索引 QSYUPTBL 存储密码,该库能够使用 DES 或 SHA 哈希算法。因此它将加密接收到的密码,并将生成的哈希值与存储在索引中的哈希值进行比较。但是是否可以告诉数据库的身份验证过程期望密码被散列并直接比较它?

新发现:

IBM 的文档提到了一个关键字:RMTAUTMTH 用于设置远程身份验证方法,使用该参数中的 *ENCRYPTED 值将激活用户 ID 和密码中的加密:

...用户 ID 和相关的加密密码在 DDM 连接请求中发送。必须在两个系统上都提供加密支持才能使用此身份验证方法...摘自http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/cl/chgrdbdire.htm

所以貌似可以在AS400端配置,但是没有提及使用的加密算法以及jdbc驱动是否支持。

【问题讨论】:

    标签: java spring jdbc ibm-midrange


    【解决方案1】:

    IBM Toolbox for Java JDBC properties 中没有提到接受特殊散列/加密密码的属性。

    您将必须在应用程序中管理密码的散列/加密,并将其以明文形式提供给 JDBC 连接。

    JDBC 连接的secure 属性可用于强制与 AS/400 建立 SSL 连接(假设启用了 SSL),以确保应用程序和数据库之间的所有数据都被加密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-18
      • 2010-11-08
      • 2011-06-23
      • 2018-01-20
      • 2013-04-06
      • 1970-01-01
      • 2017-05-15
      相关资源
      最近更新 更多