花了2天的时间试图告诉Exim在我的Debian8服务器上添加DKIM签名。 没有成功。 已经阅读了很多的方法,论坛,但没有任何可能的解决scheme在我的服务器上。
已经生成的关键:
cd /etc/exim4/ openssl genrsa -out example.com-private.pem 1024 -outform PEM openssl rsa -in example.com-private.pem -out example.com.pem -pubout -outform PEM
有creaded文件
00_local_macros
在
/etc/exim4/conf.d/main/
具有以下内容:
DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 DKIM_DOMAIN = ${lc:${domain:$h_from:}} DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
已经发布了一个DNS文本的logging:
20160604._domainkey.example.com
公钥内容:
k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRpHpC2q1ycmaqdnYlf5WI5g7ZyiXybd6EFdOqk35Sl7ZNfSeZelbyxqgLN+BzHpbp4Z4JDtKLSgBwugCePhl2xVDtQvO9XfqwQLMO5PAOONCLTwoGYrViwf5ki2zIqS2uN5MpuRTKW/IiK3CtRId+w5gjdACAvkwZWBstKEDrQQIDAQAB # update-exim4.conf # service exim4 restart
甚至重新启动服务器。
所有电子邮件仍然没有DKIM签名到达。
试图添加行:
dkim_domain = ${lc:${domain:$h_from:}} DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}} DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 dkim_sign_headers = true
到一些论坛build议的文件/etc/exim4/conf.d./transport/30_exim4-config_remote_smtp。 没有成功。 仍然没有DKIM签名。
exim4 -bV Exim version 4.84_2 #2 built 13-Mar-2016 17:47:19 Copyright (c) University of Cambridge, 1995 - 2014 (c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2014 Berkeley DB: Berkeley DB 5.3.28: (September 9, 2013) Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM PRDR OCSP Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd Authenticators: cram_md5 plaintext Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 Configuration file is /var/lib/exim4/config.autogenerated
更新
几乎所有的教程都是错误的。 使用单个文件Eximconfiguration时,DKIM设置必须驻留在exim4.conf.template文件中。 有用! 但是这个configuration只有一个域名:
DKIM_CANON = relaxed DKIM_DOMAIN = example.com DKIM_PRIVATE_KEY = /etc/exim4/dkim/example.com-private.pem DKIM_SELECTOR = 20160604 #DKIM_STRICT = true
多个域名仍然不起作用。 尝试了多个configuration,但仍然没有成功。 以下三个都不起作用:
DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 DKIM_DOMAIN = ${sender_address_domain} DKIM_FILE = /etc/exim4/dkim/{DKIM_DOMAIN}-private.pem DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 DKIM_DOMAIN = ${lc:${domain:$h_from:}} DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem} {/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem}} DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 dkim_domain = ${lc:${domain:$h_from:}} DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
这适用于我:
DKIM_CANON = relaxed DKIM_SELECTOR = 20160604 DKIM_DOMAIN = ${lc:${domain:$h_from:}} DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${dkim_domain}-private.pem} {/etc/exim4/dkim/${dkim_domain}-private.pem}}
如果您使用单个文件Eximconfiguration,而不是在00_local_macros或其他文件中,这些设置必须放在exim4.conf.template文件中, 如许多howtos中所述。
设置Exim中的DKIM签名是一个问题(我花了3天),Exim开发者应该修复它。
validation您是否正在使用remote_smtp传输。 这应该在包含=>的行的T= in /var/log/exim4/mainlog 。 在本地交付的电子邮件中检查DKIM将不起作用,因为不使用此传输。 使用validation服务来检查您的邮件是否已签名。
validation您的私钥的权限。 使用Exim作为Debian和Ubuntu安装的Debian-exim,它必须是可读的。 如果您的传输是dkim_strict ,则它将在消息不能签名时重新发送消息。 它会将失败原因logging到mainlog和paniclog 。 在paniclog查找消息可能更容易。
这些是获得DKIM工作所需的设置。 你似乎错过了一些。 (我使用相同的密钥签署多个域名,尝试使用单个密钥进行签名,然后再尝试使用不同的域名,并使用不同的密钥)。此configuration应该防止remote_smtp传输发送未签名的电子邮件。
DKIM_CANON = relaxed DKIM_DOMAIN = ${sender_address_domain} DKIM_PRIVATE_KEY = CONFDIR/dkim.private.20160604 DKIM_SELECTOR = ${extract{-1}{.}{DKIM_PRIVATE_KEY}} DKIM_STRICT = true # optional - causes signing failures to defer (requeue) #DKIM_SIGN_HEADERS = # Use default
一旦您使用静态密钥进行签名工作。 你可以尝试这些改变
DKIM_PRIVATE_KEY = CONFDIR/${sender_address_domain}.private.201604 DKIM_SELECTOR = 20160604 DKIM_STRICT = false # optional - pass if no key available
您可能想要查看:
Exim version 4.84_2 #2 built 25-Jul-2016 18:59:44
这是我的工作,我是在确切的情况下,exim4没有添加dkim签名。
我编辑了文件/etc/exim4/update-exim4.conf.conf ,发现即使在使用splitconfiguration时,configuration文件也是错误的,所以我不得不改变这一行:
dc_use_split_config='true'
然后我编辑了10_exim4-config_transport-macros文件,并在最后添加了以下几行:
DKIM_DOMAIN = ${lc:${domain:$h_from:}} DKIM_FILE = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private.key DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_SELECTOR = exim
以前的工作是生成私钥文件并添加TXT DNSlogging等。