You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Courier IMAP配置中适配MySQL SHA256加密密码的正确AUTH能力项咨询

Courier IMAP配置中适配MySQL SHA256加密密码的正确AUTH能力项咨询

首先得明确问题的核心:你遇到的问题不是单纯添加AUTH=CRAM-SHA256就能解决的——CRAM系列认证是挑战响应式的,它需要Courier能获取到用户密码的原始值(或者等价密钥)来计算HMAC哈希,而你现在存在MySQL里的是密码的SHA256哈希,这是单向不可逆的,Courier没法用它完成CRAM认证流程。

下面给你两种可行的解决方案,你可以根据需求选择:

方案一:调整密码存储格式,适配Courier的SHA256认证

Courier支持直接识别带特定前缀的哈希值,我们可以修改MySQL的用户插入语句,给SHA256哈希加上{SHA256}前缀,再配置Courier认证模块识别这种格式:

  1. 重新存储用户密码
    用以下SQL语句插入或更新用户(替换成你的实际信息):

    INSERT INTO `users` (`id`, `name`, `maildir`, `crypt`) VALUES
    ('postbox@domain.com', 'Mr. Postbox',
    'domain.com/postbox/',
    CONCAT('{SHA256}', SHA2('loginpwd', 256)));
    
  2. 配置Courier的MySQL认证模块
    编辑/etc/courier/authmysqlrc文件,确保以下配置项正确(替换成你的数据库信息):

    MYSQL_SERVER localhost
    MYSQL_USERNAME 你的数据库用户名
    MYSQL_PASSWORD 你的数据库密码
    MYSQL_DATABASE 你的数据库名
    MYSQL_USER_TABLE users
    MYSQL_LOGIN_FIELD id
    MYSQL_CRYPT_PWFIELD crypt
    MYSQL_CRYPT_SCHEME sha256
    
  3. 调整IMAP的AUTH能力项
    保留你添加的AUTH=CRAM-SHA256,同时建议加上AUTH=PLAIN(配合TLS使用更安全),修改/etc/courier/imapd中的配置:

    IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 AUTH=PLAIN IDLE"
    
  4. 重启Courier服务生效

    sudo systemctl restart courier-imap courier-authlib
    

方案二:使用PLAIN认证(配合TLS加密)

如果你不想修改密码存储格式,也可以直接使用PLAIN认证,但必须确保IMAP连接通过TLS加密(避免明文传输密码):

  1. 确保Courier的IMAP TLS配置正常
    检查/etc/courier/imapd-ssl文件,确认TLS相关配置(比如证书路径)正确,且服务正常运行。

  2. 调整IMAP的AUTH能力项
    在/etc/courier/imapd中确保包含AUTH=PLAIN:

    IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 AUTH=PLAIN IDLE"
    
  3. 修改authmysqlrc支持明文验证
    因为你存储的是SHA256哈希,需要让Courier用提交的明文密码计算SHA256后和数据库中的值对比,修改/etc/courier/authmysqlrc的配置和方案一一致即可。

  4. 重启服务
    执行相同的重启命令让配置生效。

为什么之前的AUTH=CRAM-SHA256不工作?

再强调一下:CRAM-SHA256认证需要Courier用用户的原始密码生成HMAC-SHA256响应,而你存储的是密码的SHA256哈希——这是单向加密的,无法反向得到原始密码,所以Courier无法完成CRAM的挑战响应流程,自然认证失败。

备注:内容来源于stack exchange,提问作者Andrés Chandía

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:54:28