ssl/tls
传统上,电子邮件服务以不受保护的方式发送数据-无论是通过SMTP发送电子邮件还是通过IMAP或POP接收电子邮件,默认设置均为明文形式。 随着越来越多的在线应用程序执行加密并获得保护您的数据的普遍共识,最好使用安全套接字层/传输层安全性(SSL / TLS)安全证书来保护电子邮件服务。
为了保护电子邮件数据和身份验证,这些服务添加了一项安全功能,其中它们可以利用SSL / TLS证书来包装数据流并进行加密通信。 SSL / TLS加密如何确保信息安全不在本文的讨论范围之内,但是科比·桑特的互联网安全文章详细介绍了该信息。 在较高级别,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 ,表示隐私增强邮件。
现在,您具有配置电子邮件服务以增强安全性所需的两个文件:私钥文件mail.mydomain.key和公共组合证书文件mail.mydomain.pem 。
为文件创建一个安全目录
无论您是创建自己的密钥还是从供应商那里购买密钥,都必须为上面创建的两个文件创建一个安全的,根目录拥有的目录。 创建安全播放的工作流程示例为:
$
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在您的首选文本编辑器/ 后缀/ 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
这些测试命令将显示有关您使用的连接,证书,密码,会话和协议的大量数据。 这不仅是验证新配置是否正常的好方法,而且还可以确认您使用的是在后缀或dovecot配置文件中定义的适当的证书和安全设置。
保持安全!
翻译自: https://opensource.com/article/20/4/securing-linux-email
ssl/tls