在本教程中,您将学习如何在 Courier IMAP 服务器上安装 SSL 证书。您需要将证书、私钥和 CA 证书链合并到一个 PEM 文件中,将 Courier 的 TLS_CERTFILE 设置指向该文件,然后重启服务,使 IMAPS 和 POP3S 提供新证书。
在 Courier IMAP 服务器上生成 CSR 代码
如果您已经生成了 CSR 并收到了 SSL 文件,可跳过第一部分,直接进入安装步骤。
CSR(证书签名请求)是一段包含您联系信息的编码文本。您创建它并发送给证书颁发机构(CA)以通过 SSL 验证。生成 CSR 的同时也会创建对应的私钥,该私钥留存在您的服务器上,安装时需要用到。您有两种方式可以选择:
- 使用我们的CSR 生成器自动创建 CSR。
- 参照我们的分步教程,了解如何在 Courier IMAP 服务器上生成 CSR。
使用任意纯文本编辑器打开 CSR 文件。下单时,请复制整个代码块,包括 BEGIN 和 END 行。请妥善保管私钥文件:安装时您需要将它合并到 PEM 文件中。
在 Courier IMAP 服务器上安装 SSL 证书
通过验证后,CA 会向您发送一封包含 SSL 文件的 ZIP 压缩包邮件:主(服务器)证书和一个或多个中间(CA)证书。请在您的服务器上解压该压缩包,然后按以下步骤操作。
第一步:将证书、证书链和密钥合并到一个 PEM 文件中
Courier 从 TLS_CERTFILE 中设置的单个 PEM 文件中读取证书和私钥。请按以下顺序连接文件:先是您的服务器证书,然后是 CA 中间证书链,最后是您的私钥。在存放解压文件的目录中,运行:
cat yourdomain.crt yourdomain.ca-bundle yourdomain.key > imapd.pem
sudo mv imapd.pem /etc/courier/imapd.pem
sudo chmod 600 /etc/courier/imapd.pem
如果您的 CA 提供的中间证书是多个独立文件,而不是单个 .ca-bundle 文件,请将每个证书依次列在证书和密钥之间。完成后的 PEM 文件应类似如下:
-----BEGIN CERTIFICATE-----
(the text of your primary SSL certificate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(the text of the intermediate / CA chain certificate)
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
(the text of your private key)
-----END PRIVATE KEY-----
较旧的密钥可能标记为 BEGIN RSA PRIVATE KEY,而不是 BEGIN PRIVATE KEY;两者都可以。密钥不得使用密码短语加密,因为 Courier 加载密钥时不会提示输入密码。由于该 PEM 文件包含私钥,因此必须仅允许 root 读取(如上文的 chmod 600)。
如果您希望将私钥单独保存在其自己的文件中,可以在 PEM 文件中不包含密钥,并在配置文件中将 TLS_PRIVATE_KEYFILE 设置为该密钥的路径(第二步)。如果密钥已经嵌入在 TLS_CERTFILE 中,则单独的密钥文件是可选的。
第二步:将 Courier 指向您的 PEM 文件
打开 Courier 用于 SSL 上的 IMAP 的配置文件。路径取决于您的发行版:通常是 /etc/courier/imapd-ssl,某些系统上则是 /usr/lib/courier-imap/etc/imapd-ssl。使用文本编辑器编辑该文件,例如:
sudo nano /etc/courier/imapd-ssl
找到 TLS_CERTFILE 一行(如果没有请添加),将其设置为您的 PEM 文件:
TLS_CERTFILE=/etc/courier/imapd.pem
如果您在第一步中将私钥单独保存,还需要设置其路径:
TLS_PRIVATE_KEYFILE=/etc/courier/imapd.key
在编辑此文件时,请顺便加强 TLS 设置。删除或注释掉任何强制使用过时协议的行,例如 TLS_PROTOCOL=SSL3:SSLv3 以及早期的 TLS 1.0 和 1.1 版本均不安全,应当禁用。将 Courier 设置为要求使用 TLS 1.2 或更高版本。TLS_PROTOCOL 适用于专用的 SSL 端口(IMAPS),而 TLS_STARTTLS_PROTOCOL 适用于标准端口上的 STARTTLS:
TLS_PROTOCOL=TLSv1.2
TLS_STARTTLS_PROTOCOL=TLSv1.2
TLSv1.2 这个值表示“TLS 1.2 或更高版本”,因此当您的 OpenSSL 版本支持时,仍会协商使用 TLS 1.3。您无需设置 TLS_TRUSTCERTS 就可以向邮件客户端提供您的证书;该变量仅用于验证客户端证书。
Debian、Ubuntu 和 Devuan 用户注意:在这些发行版上,Courier 是基于 GnuTLS 而非 OpenSSL 构建的,TLS_PROTOCOL 不会生效。请改用 TLS_PRIORITY 来设置协议下限,例如 TLS_PRIORITY=NORMAL:-VERS-TLS1.0:-VERS-TLS1.1(这样只保留 TLS 1.2 和 1.3)。两种构建版本中的 TLS_CERTFILE 和上面合并的 PEM 文件是相同的,因此证书安装本身没有变化。
关于 Diffie-Hellman 参数的说明:当前版本的 Courier 软件包会通过 mkdhparams 脚本和定期的 cron 任务自动生成 DH 参数文件,并从 TLS_DHPARAMS 中读取,因此对于标准安装,您不再需要手动创建该文件。旧版的 TLS_DHCERTFILE 指令已在 Courier 4.15 中移除。如果您的服务器上从未运行过 mkdhparams,请手动运行一次以创建该文件。
如果您还需要提供 POP3S 服务(端口 995),请打开 POP3 配置文件 /etc/courier/pop3d-ssl(或 /usr/lib/courier-imap/etc/pop3d-ssl),并应用相同的设置。您可以重用同一个 PEM 文件,或者创建一个专门的 /etc/courier/pop3d.pem,内容相同:
TLS_CERTFILE=/etc/courier/pop3d.pem
TLS_PROTOCOL=TLSv1.2
TLS_STARTTLS_PROTOCOL=TLSv1.2
第三步:重启 Courier
重启 Courier,使其加载新证书。在大多数基于 systemd 的发行版上,请重启 SSL 服务和身份验证守护进程:
sudo systemctl restart courier-imap-ssl
sudo systemctl restart courier-pop3-ssl
sudo systemctl restart courier-authdaemon
部分软件包提供的是单一的合并单元。如果上述服务未找到,请尝试:
sudo systemctl restart courier
在不使用 systemd 的系统上,请通过 Courier 自带的脚本进行重启:
/usr/lib/courier-imap/libexec/imapd-ssl.rc restart
/usr/lib/courier-imap/libexec/pop3d-ssl.rc restart
服务成功重启后,您的新 SSL 证书将立即生效,适用于 IMAPS(端口 993)和 POP3S(端口 995),以及端口 143 和 110 上的 STARTTLS。
测试您的 SSL 安装
安装完成后,请确认证书是否正确提供。在终端中,打开一个到 IMAPS 端口的 TLS 连接,读取服务器提供的证书:
openssl s_client -connect mail.yourdomain.com:993 -servername mail.yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -subject -dates
对于 POP3S,请使用端口 995。若要在标准 IMAP 端口上测试 STARTTLS,请运行:
openssl s_client -connect mail.yourdomain.com:143 -starttls imap
第一条命令将连接传输给 openssl x509,并打印出颁发者、主题(通用名称)和有效期,以便您确认所提供的证书正确无误。STARTTLS 命令显示完整的握手过程:请检查颁发者和证书链是否正确,并确认末尾出现 Verify return code: 0 (ok)。如需获取有关您的证书及其配置的完整报告,请使用我们的 SSL Checker。
常见问题
先是服务器证书,然后是中间(CA)证书链,最后是私钥,全部放在一个 PEM 文件中。Courier 从 TLS_CERTFILE 中读取此文件,并将完整证书链提供给客户端。私钥必须是未加密的(不能设置密码短语)。
SSL 上的 IMAP 配置文件为 /etc/courier/imapd-ssl,SSL 上的 POP3 配置文件为 /etc/courier/pop3d-ssl。在某些发行版上,这些文件位于 /usr/lib/courier-imap/etc/ 目录下。明文端口的 STARTTLS 设置则在对应的 imapd 和 pop3d 文件中。
对于普通安装,不需要手动操作。当前版本的 Courier 软件包会通过 mkdhparams 脚本自动生成 DH 参数文件,并按计划刷新,从 TLS_DHPARAMS 中读取。旧版的 TLS_DHCERTFILE 指令已在 Courier 4.15 中移除。只有在尚未存在 DH 文件的情况下,才需要手动运行一次 mkdhparams。
删除任何 TLS_PROTOCOL=SSL3 这一行,并在 imapd-ssl 和 pop3d-ssl 中设置 TLS_PROTOCOL=TLSv1.2。为 STARTTLS 端口设置 TLS_STARTTLS_PROTOCOL=TLSv1.2。TLSv1.2 这个值表示“1.2 或更高版本”,因此当您的 OpenSSL 支持时,会自动使用 TLS 1.3。
使用 OpenSSL 连接到邮件端口,读取所提供的证书:对于 IMAPS,使用 openssl s_client -connect mail.yourdomain.com:993;若在端口 143 上测试,则添加 -starttls imap。确认颁发者和证书链正确,且输出显示 Verify return code: 0 (ok)。


