Postfix SMTP中继:客户端不向服务器提供TLS客户端证书?

时间:2014-04-16 23:34:51

标签: email ssl postfix-mta client-certificates

我有两台机器,一台运行Ubuntu,一台运行Debian,两台运行Postfix。目的是机器#2成为机器#1的SMTP中继/智能主机。我已经创建了一个CA并为这两台机器颁发了证书:#2的服务器证书和#1的客户端证书。

从#1发送电子邮件时(通过MUA与localhost上的Postfix交谈:25,意图将电子邮件转发到#2),基本的工作正常:机器可以互相通话并且实际上是试图进行中继。如果从#1提供有效的客户端SSL / TLS证书,则允许在#2上进行中继。

#2的相关配置是:

smtpd_tls_received_header = yes
smtpd_tls_loglevel = 2
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/private/cert2.pem
smtpd_tls_key_file = /etc/ssl/private/key2-d.pem
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination permit_tls_all_clientcerts

#1上的配置是:

smtp_tls_CAfile = /etc/ssl/certs/cacert.pem
smtp_tls_cert_file = /etc/ssl/private/cert1.pem
smtp_tls_key_file = /etc/ssl/private/key1-d.pem
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = verify
smtp_tls_loglevel = 2

机器#1连接到#2,启用STARTTLS,日志文件显示它成功验证来自#2的证书,并尝试中继消息。 然而,它似乎不会将客户端证书发送到#2,而#2拒绝转发该消息。

来自#1的日志条目:

Apr 17 01:18:14 mail1 postfix/smtp[30250]: Verified TLS connection established to mail2[x.x.x.x]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Apr 17 01:18:14 mail1 postfix/smtp[30244]: 8A2328BDB4: to=<addr@gmail.com>, relay=mail2[x.x.x.x]:25, delay=3488, delays=3486/0.41/0.85/0.19, dsn=4.7.1, status=deferred (host mail2[x.x.x.x] said: 454 4.7.1 <addr@gmail.com>: Relay access denied (in reply to RCPT TO command))

来自#2的日志条目:

Apr 17 01:18:13 mail2 postfix/smtpd[28798]: Anonymous TLS connection established from unknown[y.y.y.y]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Apr 17 01:18:13 mail2 postfix/smtpd[28798]: NOQUEUE: reject: RCPT from unknown[y.y.y.y]: 454 4.7.1 <addr@gmail.com>: Relay access denied; from=<addr@mail1> to=<addr@gmail.com> proto=ESMTP helo=<mail1>

有什么想法吗?我的假设是#1没有在已建立的匿名TLS连接上发送其客户端证书&#34;部分来自mail2的日志。

2 个答案:

答案 0 :(得分:3)

TLS服务器必须从客户端请求证书,客户端不会自己发送证书。尝试添加

  

smtpd_tls_ask_ccert =是

在服务器端

答案 1 :(得分:0)

在postfix配置文件main.cf中添加服务器地址(server1.domaine.com) mynetworks = 127.0.0.1/8