执行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
- Debian/Ubuntu系:
检查目标目录的存在性和权限
你指定的/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的命令,咱们可以直接手动生成,效果是一样的:- 生成私钥:
openssl genrsa -out /etc/opendkim/keys/example.com/mail.private 2048 - 从私钥导出公钥:
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

