【问题标题】:dovecot password hashing with mysql 8 SHA2使用 mysql 8 SHA2 进行 dovecot 密码散列
【发布时间】:2018-12-27 11:35:13
【问题描述】:

以前(MySQL 5.7)我们使用此命令将新的电子邮件地址添加到现有表中:

INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user@example.com'),

然后 dovecot 能够对用户进行身份验证。 (more information关于dovecot密码方案)
现在 Encrypt 在最新版本的 MySQL 中已被弃用。 (link)

我想使用 SHA2 重写该命令,但没有成功。

编辑:
这可以帮助某人使用How To Configure a Mail Server Using Postfix, Dovecot, MySQL, and SpamAssassin 来配置带有 8.0 版 Mysql 的邮件服务器。

【问题讨论】:

    标签: mysql sql hash sha2 mysql-8.0


    【解决方案1】:

    最后,我将 dovecote 用于其用户身份验证的默认方法从 SHA512-CRYPT 更改为 SHA512。我认为它的安全性不亚于此,但 MySQL 8 支持它。
    之后,我使用此命令将新用户添加到表中。

    INSERT INTO `servermail`.`virtual_users`
    (`id`, `domain_id`, `password` , `email`)
    VALUES
    ('1', '1', TO_BASE64(UNHEX(SHA2('password', 512))), 'user@example.com'); 
    

    【讨论】:

    • 感谢您分享这个问题和答案:这对我有帮助.. 我遵循了相同的教程 @digitalocean.com/community/tutorials/… 并且我也收到了相同的弃用消息 :)
    • 谢谢!我正在寻找这个解决方案!
    • YW @wojtek-b 。如果您觉得问题和答案有用,您可以对它们进行投票。
    【解决方案2】:

    SHA512-CRYPT 似乎不可能在 MySQL 中实现,就 Dovecot 而言,我承认我无法理解他们为什么建议一开始就使用加密。像 OP 建议的那样使用强 hash 至少同样有效并且更安全。

    由于我更喜欢​​加盐的密码,因此我使用 Dovecot 的 SSHA512 是“存储在 base64 中的密码的加盐 SHA512 总和”:

    INSERT INTO `virtual_users`
    (`id`, `domain_id`, `password` , `email`)
    VALUES
    (NULL, '1',  (SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted FROM (SELECT SHA2(RAND(), 512) AS salt) v), 'user@example.com');
    

    或更新密码:

    UPDATE virtual_users
    SET `password` = (
        SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted
        FROM (
            SELECT SHA2(RAND(), 512) AS salt
        ) v
    )
    WHERE email = 'user@example.com';
    

    这些查询:

    1. 生成随机(相当长的)盐
    2. 将盐添加到密码中
    3. 获取#2 的 SHA512 哈希
    4. 将哈希转换为二进制
    5. 将盐添加到#4
    6. 将整个内容转换为 Base64
    7. 删除 MySQL 的 TO_BASE64() 函数添加的不需要的换行符

    结果是一个 256 字节长的字符串,因此您可能需要将 password 字段更新为 VARCHAR(256)。

    有许多教程建议使用doveadm 手动生成加密密码,虽然效果很好,但我觉得它有点麻烦。有兴趣的可以这样称呼它:

    doveadm pw -s SHA512-CRYPT -p "YourPasswordHere"
    

    更有用的是能够使用相同的实用程序验证生成的密码:

    doveadm auth test user@example.com YourPasswordHere
    

    【讨论】:

      猜你喜欢
      • 2011-10-13
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多