IBM Support

IBM i 安全邮件配置和常见故障排除方法

Technical Blog Post


Abstract

IBM i 安全邮件配置和常见故障排除方法

Body

IBM i 安全邮件配置和常见故障排除方法

简介:电子邮件是现在普遍使用的一种通信方式,为了提高通信过程中的安全并且保护邮件内容不被泄露,IBM i SMTP 增加了对TLS的支持, 通过此技术保障了邮件通信过程中的安全和数据的不被篡改。本文提供了IBM i V7R2及以上版本安全邮件的配置方法和常见故障排除方法。

术语缩写:

SMTP:Simple Mail Transfer Protocol

TLS: Transport Layer Security

DCM: Digital Certificate Manager

CA: Certification Authority

PCOMM:IBM Personal Communications

SMTP TLS配置清单

在配置安全的邮件服务之前,需要确保SMTP服务器是正常工作的,并且已经创建了邮件帐户,关于SMTP邮件服务器的基本配置方法,可以参考以下IBM知识中心的链接来配置:

IBM Knowledge Center Configuring e-mail

注:以下的配置步骤是IBM i 的SMTP服务器最基本的安全邮件配置方法,其它配置可以查看IBM知识中心相关页面。

  1. 打开SMTP服务器TLS功能,可以选择以下三条命令之一来完成:

CHGSMTPA ALWAUTH(*LCLRLY) 

CHGSMTPA ALWAUTH(*RELAY) 

CHGSMTPA ALWAUTH(*ANONYM) 

当ALWAUTH设置成*LCLRLY,服务器将对本地和转发的邮件要求使用TLS和认证;如果是*RELAY,邮件服务器只对转发邮件要求使用TLS和认证;当设置成*ANONYM,只是要求使用TLS,不进行认证。

如果是*LCLRLY 或者*RELAY,SMTP服务器就要求认证,需要在SMTP客户端设置此SMTP服务器的登录信息。如果是IBM i邮件服务器,可以参考如下的设置方法,命令中hostname是SMTP服务器的主机名字,username和password是SMTP服务器的登录账户和密码:

ADDSMTPLE TYPE(*HOSTAUTH) HOSTNAME(hostname) USERNAME(username) PASSWORD( password )                                                                         

  1. 通过DCM配置SMTP服务器证书的步骤如下,登录DCM的方法具体可参考如下链接:

DCM Knowledge Center.

    1. 登录到DCM,点击“Select a Certificate Store”,然后选择”*SYSTEM”。 注:如果没有*SYSTEM这个选项,需要提前创建*SYSTEM 证书仓库,请参考DCM Knowledge Center;
    2. 输入证书仓库的密码,然后继续;
    3. 在左上界面打开“Fast Path”界面,依次选择“Work with server applications”->“IBM i TCP/IP SMTP Server”->”Work with Application;
    4. 点击“Update Certificate Assignment“,选择一个证书,分配到SMTP服务器,如果没有证书,需要创建一个。
  1. 如果邮件客户端没有包含服务器的CA证书,就需要导出CA 证书到邮件客户端,如果是IBM i 邮件客户端, 在DCM 的界面上选择“Work with CA certificates“,此菜单下有导入和导出CA证书的功能,如果是其它邮件客户端,根据相应的产品说明导入CA证书。
  2. 重启SMTP服务
    1. 结束SMTP: ENDTCPSVR *SMTP
    2. 结束 MSF: ENDMSF OPTION(*IMMED)
    3. 启动 SMTP: STRTCPSVR *SMTP
    4. 启动 MSF: STRMSF

到此为止,基本的SMTP TLS配置已完成,下面将介绍几种SMTP TLS常用的故障排除工具。

 

故障排除工具包:

  1. WRKSMTPEMM查看邮件发送状态

WRKSMTPEMM是IBM i V7R2及以上版本增加的一个新功能,该功能提供了非常直观和便捷的方式用于浏览邮件的发送和接收状态,以下是IBM i 客户端上的使用案例:

  1. 登录邮件客户端的PCOMM(或其它IBM  i 客户端软件);
  2. 通过以下的命令,改变邮件保留时间到1200秒,并且打开日志功能;

CHGSMTPA KEEPUNTIL(1200)  JOURNAL(*YES);

  1. 使用此命令SNDSMTPEMM 发送邮件到另外的邮件服务器的帐户;
  2. 使用 WRKSMTPEMM QUEUE(*ALL),在需要查看的邮件上选择 “8”来查看邮件发送详细过程记录;
  3. 检查详细的邮件信息,查找失败原因。
  1. 使用TELNET命令获得SMTP服务器是否支持TLS

如果你想知道SMTP服务器是否支持了TLS,可以使用Telnet和EHLO命令来查看。

  1. Telnet到SMTP服务器的端口上,比如 “telnet  rcv1.test.com 25
  2. 如果SMTP服务器是工作状态的,就会响应“220 rcv1.test.com server ready“,此时可以回复”ehlo snd1.test.com“ 命令
  3. SMTP服务器会发出本服务器的支持列表,比如 “8BITMIME”,”STARTTLS等等

图1:TELNET 到SMTP服务器端

 

  1. 抓包和分析工具

Wireshark是一个开源的TCP/IP抓包和通信包分析软件,可以从他们的官网得到该软件

http://www.wireshark.org/

Wireshark在SMTP服务器或者客户端都可以使用,只要操作系统支持该软件即可,抓包之后可以直接使用Wireshark分析。

图2:Wireshark分析界面

如果SMTP服务器和客户端都是IBM i,可以使用“TRCCNN”命令抓包,通过FTP下载该抓包文件到本地机器,然后通过Wireshark分析。

IBM i抓包工具使用方法:

  1. TRCCNN SET(*ON) TRCTYPE(*IP)
  2. 重现问题
  3.  TRCCNN SET(*OFF) OUTPUT(*STMF) TOSTMF('/home/SMTP.pcap')
  1. OpenSSL

OpenSSL是一个开放源代码的软件库包,应用程序可以使用它来进行安全通信,同时也可以用来做安全通信中的故障排除工具, 该软件包可以从OpenSSL官网得到。

通过OpenSSL s_client功能可以打开到某一服务器的安全连接,并且可以通过服务器返回消息内容确定服务器提供的安全服务属性或者显示可能失败的原因,例如:

如果SMTP服务器使用了STARTTLS(显式TLS),可以在SMTP客户端上使用如下的命令查看:

OpenSSL s_client -crlf -connect hostname:25 -starttls smtp -CAfile ServerCA

如果SMTP服务器使用了指定安全端口465(隐式TLS),可以在SMTP客户端上使用如下的命令查看:

OpenSSL s_client -connect hostname:465 -CAfile ServerCA

注:hostname是SMTP服务器的主机名字或IP地址,ServerCA是SMTP服务器的CA证书文件,在使用上述命令前,需要将CA证书文件传送到SMTP客户端。

对于成功的安全协商,OpenSSL会输出证书信息,安全协商信息等,如下图3:

图3: OpenSSL成功的协商信息

 

 

几种常用的故障排除工具介绍到这里,下面将进入故障原因分析环节。

 

常见SMTP TLS失败案例及解决方案:

下面是各种常见的故障的描述,具体失败原因和定位步骤。

案例1:邮件发送成功,但是没有通过TLS发送

在这种条件下,邮件成功发送,但是通过WRKSMTPEMM或者抓包工具看到没有使用TLS

如果SMTP客户端是IBM i,WRKSMTPEMM中显示

在下面图4中,SMTP服务器没有发送STARTTLS,原因是服务器没有打开TLS功能

其它客户端使用Telnet命令看图5 的结果

Telnet  rcv1.test.com  25

       如果服务器正常响应,输入“ehlo cient hostname”,具体命令,查看图5

        图5: TELNET显示服务器不支持TLS

在上面的图中,没有看到服务器发出STARTTLS消息,同样可以说明SMTP服务器没有打开TLS功能。

案例1的解决方案:

使用“SMTP TLS配置清单”中第一个方法打开服务器的TLS功能。

案例2:邮件发送成功,没有使用TLS,但是SMTP服务器已经发送STARTTLS

这个案例和上面的看起来有点类似,邮件同样成功发送,没有使用TLS,通过WRKSMTPEMM或者TELNET等工具查看到服务器TLS功能已经打开。此种情况,可以使用WRKSMTPEMM或者Wireshark来分析。如果SMTP客户端是IBM i并且版本是V7R2及以上,可以使用WRKSMTPEM命令查看原因;如果是其它类型的邮件客户端,可以使用Wireshark抓包并分析。下图显示的原因是SMTP客户端忽略了服务器端的TLS能力,直接使用了非TLS进行对话,并且服务器没有强制要求使用TLS。在下图6中,可以看到SMTP客户端没有响应服务器的STARTTLS,直接回复 “MAIL FROM…” 消息,

图6:SMTP客户端不支持TLS的Wireshark追踪包

案例2的解决方案:

这种情况下,主要原因是SMTP客户端不支持TLS,可以考虑换成其它支持TLS的客户端。

案例3: 安全邮件发送失败,显示“TLS not available”

当安全邮件发送失败显示的原因是“TLS not available”或者“no peer certificate available“,这意味着SMTP服务器的TLS没有被完全配置好,最可能的原因是服务器没有配置证书。

WRKSMTPEMM,OpenSSL可以分别看到下面的两种提示,

图7:WRKSMTPEMM显示的没有证书

图8:使用OpenSSL命令:OpenSSL s_client -crlf -connect hostname:25 -starttls smtp

 

案例3解决方案:按照“SMTP TLS配置清单”中,第2条的方案配好服务器证书。

案例4:安全邮件发送失败,证书不被信任

如果在工具中看到有类似“certificate not trusted”或者“Secure socket init failed:6000…”,主要的原因是服务器的证书的CA没有加入到SMTP客户端的信任清单中。

WRKSMTPEMM中将会提示 Secure socket init failed:6000(Certificate is not signed by a trusted certificate authority),Wireshark中的提示如下图9:

9:CA不被信任

案例4解决方案:导入SMTP服务器的证书的CA到客户端的证书库中并且信任该CA,可参考按照“SMTP TLS配置清单”中,第3条.

案例5:认证失败

当在故障排除工具中看到“530 authentication required”时表明,SMTP服务器要求认证,SMTP客户端需要提供正确的登录SMTP服务器的帐户信息,如果没有或者登录信息不正确,邮件发送就会失败。下图是WRKSMTPEMM的消息记录,Wireshark中同样可以看到类似的消息。

图10:WRKSMTPEMM的认证失败的消息

案例5解决方案:如果客户端是IBM i,可以使用ADDSMTPLE配置主机登录信息,具体参考“SMTP TLS配置清单”中第1条,如果是其它系统,可参考相应产品配置方案

案例6;协商失败

如果前面的问题都已经解决,但是邮件仍然发送失败,可以考虑查看TLS协商是否成功,比如是否有匹配的TLS版本、加密组件或者是签名算法,对此类问题,OpenSSL是个很好的工具。

下面这个例子是一个不匹配的TLS版本导致的协商失败,SMTP的客户端和服务器将会优先尝试最高版本的TLS,如果双方没有对应的TLS版本,协商就会失败。比如SMTP服务器最高支持到TLS1.1,而客户端要求最低使用TLS1.2,客户端和服务器就不能建立成功的 TLS连接。下面的例子是客户端指定使用TLS1.2版本:

opnessl s_client -crlf -connect xxx:25 -starttls smtp –tls1_2

如果服务器端不支持TLS1.2,协商失败,显示的原因为“wrong version number“

图11:TLS版本不一致,协商失败

opnessl s_client命令中还包含很多参数,不但可以指定协商的版本,还可以指定加密算法的类型。具体可以参考OpenSSL官网。

案例6解决方案:改变客户端或者服务器的支持的版本,确保他们有匹配的TLS版本

结论:本文介绍了4个故障排除工具和6种常见的失败案例的解决方法,阅读本文后,能快速解决安全SMTP的一些基本问题,如果遇本文未提及问题,你也可以利用这些工具找出具体原因

 

参考文章:

DCM知识中心:DCM Knowledge Center

IBM  i SMTP 知识中心:E-mail Knowledge Center

 

 

 

 

 

[{"Business Unit":{"code":"BU009","label":"Systems - Cognitive"}, "Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":""}]

UID

ibm11144336