将散列或加密密码发送到AS400 jdbc连接

时间:2013-06-14 19:46:30

标签: java spring jdbc ibm-midrange

创建数据库连接时需要发送散列或加密密码,请参阅以下详细信息:

我们有一个连接到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哈希算法。因此,它将加密收到的密码,并将生成的哈希值与索引中存储的哈希值进行比较。但是有可能告诉DB的身份验证过程期望密码被哈希并直接比较吗?

新发现:

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

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

中提取

所以它似乎可以在AS400端进行配置,但是没有提及正在使用的加密算法以及jdbc驱动程序是否支持它。

1 个答案:

答案 0 :(得分:1)

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

您将不得不在应用程序中管理密码的哈希/加密,并以明文形式将其提供给JDBC连接。

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