传统上,电子邮件服务以未受保护的方式发送数据——无论您是通过 SMTP 发送电子邮件,还是通过 IMAP 或 POP 接收电子邮件,默认设置都是明文传输。 随着越来越多的在线应用程序强制执行加密以及保护您的数据的一般共识,最好使用安全套接字层/传输层安全 (SSL/TLS) 安全证书来保护您的电子邮件服务。
首先,快速回顾一下电子邮件服务和协议。电子邮件通过名为简单邮件传输协议 (SMTP) 的服务使用 TCP 端口 25 发送。 此协议根据 DNS 邮件交换器 (MX) 记录查找将电子邮件从服务器发送到服务器。 电子邮件到达电子邮件服务器后,会使用以下两种服务之一进行检索:Internet 消息访问协议 (IMAP),使用端口 TCP 143;或邮局协议 (POP3),使用端口 TCP 110。 默认情况下,所有这些服务都以纯文本形式将您的电子邮件和身份验证发送到/从这些服务发送——因此,它非常不安全!
为了保护电子邮件数据和身份验证,这些服务添加了一项安全功能,它们可以使用 SSL/TLS 证书来封装数据流并使用加密进行通信。 SSL/TLS 加密如何保护信息超出了本文的范围,但 Bryant Son 的互联网安全文章 对其进行了详细介绍。 在较高层面,SSL/TLS 加密是一种公钥/私钥加密算法。
通过将这些安全功能添加到服务中,它们可以在新的 TCP 端口上侦听
服务 | 默认 TCP 端口 | SSL/TLS 端口 |
---|---|---|
SMTP | 25 | 587 |
IMAP | 143 | 993 |
POP3 | 110 | 995 |
生成 SSL/TLS 证书
可以使用 OpenSSL 等工具免费生成 SSL/TLS 证书,也可以从公共证书颁发机构 (CA) 以不同的价格购买。 过去,生成自己的证书很容易并且在大多数情况下都可以使用,但是随着对更好安全性的需求不断增长,大多数电子邮件客户端不信任自生成的 SSL/TLS 证书,除非手动添加例外。
如果您的用例是私有的或用于测试,那么使用自生成的证书可以省钱。 但是,如果您将其推广到大型群体或有付费客户,那么最好从销售证书的公共、受信任的公司购买证书。
无论哪种情况,启动请求新证书的过程都是使用 Linux 系统上的 OpenSSL 工具来创建证书签名请求 (CSR)
$ openssl req -new -newkey rsa:2048 -nodes -keyout mail.mydomain.key -out mail.mydomain.csr
此命令将同时为您尝试保护的服务创建一个新的 CSR 和私钥。 该过程将询问您与证书相关联的一些问题:位置详细信息、服务器完全限定域名 (FQDN)、电子邮件联系信息等。 填写完信息后,将生成密钥和 CSR。
如果您生成自己的证书
如果您想生成自己的证书,则必须在发出上述 CSR 命令之前创建自己的 根 CA 。 您可以使用以下命令创建自己的根 CA
$ openssl genrsa -des3 -out myCA.key 2048
它会提示您添加密码。 请给它一个安全的密码,并且不要丢失它——这是您的私有根 CA 密钥,顾名思义,它是您证书中所有信任的根源。
接下来,生成根 CA 证书
$ openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
在回答了更多问题后,您将生成一个有效期为五年的根 CA 证书。
使用上述步骤中的 CSR 文件,您可以请求生成并由您刚刚创建的根 CA 签名的新证书
$ openssl x509 -req -in mail.mydomain.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out mail.mydomain.pem -days 1825 -sha256
输入您的私有根 CA 密钥密码以创建和签名证书。
现在,您有了配置电子邮件服务以增强安全性所需的两个文件:私钥文件 mail.mydomain.key 和公共证书文件 mail.mydomain.pem。
如果您购买证书
如果您从供应商处购买证书,它会要求您将 CSR 上传到其系统,因为它被用作生成 SSL/TLS 证书的输入。 该证书将可以作为文件访问(例如 mail.mydomain.pem)。 许多 SSL 供应商还要求您下载中间证书。 如果是这种情况,您必须将两个证书文件合并为一个,以便电子邮件服务可以组合处理它们。 您可以使用以下命令将您的证书与第三方中间证书合并
$ cat mail.mydomain.pem gd_bundle-g2-g1.crt > mail.mydomain.pem
请注意,输出的文件扩展名为 .pem,它代表 Privacy-Enhanced Mail。
现在,您有了配置电子邮件服务以增强安全性所需的两个文件:私钥文件 mail.mydomain.key 和公共组合证书文件 mail.mydomain.pem。
为您的文件创建一个安全的目录
无论您是创建了自己的密钥还是从供应商处购买的密钥,都请为上面创建的两个文件创建一个安全的、root 拥有的目录。 创建安全播放的一个示例工作流程是
$ mkdir /etc/pki/tls
$ chown root:root /etc/pki/tls
$ chmod 700 /etc/pki/tls
复制到 /etc/pki/tls 后,请务必使用以下命令设置文件的权限
$ chmod 600 /etc/pki/tls/*
配置您的 SMTP 和 IMAP 服务
接下来,配置 SMTP 和 IMAP 服务以使用新的安全证书。 本示例中用于 SMTP 和 IMAP 的程序是 postfix 和 dovecot。
在您喜欢的文本编辑器中编辑 /etc/postfix/main.cf 。 添加以下行
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/mail.mydomain.pem
smtpd_tls_key_file = /etc/pki/tls/mail.mydomain.key
自定义您的配置
以下选项允许您禁用/启用不同的密码、协议等。
smtpd_tls_eecdh_grade = strong
smtpd_tls_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_security_level=may
smtpd_tls_ciphers = high
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULL
smtpd_tls_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULL
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
通过添加以下三行来编辑 /etc/dovecot/dovecot.conf
ssl = required
ssl_cert = </etc/pki/tls/mail.mydomain.pem
ssl_key = </etc/pki/tls/mail.mydomain.key
添加以下选项以禁用/启用不同的密码、协议等(我将理解和考虑这些留给您自己)
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:ALL:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SSLv2
ssl_prefer_server_ciphers = yes
ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1
ssl_min_protocol = TLSv1.2
为 SELinux 设置上下文
如果您的 Linux 发行版启用了 SELinux,请为您的新证书文件设置正确的 SELinux 上下文。
对于 Postfix SELinux
$ chcon -u system_u -t cert_t mail.mydomain.*
对于 Dovecot SELinux
$ chcon -u system_u -t dovecot_cert_t mail.mydomain.*
重新启动这两个服务,并使用更新后的电子邮件客户端配置进行连接。 某些电子邮件客户端会自动检测新的端口号; 其他客户端需要您更新它们。
测试您的设置
使用 openssl 和 s_client 插件从命令行快速测试
$ openssl s_client -connect mail.mydomain.com:993
$ openssl s_client -starttls imap -connect mail.mydomain.com:143
$ openssl s_client -starttls smtp -connect mail.mydomain.com:587
这些测试命令将显示有关您使用的连接、证书、密码、会话和协议的大量数据。 这不仅是验证新配置是否正常工作的好方法,而且还可以确认您正在使用在 postfix 或 dovecot 配置文件中定义的适当证书和安全设置。
保持安全!
5 条评论