Exim DKIM 错误:DKIM:无论我尝试什么私钥,签名都会失败(RC -101)

Exim DKIM 错误:DKIM:无论我尝试什么私钥,签名都会失败(RC -101)

我在使用 Exim 时遇到了这个问题。DKIM 无法签署外发邮件。

这是 /var/log/exim4/mainlog 输出(Debian Squeeze):

2012-08-02 17:11:33 1Sx1k5-0004Tk-9D <= me@my_domain.com U=me P=local S=399
2012-08-02 17:11:33 1Sx1k5-0004Tk-9D DKIM: signing failed (RC -101)
2012-08-02 17:11:33 1Sx1k5-0004Tk-9D => [email protected] R=dnslookup T=remote_smtp H=gmail-smtp-in.l.google.com [173.194.77.27] X=TLS1.0:RSA_ARCFOUR_SHA1:16 DN="C=US,ST=California,L=Mountain View,O=Google Inc,CN=mx.google.com"

运行的 Exim 版本是:Exim 版本 4.72 Berkeley DB:Berkeley DB 4.8.30:(2010 年 4 月 9 日)支持:crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM

正如我所读到的这里

嘿乔恩,错误:“DKIM:签名失败(RC -101)”是错误代码 PDKIM_ERR_RSA_PRIVKEY(来自 src/pdkim/pdkim.h)

/* Function success / error codes */
#define PDKIM_OK 0
#define PDKIM_FAIL -1
#define PDKIM_ERR_OOM -100
#define PDKIM_ERR_RSA_PRIVKEY -101
#define PDKIM_ERR_RSA_SIGNING -102
#define PDKIM_ERR_LONG_LINE -103
#define PDKIM_ERR_BUFFER_TOO_SMALL -104

并且仅在一个地方返回 - 在 src/pdkim/pdkim.c 中

/* Perform private key operation */ 
if(rsa_parse_key(&rsa, (unsigned char *)sig->rsa_privkey,
strlen(sig->rsa_privkey), NULL, 0) != 0) {
return PDKIM_ERR_RSA_PRIVKEY;
} 

因此,看起来解析您为 Exim 生成的 RSA 密钥时出现了问题。这可能是因为密钥生成失败,或者因为 exim 无权访问该文件(文件权限)。我会先尝试重新生成您的证书。

所以问题出在私钥上。

我尝试生成不同的密钥,但无论我使用什么私钥,Exim 仍然记录:DKIM:签名失败(RC -101)。

我试过了:

# openssl genrsa -out dkim.private.key 768

然后

# openssl genrsa -out dkim.private.key 1024

然后

# openssl genrsa -out private.key 768

或者

# openssl genrsa -out private.key 1024

我也试过这个DKIM 密钥生成向导 但错误仍然存​​在。

这是 DKIM 的 Exim 配置部分(来自 /etc/exim4/exim4.conf.template):

remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp

  dkim_domain = my_domain.com
  dkim_selector = dkim
  dkim_private_key = private.key
  dkim_canon = relaxed

我使用的密钥位于 /etc/exim4 中,以避免权限问题

有人知道吗?我该如何解决这个问题并让我的外发邮件获得签名

答案1

我已经通过设置我的私钥的绝对路径解决了 exim 和 dkim 的这个问题(感谢@cjc):

最终的 DKIM 配置部分如下:

remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp

  dkim_domain = my_domain.com
  dkim_selector = dkim
  dkim_private_key = /absolute/path/to/my/private.key
  dkim_canon = relaxed

就这些!然后重启 Exim

相关内容