我目前正在迁移旧的网络服务器。
旧服务器使用存储在 mysql 表中并mod_auth_mysql
启用的用户的基本身份验证。
密码存储在 apaches 的 sha1 函数SELECT sha1('secret')
中,适用于mod_auth_mysql
不幸mod_auth_mysql
的是不再支持。这就是为什么我找到mod_authn_dbd
了替代方案。
https://documentation.help/httpd-2.4-es/mod_authn_dbd.html
我已经设法让所有东西都启动并运行,直到我可以使用基本身份验证和固定密码登录为止
<Location />
AuthType Basic
AuthName "Test"
AuthBasicProvider dbd
Require valid-user
AuthDBDUserPWQuery "SELECT '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=' FROM users WHERE user = %s"
</Location>
我只将 sha1 哈希存储在用户表中。虽然由 mysql ( ) mod_authn_dbd 生成的旧mod_auth_mysql
接受的哈希SELECT sha1('test')=a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
没有。
根据https://documentation.help/httpd-2.4-es/password_encryptions.html
SHA1 "{SHA}" + Base64 编码的密码 SHA-1 摘要。
接受 htpasswd 生成的密码。
htpasswd -bns user test
user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
现在我需要将此值a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
(存储在我的数据库中用于密码测试)转换qUqP5cyxm6YcTAhz05Hph5gvu9M=
为 mysql 内部的(密码测试的接受值)
我已经试过了
SELECT to_base64(sha1('test')), to_base64(ucase(sha1('test'))), to_base64(lcase(sha1('test')));`
但没有一个产生预期的结果。
我要么需要一种方法将我现有的密码哈希转换为预期的格式,要么说服mod_authn_dbd
我接受我现有的 sha1 哈希。
任何帮助,将不胜感激