はじめに
SNA 7.4 以降では SMTP でのメール送信で TLS を使用する場合に、メールサーバが提示する証明書の検証を行っています。証明書の検証を成功させるためには、あらかじめ SNA の Trust Store に必要な証明書をインポートしておく必要があります。
本ドキュメントでは 7.4 における SMTP の設定と証明書の検証に失敗した場合のエラーについて説明します。動作確認には 7.4.2 を使用しました。
SMTP の設定
Postfix
弊社ラボではメールサーバとして Postfix を使用したため、Postfix の設定例を紹介します。Postfix で TLS を有効にするには以下の設定を入れます。指定している server.key と server.crt はSMTPサーバで使用する鍵と証明書です。弊社ラボでは自己署名により生成したものを使用して動作を確認しました。
## main.cf ##
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_cert_file=/etc/postfix/server.crt
smtpd_tls_key_file=/etc/postfix/server.key
SNA に SMTP 設定を投入
SNA からメールを送信するために、Central Management から各アプライアンスに SMTP の設定を投入します。

SNA のオンラインヘルプに記載されている手順では、Trust Store への証明書インポートと SMTP の設定を同時に行っていますが、Trust Store へのインポートを行わなくてもこの設定画面ではエラーは発生しませんのでご注意ください。
Trust Store には、RootCA の証明書から SMTP サーバの証明書までの証明書チェーンを全てインポートします。弊社ラボ環境では自己署名で生成した証明書を使用したため、自己署名の証明書を Trust Store にインポートしました。
証明書のチェックでは、証明書の Subject 内の Common Name と SMTP の FQDN がマッチしているかどうかも確認していますので、SNA における SMTP の設定では SMTPサーバのホスト名として証明書の Common Name を指定します。
Response Management で動作確認
SNA Managern の Response Management では、設定した SMTP の情報を使用してメールの送信テストが実行できます。必要な証明書が Trust Store にインポートされていれば、送信テストは成功します。

証明書の検証に失敗した場合のエラー
SMTPの設定や必要な証明書が Trust Store に入っていなかった場合など、SMTPでの送信に失敗した場合は Response Management で以下のようなエラーとなります。

必要な証明書が Trust Store に入っていない場合は、Response Management のログに以下のようなエラーが記録されます。
## /lancope/var/logs/containers/sw-response-mgmt.log (SNA Manager) ##
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: 20:00:26.994 [sw-response-mgmt-akka.actor.default-dispatcher-31] ERROR c.c.s.rm.action.email.EmailStages - Error sending email
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: javax.mail.MessagingException: Could not convert socket to TLS
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2155)
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:752)
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at javax.mail.Service.connect(Service.java:388)
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at javax.mail.Service.connect(Service.java:246)
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at javax.mail.Service.connect(Service.java:195)
Apr 27 20:00:26 smc742 docker/sw-response-mgmt[1259]: at javax.mail.Transport.send0(Transport.java:254)
Apr 27 20:00:27 smc742 docker/sw-response-mgmt[1259]: at javax.mail.Transport.send(Transport.java:124)
証明書の Common Name と指定した SMTP ホストのミスマッチが原因の場合は、sw-response-mgmt.log に以下のようなエラーが記録されます。
## /lancope/var/logs/containers/sw-response-mgmt.log (SNA Manager) ##
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: javax.net.ssl.SSLPeerUnverifiedException: Certificate for <192.168.0.33> doesn't match common name of the certificate subject: nwsv.tac.cisco.com
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at org.apache.http.conn.ssl.DefaultHostnameVerifier.matchCN(DefaultHostnameVerifier.java:186)
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at org.apache.http.conn.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:133)
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at com.lancope.lib.tls.HostnameVerifyingX509ExtendedTrustManager.checkServerTrusted(HostnameVerifyingX509ExtendedTrustManager.java:171)
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at org.bouncycastle.jsse.provider.ImportX509TrustManager_7.checkServerTrusted(ImportX509TrustManager_7.java:56)
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at org.bouncycastle.jsse.provider.ProvSSLSocketWrap.checkServerTrusted(ProvSSLSocketWrap.java:127)
Apr 27 20:02:11 smc742 docker/sw-response-mgmt[1259]: at org.bouncycastle.jsse.provider.ProvTlsClient$1.notifyServerCertificate(ProvTlsClient.java:360)