Apache JAMES:Gmail说从我的服务器发送的电子邮件没有TLS加密



当我从Apache JAMES SMTP服务器向我的Gmail地址发送电子邮件时,Gmail会收到电子邮件,但显然不是通过TLS加密。Gmail 会显示红色锁图标,上面写着"[我的服务器] 未加密此邮件"。电子邮件标题也不指示通过 TLS 接收。

我已经为我的Apache JAMES SMTP服务器打开了TLS。这是我的smtpserver的相关部分.xml:

<tls socketTLS="false" startTLS="true">
<keystore>[my-jks-file]</keystore>
<secret>[my-jks-password]</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>

我也尝试过使用

<tls socketTLS="true" startTLS="false">

相反,但它没有解决问题。

当我尝试使用 https://www.checktls.com/TestReceiver 测试我的Apache JAMES电子邮件地址时,报告显示所有内容(包括TLS)都通过了。使用 https://mxtoolbox.com/diagnostic.aspx 测试我的服务器域也显示TLS已通过。

为什么电子邮件没有加密?

我也遇到了同样的问题,试图将电子邮件从电子邮件客户端通过Apache James推送到Gmail上,而Gmail报告说它们没有被安全地接收。

根据我对Apache James文档和源代码的理解,RemoteDelivery mailet负责向接收电子邮件服务器发送电子邮件。 https://james.apache.org/server/3/dev-provided-mailets.html 文档和 RemoteDelivery.java源代码说 RemoteDelivery 包含两个属性:

  • startTLS:一个布尔值(真/假),指示在发出任何登录命令之前,是否使用 STARTTLS 命令(如果服务器支持)将连接切换到受 TLS 保护的连接。默认值为假。
  • sslEnable:一个布尔值(真/假),指示是否使用 SSL 进行连接并使用 SSL 端口,除非显式覆盖。默认值为假。

startTLS似乎是这里的关键,当詹姆斯协商与Gmail服务器的连接时,如果Gmail允许,它应该尝试将不安全的连接升级到安全连接。

我正在运行Apache James 2.3.2和/path/to/James/apps/james/SAR。INF/conf.xml 文件,在"删除传递"部分下:

<mailet match="All" class="RemoteDelivery"> 

我尝试将属性设置为 true

<startTLS>true</startTLS>
<sslEnable>true</sslEnable>

但是,詹姆斯仍然没有向Gmail发送安全的电子邮件。所以我没有想法。

仅供参考,在Apache James版本3.4中,远程交付配置似乎已重新定位到conf/mailcontainer.xml文件。

SocketTLS 和 startTLS 只影响 James 入站邮件的加密方式,而 James 发送的邮件的加密会影响 gmail 红锁的加密,需要额外配置。测试结果邮件在 Gmail 中传递:"安全性:标准加密 (TLS)"。我的配置(Apache James版本:2.3.2)是这样的:

<mail.smtp.port>25</mail.smtp.port>
<mail.smtp.starttls.enable>true</mail.smtp.starttls.enable>
<mail.smtp.auth>false</mail.smtp.auth>
<mail.smtps.auth>false</mail.smtps.auth>
<mail.smtp.socketFactory.port>25</mail.smtp.socketFactory.port>
<mail.smtp.socketFactory.fallback>false</mail.smtp.socketFactory.fallback>
<mail.smtps.ssl.protocols>TLSv1.2</mail.smtps.ssl.protocols>
<mail.transport.protocol>smtp</mail.transport.protocol>
<mail.smtps.port>465</mail.smtps.port>
<mail.smtps.ssl.enable>true</mail.smtps.ssl.enable>
<mail.smtps.starttls.enable>false</mail.smtps.starttls.enable>
<mail.smtps.socketFactory.port>465</mail.smtps.socketFactory.port>
<mail.smtps.socketFactory.class>javax.net.ssl.SSLSocketFactory</mail.smtps.socketFactory.class>
<mail.smtps.socketFactory.fallback>false</mail.smtps.socketFactory.fallback>

就像在Christos的答案中设置java代码中的属性一样:Java邮件无法使用tls或ssl连接到smtp。

根据上面的答案和/或评论,如果有人在Apache James 3.7.0中遇到这个问题,你可以尝试在mailetcontainer中搜索远程交付.xml并添加:

<startTLS>true</startTLS>

此外,我目前不知道在传出电子邮件加密时是否需要添加<sslEnable>true</sslEnable>,Gmail在没有此设置的情况下知道这一点。如果您知道应该设置它,您可以为任何需要知道的人解释原因。我现在没有设置这个,因为发送带有<sslEnable>true</sslEnable>的电子邮件似乎比删除此设置慢(我觉得这样)。

最新更新