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

执行opendkim-genkey生成DKIM密钥失败,报错“openssl exited with status %d”求助

执行opendkim-genkey生成DKIM密钥失败,报错“openssl exited with status %d”求助

这个报错确实挺闹心的——%d是个没替换的占位符,说明opendkim-genkey调用openssl时出了问题,但没给出具体的错误状态码,很难直接定位。我给你几个实际可行的排查和解决方向:

  • 先确认openssl是否正常可用
    先在终端里直接跑openssl version,看看能不能正常输出版本信息。如果提示“command not found”,那就是openssl没装,先装它:

    • Debian/Ubuntu系:sudo apt install openssl
    • CentOS/RHEL系:sudo yum install openssl
  • 检查目标目录的存在性和权限
    你指定的/etc/opendkim/keys/example.com目录是否存在?权限是否足够?哪怕用root/sudo,要是目录不存在或者没有写入权限,生成密钥肯定会失败。可以先手动创建并设置权限:

    sudo mkdir -p /etc/opendkim/keys/example.com
    sudo chown -R opendkim:opendkim /etc/opendkim/keys  # 如果系统里有opendkim用户的话
    sudo chmod -R 700 /etc/opendkim/keys  # 确保密钥目录权限安全
    
  • 绕过opendkim-genkey,手动用openssl生成密钥
    其实opendkim-genkey就是封装了openssl的命令,咱们可以直接手动生成,效果是一样的:

    1. 生成私钥:
      openssl genrsa -out /etc/opendkim/keys/example.com/mail.private 2048
      
    2. 从私钥导出公钥:
      openssl rsa -in /etc/opendkim/keys/example.com/mail.private -pubout -out /etc/opendkim/keys/example.com/mail.txt
      

    之后把mail.txt里的公钥内容整理成DKIM的DNS记录格式就行:去掉-----BEGIN PUBLIC KEY-----、-----END PUBLIC KEY-----和换行,拼成v=DKIM1; k=rsa; p=你的公钥内容,然后添加到域名的DNS解析里。

  • 查看系统日志找具体错误
    系统日志里大概率会有更详细的报错信息,比如具体的status code是什么。可以试试:

    grep -i "openssl\|opendkim" /var/log/syslog  # Debian/Ubuntu系
    # 或者
    grep -i "openssl\|opendkim" /var/log/messages  # CentOS/RHEL系
    

    比如status 127就是找不到openssl命令,status 2可能是参数错误,根据具体码就能更精准解决。

  • 核对opendkim-genkey的参数
    再检查一遍你输的命令:-d example.com是不是你的实际域名?-D指定的是不是绝对路径?有没有拼写错误?有时候手滑打错字符也会导致奇怪的报错。

备注:内容来源于stack exchange,提问作者STEVE J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:39:37