微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 bcrypt 配置 DataSourceRealm

如何解决如何使用 bcrypt 配置 DataSourceRealm

我正在寻找一些技巧,如何使用包含 bcrypt 哈希密码的 MysqL 数据库配置 DataSourceRealm。不幸的是,我已经在努力让 DataSource 运行了 - 即使使用明文密码也是如此。

我已经编辑了 conf/context.xml 并添加了 DataSource,如下所示:

<Context>
[...]
<Resource name="jdbc/MYRESOURCE" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="USER" password="PASSWORD" driverClassName="com.MysqL.jdbc.Driver"
url="jdbc:MysqL://my.database.com:3306/DATABASE?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;verifyServerCertificate=false&amp;useSSL=true&amp;requireSSL=true&amp;autoReconnect=true" />
</Context>

server.xml 包含如下 Realm:

<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/MYRESOURCE"
userTable="myuser" userNameCol="username" userCredCol="password"
userRoleTable="myuser_roles" roleNameCol="role"/>

当我启动 Tomcat 时,它说找不到我的上下文“jdbc/MYRESOURCE”。

我还尝试在 conf/context.xml 中添加一个,这导致 Tomcat 根本无法启动。同样,如果我将其添加到 conf/server.xml

这里有什么问题?有人可以帮忙吗?

解决方法

关于纯文本部分,您在 webapp 上下文中声明您的 JDBC <Resource>,因此:

  • 在相同的上下文中使用 <Realm> 声明 localDataSource="true"
  • 或在 <GlobalNamingResources> 中全局声明 JDBC Resource

关于 bcrypt:Tomcat 中的两个凭证处理程序(MessageDigestCredentialHandlerSecretKeyCredentialHandler)都不支持 bcrypt 使用的格式或密码散列。如果您想重复使用来自其他来源的散列密码,则必须编写自己的 CredentialHandler

唯一支持的存储格式是:

  • plainText - 如果未指定算法,则为纯文本凭据
  • encodedCredential - 使用配置的摘要摘要的密码的十六进制编码摘要
  • {MD5}encodedCredential - Base64 编码的密码 MD5 摘要
  • {SHA}encodedCredential - 密码的 Base64 编码的 SHA1 摘要
  • {SSHA}encodedCredential - 20 个字符的盐,后跟 Base64 编码的盐化 SHA1 摘要
  • salt$iterationCount$encodedCredential - 一个十六进制编码的盐、迭代代码和一个十六进制编码的凭证,每个都用 $
  • 分隔

(来源 Tomcat documentation

但是支持的散列函数类似于bcrypt,所以你可以使用,例如:

<Realm className="org.apache.catalina.realm.DataSourceRealm"
       dataSourceName="jdbc/MYRESOURCE"
       userTable="myuser"
       userNameCol="username"
       userCredCol="password"
       userRoleTable="myuser_roles"
       roleNameCol="role">
    <CredentialHandler class="org.apache.catalina.realm.SecretKeyCredentialHandler" />
</Realm>

并拥有与 bcrypt 一样安全的格式。

您可以使用以下方法对密码进行哈希处理:

$CATALINA_HOME/bin/digest.sh -h org.apache.catalina.realm.SecretKeyCredentialHandler <your_password>

来自命令行,其中 $CATALINA_HOME 是 Tomcat 的目录。

,

经过一番研究,我在 GitHub 上发现了一个自定义集成,它支持 bcrypt 密码。

我只是将 JAR 放入“lib”目录中,并将标准的“MessageDigestCredentialHandler”切换到新的“BCryptoCredentialHandler”,如 GitHub 上所述。

https://github.com/andreacomo/tomcat-bcrypt/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。