使用SSL/TLS在PHP发送电子邮件时

3

我对电子邮件服务器和使用PHP发送电子邮件非常陌生...

在我的服务器上,通过PHP脚本发送的电子邮件是否可以在发送到收件人的邮件服务器之前使用SSL或TLS进行加密?

我需要确保只有预期的收件人才能阅读电子邮件,以防在传输过程中被截取。

我不确定这是否可能,因为收件人的邮件服务器不会知道公钥,那么它如何解密电子邮件呢?

背景是,实际上我并没有为任何人托管电子邮件帐户——所以用户不需要通过我的服务器进行身份验证并下载存储在那里的电子邮件。我只有一个脚本触发从“notifications@danbaylis.com”(这不是服务器上的真实电子邮件地址,因此您无法回复它)发送警报电子邮件到用户的真实电子邮件地址(我的应用程序知道)。我需要一种方法来确保此电子邮件从我的PHP服务器安全地发送到收件人的邮件服务器。

我查看了PHP中的mail()函数以及PHPMailer类,但我不确定如何配置这些方法以安全地发送电子邮件。

所有我的研究都只是展示如何在我的服务器上安装SSL,以便用户可以安全地下载存储在我的服务器上的电子邮件——这不是我想做的。

我正在运行Centos5.7,我相信已经安装了邮件服务器,但我不确定PHP是否默认使用它。

感谢任何帮助!

2个回答

3
您无法保证电子邮件能够被成功发送到收件人的邮箱中。您唯一能掌控的是您的邮件客户端和发件SMTP服务器之间的连接。除此之外,一切都不在您的掌控之中。
如果您需要确保电子邮件的隐私性,那么您需要对电子邮件正文进行加密。您需要的是S/MIME或PGP消息。请注意,这仍然会公开一些信息 - 邮件正文将被加密,但 addressing 信息仍将可读 - 中间邮件服务器仍需知道如何传递邮件。

2
你所寻找的加密类型不是 SSL/TLS,它用于加密客户端(PHP)与 SMTP 服务器之间的传输,并将其发送出去。SSL/TLS 不能保证数据在传输过程中一直加密到最终目的地。事实上,它几乎肯定不会,因为数据在途中通过 SMTP 服务器和交换机进行中继。
相反,你应该寻找 PGP 加密,可以使用 GnuPG 函数 在 PHP 中实现。你必须使用收件人的公钥加密消息。然后只有收件人持有的私钥才能解密并阅读该消息。
要在 mail() 中实现此功能,你需要先加密消息正文,然后将加密的 ASCII 码块作为第三个参数传递给 mail()。消息头不会被加密,只有正文会被加密。 补充说明 大多数银行和医疗服务机构(至少在美国)处理安全信息传输的方式并不是发送电子邮件。相反,必须保密的消息存储在用户的网站“收件箱”中。用户必须通过SSL登录网站才能阅读安全收件箱中的消息。电子邮件仅用于通知用户有新消息等待。

谢谢Michael。所以对于第一部分 - 你是说PHP-> SMTP服务器可能会被加密,但是由于SMTP服务器将电子邮件转发到其最终目的地,因此它可能是明文的,而我无法控制或看到它? - Dan
@DanBaylis 正确的。SSL连接仅在传输到您的出站SMTP服务器时处于活动状态。之后,电子邮件在互联网上传输时是明文的,并且可以被任何看到它或通过途中的交换机进行中继的人读取,就像明信片一样。 - Michael Berkowski
@DanBaylis 对于第二部分——同样正确。您需要保存要发送消息的个人的公钥,以便为他们加密消息。 - Michael Berkowski
好的,明白了,谢谢Michael。非常感谢你的补充说明,我需要重新思考我的整体方法。 - Dan
1
我希望我可以再为附录加上一个 +1 —— 即使是使用非对称加密,你也要将信息的最终安全留给用户。如果他们在关注自己的密钥时不小心(或者他们的电脑被攻击了),那么你的信息的安全性就会消失。唯一能合理保证这些消息私密性的方法就是自己托管它们,并要求足够安全的身份验证机制来查看它们。 - Justin ᚅᚔᚈᚄᚒᚔ
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接