![更新:](https://linux22.com/image/40531/%E6%9B%B4%E6%96%B0%EF%BC%9A.png)
在 Postfix 中,我指定了我的私钥、我的证书和我的 CA 的证书
smtpd_tls_CAfile = /etc/ssl/cacert.pem
smtpd_tls_key_file = /etc/ssl/server.key
smtpd_tls_cert_file = /etc/ssl/server.pem
在 dovecot 中,只有指定我的密钥和我的证书的选项:
ssl_cert = </etc/ssl/server.pem
ssl_key = </etc/ssl/server.key
如何指定我的 CA 的证书?
更新:
问题是,当我与客户端连接到端口 993 时,出现证书错误。使用openssl s_client -connect server:993
我得到这个错误:
verify return:1
verify error:num=27:certificate not trusted
verify return:1
verify error:num=21:unable to verify the first certificate
verify return:1
当我连接到端口 465 (Postfix) 时,我没有收到此错误:
openssl s_client -connect server:465
答案1
您需要的是连锁证书。您可以像这样创建一个:
cat /etc/ssl/server.pem /etc/ssl/cacert.pem > /etc/ssl/chain.pem
然后使用该链作为服务器证书
ssl_cert = </etc/ssl/chain.pem
ssl_key = </etc/ssl/server.key
现在,当您连接 时openssl s_client
,您应该不会收到任何错误(前提是其他所有内容都设置正确)
答案2
通常,服务器向请求客户端提供服务器证书以及所有中间证书颁发机构证书,以便客户端可以将链的顶级证书与其可信(根)证书之一相匹配。对于 apache、dovecot 和 postfix 来说都是如此。 Dovecot 似乎没有信任链的设置,因此在这种情况下,信任链必须与服务器证书合并并指向。
ssl_cert = </etc/ssl/server-plus-chain.pem
证书的顺序是
- 服务器证书
- 中介证书
最后一个中间证书是由客户端可用的受信任根证书颁发的。
答案3
如果应用程序作为 SSL 服务器工作,则需要证书和密钥,例如证书是提供给客户端的证书。如果应用程序作为 SSL 客户端工作,因此需要验证服务器提供的证书,则需要受信任的 CA 列表。
虽然 postfix 既可以作为服务器(接受邮件)又可以作为客户端(将邮件发送到另一个邮件服务器),dovecot 只是一个服务器,因此不需要受信任的 CA 列表。
答案4
CA证书如果有多个文件,可以解决以下问题
ssl_verify_client_cert = yes
ssl_ca = </etc/ssl/myssl/startssl.pem
ssl_ca = </etc/ssl/myssl/sub.class2.server.ca.pem