如何使用 bcrypt 配置 DataSourceRealm
How to configure DataSourceRealm with bcrypt
我正在寻找一些技巧,了解如何使用 MySQL 数据库配置 DataSourceRealm,包括 bcrypt-hashed 密码。不幸的是,我已经在努力获取 DataSource 运行 - 即使使用明文密码也是如此。
我编辑了 conf/context.xml 并按如下方式添加了数据源:
<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&characterEncoding=UTF-8&serverTimezone=UTC&verifyServerCertificate=false&useSSL=true&requireSSL=true&autoReconnect=true" />
</Context>
server.xml 包含如下领域:
<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>
,因此:
- 在与
localDataSource="true"
、 相同的上下文中声明 <Realm>
- 或在
<GlobalNamingResources>
. 中全局声明 JDBC Resource
关于 bcrypt:Tomcat(MessageDigestCredentialHandler
和 SecretKeyCredentialHandler
)中的两个凭证处理程序中的 none 支持 bcrypt 使用的格式或密码散列。如果你想重用来自其他来源的散列密码,如果不编写你自己的 CredentialHandler
.
是不可能的
唯一支持的存储格式是:
plainText
- the plain text credentials if no algorithm is specified
encodedCredential
- a hex encoded digest of the password digested using the configured digest
{MD5}encodedCredential
- a Base64 encoded MD5 digest of the password
{SHA}encodedCredential
- a Base64 encoded SHA1 digest of the password
{SSHA}encodedCredential
- 20 character salt followed by the salted SHA1 digest Base64 encoded
salt$iterationCount$encodedCredential
- a hex encoded salt, iteration code and a hex encoded credential, each separated by $
但是支持的散列函数类似于 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 所述。
我正在寻找一些技巧,了解如何使用 MySQL 数据库配置 DataSourceRealm,包括 bcrypt-hashed 密码。不幸的是,我已经在努力获取 DataSource 运行 - 即使使用明文密码也是如此。
我编辑了 conf/context.xml 并按如下方式添加了数据源:
<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&characterEncoding=UTF-8&serverTimezone=UTC&verifyServerCertificate=false&useSSL=true&requireSSL=true&autoReconnect=true" />
</Context>
server.xml 包含如下领域:
<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>
,因此:
- 在与
localDataSource="true"
、 相同的上下文中声明 - 或在
<GlobalNamingResources>
. 中全局声明 JDBC
<Realm>
Resource
关于 bcrypt:Tomcat(MessageDigestCredentialHandler
和 SecretKeyCredentialHandler
)中的两个凭证处理程序中的 none 支持 bcrypt 使用的格式或密码散列。如果你想重用来自其他来源的散列密码,如果不编写你自己的 CredentialHandler
.
唯一支持的存储格式是:
plainText
- the plain text credentials if no algorithm is specifiedencodedCredential
- a hex encoded digest of the password digested using the configured digest{MD5}encodedCredential
- a Base64 encoded MD5 digest of the password{SHA}encodedCredential
- a Base64 encoded SHA1 digest of the password{SSHA}encodedCredential
- 20 character salt followed by the salted SHA1 digest Base64 encodedsalt$iterationCount$encodedCredential
- a hex encoded salt, iteration code and a hex encoded credential, each separated by $
但是支持的散列函数类似于 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 所述。