文章目录
- 安装第三方邮件客户端(s-nail)
- S-nail的简单介绍
- 重要的特性差异
- 配置邮件服务
- 配置文件 (以QQ邮箱为例)
- 获取QQ邮箱授权码
- 获取QQ服务器证书
- 使用 OpenSSL 获取 QQ 邮箱服务器的证书
- 安装OpenSSL
- 连接到 QQ 邮箱的 SMTP 服务器并下载证书
- 保存证书
- 验证证书
- 配置s-nail使用获取到的证书
- 测试发送
- 自动化获取证书命令
- certutil 证书管理工具的简单介绍
在 Linux 环境中,邮件的使用场景非常广泛,涉及到系统管理、监控报警、批量邮件、用户通知、错误报告等多种场景。通过灵活配置邮件传输代理(如 Postfix)、邮件客户端(如 S-nail)以及脚本工具,管理员和开发者可以实现高效的邮件通信和通知功能,确保系统的可靠运行和用户的实时沟通。
本篇主要介绍如何配置邮件客户端(以s-nail为例)
安装第三方邮件客户端(s-nail)
dnf install s-nail -y
S-nail的简单介绍
- s-nail 是
mailx
的增强版本之一。它在传统mailx
的基础上加入了更多现代化的功能,使其更加适合复杂的电子邮件需求。 s-nail
的主要目的是增强mailx
的功能,以支持现代电子邮件技术,如 IMAP、SMTP 身份验证、SSL/TLS 加密等。
重要的特性差异
- IMAP 支持:传统的
mailx
主要处理本地邮件,而s-nail
提供了对 IMAP 协议的支持,可以远程管理邮件。 - SMTP 身份验证:
s-nail
支持直接通过 SMTP 服务器发送邮件,而不依赖本地 MTA。这对于需要通过外部邮件服务器(如 Gmail、Outlook)发送邮件的场景非常有用。 - 加密支持:
s-nail
支持 SSL/TLS 连接,确保与邮件服务器之间的通信是加密的,传统的mailx
在这方面支持有限。
配置邮件服务
配置文件 (以QQ邮箱为例)
vim /etc/s-nail.rc
#在该文件的末尾添加以下内容set from=xxxxxxxx@qq.com #指定邮件的发件人地址set smtp=smtps://smtp.qq.com:465 #设置 SMTP 服务器的地址和端口,根据情况选择正确的端口set smtp-auth-user=xxxxxxxx@qq.com #用于通过 QQ 邮箱的 SMTP 服务器发送邮件时进行身份验证set smtp-auth-password=XXXXXXXXXXXX #SMTP 认证的密码,注意这是QQ邮箱的授权码,而不是登陆密码,下文介绍如何获取QQ授权码set smtp-auth=login #指定 SMTP 的认证方式#以下内容时情况使用,部分邮箱(如163)不需要使用证书认证set ssl-verify=ignore #忽略 SSL/TLS 证书验证(不推荐长时间使用)set nss-config-dir=/root/.certs #指定 NSS(Network Security Services)证书数据库的路径
获取QQ邮箱授权码
在qq客户端程序(如浏览器中进入邮箱登录QQ邮箱->设置->账户)中通过设置开启imap/smtp服务,提供第三方程序账号的授权码
获取QQ服务器证书
使用 OpenSSL 获取 QQ 邮箱服务器的证书
安装OpenSSL
dnf install openssl
连接到 QQ 邮箱的 SMTP 服务器并下载证书
openssl s_client -connect smtp.qq.com:465 (可选-showcerts)#通常操作系统已经内置了根证书的信任库
保存证书
运行上述命令后,你会看到一段证书内容输出,类似于以下内容:
-----BEGIN CERTIFICATE-----
MII...
...
-----END CERTIFICATE-----
将从 -----BEGIN CERTIFICATE-----
到 -----END CERTIFICATE-----
之间的部分复制并保存到一个文件中,(带上-showcerts后会返回完整的证书链,涉及到 SSL/TLS 通信的安全性依赖于分层的信任模型,本篇不做解释)通常操作系统已经内置了根证书的信任库,因此大多数情况只要保存第一段即可,或者不添加-showcerts
mkdir -p /root/.certs/
vim ~/.certs/qq_mail_cert.crt #将上述证书主体保存至文件中,如遇无法写入,请先确保所写路径的目录存在
验证证书
openssl x509 -in qq_mail_cert.crt -text -noout#如果保存正常,将会输出类似如下信息:Certificate: Data: Version: 3 (0x2) Serial Number:08:73:88:0b:a8:11:ee:72:45:26:ab:43:91:16:f8:d3 Signature Algorithm: sha256WithRSAEncryptionIssuer: C = US, O = DigiCert Inc, CN = DigiCert Secure Site CN CA G3Validity Not Before: Jul 2 00:00:00 2024 GMTNot After : Jul 2 23:59:59 2025 GMTSubject: C = CN, ST = Guangdong Province, L = Shenzhen, O = Shenzhen Tencent Computer Systems Company Limited, CN = *.mail.qq.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (2048 bit) Modulus:··· ···
配置s-nail使用获取到的证书
#创建一个专门的目录来存放证书,如 /root/.certs (根据系统的实际情况调整路径)mkdir -p /root/.certs
#将存放证书的文件移动到 /root/.certs 目录中mv qq_mail_cert.crt /root/.certs/
让我们回到配置文件的步骤,更新NSS路径
set nss-config-dir=/root/.certs #指定 NSS(Network Security Services)证书数据库的路径
测试发送
echo '邮件内容' | mail -s '邮件主题' xxxxxxxx@qq.com(收件人地址)
自动化获取证书命令
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq_mail_cert.crt #获取证书并自动保存至~/.certs/qq_mail_cert.crt
certutil 证书管理工具的简单介绍
上文我们只讲了如何获取证书并保存为 .crt 文件,之后直接让 s-nail 或其他客户端使用这些证书路径,未涉及证书的进一步管理。
接下来我将简单介绍 certutil 工具:用于管理 NSS 证书库(处理 SSL/TLS 证书和加密操作),使用certutil将证书导入 NSS 证书库,应用程序(如 s-nail 或其他基于 NSS 的程序)可以在调用 NSS 库时自动使用这些证书进行加密通信,而不必直接指定 crt 文件的路径。从而够简化多个应用程序对这些证书的使用,增强管理灵活性。
#导入证书到 NSS 证书库:
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq_mail_cert.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq_mail_cert.crt
#这两条命令将 GeoTrust SSL CA 和 GeoTrust Global CA 证书导入 NSS 证书库中,并为其设置信任级别("C,," 表示用于 SSL 客户端认证)。-d 选项指定证书库的路径,-i 选项指定导入的证书文件。#查看 NSS 证书库中的证书:
certutil -L -d /root/.certs #列出 /root/.certs 目录下 NSS 证书库中的所有证书。#进一步导入特定的证书:
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq_mail_cert.crt
#这行命令将 GeoTrust SSL CA - G3 证书导入 NSS 证书库,并设置信任级别为 Pu,Pu,Pu(表示对 SSL 客户端和服务器均完全信任)。