系统管理指南:网络服务

sendmail 版本 8.13 支持运行 SMTP 时使用 TLS

从 Solaris 10 1/06 发行版开始,SMTP 服务器和客户机之间的通信通常不受任何一端的控制或信任。由于缺少安全性,第三方可能会监视甚至修改服务器与客户机之间的通信。要解决此问题,在 sendmail 版本 8.13 中,SMTP 可以使用传输层安全性 (Transport Layer Security, TLS)。SMTP 服务器和客户机的这种扩展服务可提供以下功能:


注 –

TLS 的实现基于安全套接字层 (Secure Sockets Layer, SSL) 协议。


STARTTLS 是使用 TLS 启动安全 SMTP 的 SMTP 关键字。此安全连接可能建立在两台服务器之间或一台服务器与一台客户机之间。安全连接定义如下:

当客户机发出 STARTTLS 命令时,服务器将使用以下各项之一来响应:

220 响应要求客户机启动 TLS 协商。501 响应指明客户机未正确发出 STARTTLS 命令。发出 STARTTLS 时未使用任何参数。454 响应需要客户机应用规则集值来确定是接受还是维护连接。

请注意,要维护 Internet 的 SMTP 基础结构,公共使用的服务器决不能要求 TLS 协商。但是,专用服务器可能会要求客户机执行 TLS 协商。在这类情况下,服务器会返回以下响应:


530 Must issue a STARTTLS command first

530 响应会指示客户机发出 STARTTLS 命令,以建立连接。

如果不满足身份验证和保密性的级别,服务器或客户机可以拒绝连接。同样,由于大多数 SMTP 连接都不安全,因此服务器和客户机可能会保留不安全的连接。保留还是拒绝连接由服务器和客户机的配置来确定。

缺省情况下,不支持在运行 SMTP 时使用 TLS。SMTP 客户机发出 STARTTLS 命令时,将启用 TLS。必须先设置允许 sendmail 使用 TLS 的证书,然后 SMTP 客户机才能发出此命令。请参见如何设置 SMTP 以使用 TLS。请注意,此过程包括定义新的配置文件选项和重新生成 sendmail.cf 文件。

用于在运行 SMTP 时使用 TLS 的配置文件选项

下表介绍了用于在运行 SMTP 时使用 TLS 的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一:

表 14–13 用于在运行 SMTP 时使用 TLS 的配置文件选项

选项 

说明 

CACertFile

m4 名称: confCACERT

参数: filename

缺省值:未定义 

用于标识包含一个 CA 证书的文件。 

CACertPath

m4 名称: confCACERT_PATH

参数: path

缺省值:未定义 

用于标识包含 CA 证书的目录的路径。 

ClientCertFile

m4 名称: confCLIENT_CERT

参数: filename

缺省值:未定义 

用于标识包含客户机证书的文件。请注意,此证书在 sendmail 用作客户机时使用。

ClientKeyFile

m4 名称: confCLIENT_KEY

参数: filename

缺省值:未定义 

用于标识包含属于客户机证书的私钥的文件。 

CRLFile

m4 名称: confCRL

参数: filename

缺省值:未定义 

用于标识包含证书撤销状态的文件,该文件用于 X.509v3 身份验证。 

DHParameters

m4 名称: confDH_PARAMETERS

参数: filename

缺省值:未定义 

用于标识包含 Diffie-Hellman (DH) 参数的文件。 

RandFile

m4 名称: confRAND_FILE

参数:file:filenameegd:UNIX socket

缺省值:未定义 

使用 file: 前缀标识包含随机数据的文件,或使用 egd: 前缀标识 UNIX 套接字。请注意,由于 Solaris OS 支持随机数生成器设备,因此无需指定此选项。请参见 random(7D) 手册页。

ServerCertFile

m4 名称: confSERVER_CERT

参数: filename

缺省值:未定义 

用于标识包含服务器证书的文件。此证书在 sendmail 用作服务器时使用。

Timeout.starttls

m4 名称: confTO_STARTTLS

参数: amount of time

缺省值: 1h

设置 SMTP 客户机等待 STARTTLS 命令的响应的时间。

TLSSrvOptions

m4 名称: confTLS_SRV_OPTIONS

参数:V

缺省值:未定义 

用于确定服务器是否向客户机请求证书。如果此选项设置为 V,则不执行客户机验证。

要使 sendmail 支持 SMTP 使用 TLS,必须定义以下选项:

不需要定义其他选项。

用于在运行 SMTP 时使用 TLS 的宏

下表介绍了 STARTTLS 命令使用的宏。

表 14–14 用于在运行 SMTP 时使用 TLS 的宏

宏 

说明 

${cert_issuer}

保存证书颁发机构 (certification authority, CA)(证书签发者)的标识名 (distinguished name, DN)。 

${cert_subject}

保存名为证书主题的证书 DN。

${cn_issuer}

保存 CA 的公用名称 (common name, CN),即证书签发者

${cn_subject}

保存名为证书主题的证书 CN。

${tls_version}

保存用于连接的 TLS 的版本。 

${cipher}

保存用于连接的一组加密算法(名为加密套件)。

${cipher_bits}

以位为单位保存用于连接的对称加密算法的密钥长度。 

${verify}

保存所提供证书的验证结果。可能值如下所示: 

  • OK-验证成功。

  • NO-未提供证书。

  • NOT-未请求证书。

  • FAIL-无法验证提供的证书。

  • NONE-尚未执行 STARTTLS

  • TEMP-出现临时错误。

  • PROTOCOL-出现 SMTP 错误。

  • SOFTWARESTARTTLS 握手失败。

${server_name}

保存当前具有外出 SMTP 连接的服务器的名称。 

${server_addr}

保存当前具有外出 SMTP 连接的服务器的地址。 

用于在运行 SMTP 时使用 TLS 的规则集

下表介绍了一些规则集,用于确定应接受、继续还是拒绝使用 TLS 的 SMTP 连接。

表 14–15 用于在运行 SMTP 时使用 TLS 的规则集

规则集 

说明 

tls_server

用作客户机时,sendmail 使用此规则集来确定 TLS 当前是否支持该服务器。

tls_client

用作服务器时,sendmail 使用此规则集来确定 TLS 当前是否支持该客户机。

tls_rcpt

此规则集要求验证收件人的 MTA。此收件人限制可完全避免 DNS 电子欺骗等攻击。 

TLS_connection

此规则集针对当前 TLS 连接的实际参数检查由访问映射的 RHS 指定的要求。 

try_tls

sendmail 使用此规则集来确定连接到其他 MTA 时使用 STARTTLS 的可行性。如果 MTA 不能正确实现 STARTTLS,则不使用 STARTTLS

有关更多信息,请参见以下内容:

与运行 SMTP 时使用 TLS 相关的安全注意事项

作为用于定义在 Internet 中运行的邮件程序的标准邮件协议,SMTP 不是一种端对端机制。由于此协议限制,通过 SMTP 的 TLS 安全性不包括邮件用户代理。邮件用户代理用作用户与邮件传输代理(如 sendmail)之间的接口。

另外,邮件也可以在多台服务器之间路由。为了实现完整的 SMTP 安全性,整个 SMTP 连接链必须具有 TLS 支持。

最后,还必须考虑在每对服务器之间或客户机和服务器对之间的协商身份验证和保密性的级别。有关更多信息,请参见《系统管理指南:安全性服务》中的“验证服务”