sendmail 版本 8.13 支持运行 SMTP 时使用 TLS
SMTP 服务器和客户机之间的通信通常不受任何一端的控制或信任。由于缺少安全性,第三方可能会监视甚至修改服务器与客户机之间的通信。在 sendmail 8.13 版中,SMTP 可以使用传输层安全 (Transport Layer Security, TLS) 来解决此问题。SMTP 服务器和客户机的这种扩展服务可提供以下功能:
Internet 中专用的、经过验证的通信
保护不受窃听者和攻击者的攻击
注 - TLS 的实现基于安全套接字层 (Secure Sockets Layer, SSL) 协议。
当客户机发出 STARTTLS 命令时,服务器将使用以下各项之一来响应:
220 Ready to start TLS
501 Syntax error (no parameters allowed)
454 TLS not available due to temporary reason
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 的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一:
O OptionName=argument # for the configuration file
-O OptionName=argument # for the command line
define(`m4Name',argument) # for m4 configuration
表 3-11 用于在运行 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:filename 或 egd:UNIX socket 缺省值:未定义 使用 file: 前缀标识包含随机数据的文件,或使用 egd: 前缀标识 UNIX 套接字。请注意,由于 Oracle 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,则不执行客户机验证。
|
|
不需要定义其他选项。
用于在运行 SMTP 时使用 TLS 的宏
下表介绍了 STARTTLS 命令使用的宏。
表 3-12 用于在运行 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 错误。
SOFTWARE-STARTTLS 握手失败。
|
${server_name}
| 保存当前具有外出 SMTP 连接的服务器的名称。
|
${server_addr}
| 保存当前具有外出 SMTP 连接的服务器的地址。
|
|
用于在运行 SMTP 时使用 TLS 的规则集
下表介绍了一些规则集,用于确定应接受、继续还是拒绝使用 TLS 的 SMTP 连接。
表 3-13 用于在运行 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。
|
|
有关更多信息,请参见 http://www.sendmail.org/m4/starttls.htmlhttp://www.sendmail.org/m4/starttls.html。
与运行 SMTP 时使用 TLS 相关的安全注意事项
作为用于定义在 Internet 中运行的邮件程序的标准邮件协议,SMTP 不是一种端对端机制。由于此协议限制,通过 SMTP 的 TLS 安全性不包括邮件用户代理。邮件用户代理用作用户与邮件传输代理(如 sendmail)之间的接口。
另外,邮件也可以在多台服务器之间路由。为了实现完整的 SMTP 安全性,整个 SMTP 连接链必须具有 TLS 支持。
最后,还必须考虑在每对服务器之间或客户机和服务器对之间的协商身份验证和保密性的级别。有关更多信息,请参见在 Oracle Solaris 11.2 中管理安全 Shell 访问
中的第 1 章 使用安全 Shell(任务)。