【问题标题】:Sending signed emails using PHP使用 PHP 发送签名的电子邮件
【发布时间】:2011-11-25 12:27:12
【问题描述】:

我想要实现的是能够发送已签名的电子邮件,以便用户的电子邮件客户端将此类邮件显示为受信任的邮件(例如,在 Thunderbird 中,有时此类电子邮件会标有封闭的信封图标)。

我找到了一个 PHPMailer 库,它应该发送签名的电子邮件,但我认为它只是包装了 openssl_pkcs7_sign PHP 函数。我不确定什么是以及如何获取和使用作为函数参数的密钥和证书。有参数:$signcert 和 $privkey。据我了解, $signcert 应该是用于验证消息是否已正确签名的公开证书。 $privkey 是与证书相结合的东西,应该保密并用于签署电子邮件。到目前为止我是正确的吗?

我的问题是如何获得适当的证书。我认为 OpenSSL 允许我生成自己的证书,但这样的证书是否足以满足我的需求?如果是,我如何正确生成它们?我的意思是可能有不同长度的证书和其他可能很重要但我不知道的选项。顺便说一句,我注意到“https”自签名证书会在浏览器中引起警告。邮件也会发生同样的事情吗?在那种情况下,我可能应该从受信任的证书中心购买证书。您能给我建议我应该考虑哪些中心吗?

【问题讨论】:

  • 仅供参考 - 与 HTTPS 不同,安全电子邮件不受普遍支持。这是因为在大多数情况下,相当多的邮件系统不会自动支持它(例如,Outlook 仍然没有启用它)。作为替代方案,您可能会查看Hushmail 之类的东西,它提供了用于始终如一地完成此任务的中介系统。但是,请考虑,如果您将任何邮件发送到服务器,然后只能由该服务器(而不是用户的个人证书)解密,那么它本质上是不安全的。

标签: php email openssl phpmailer sign


【解决方案1】:

我认为 OpenSSL 允许我生成自己的证书,但这样的证书是否足以满足我的需求?

我们不知道您的需求是什么。

证书本身对于消息的签名是无用的。该值来自该证书本身(可验证地)由发送者和接收者都可接受的第三方验证。第 3 方是证书颁发机构(例如 Thawte、Verisign 等),尽管在组织内提供您自己的 CA 可能就足够了。 OpenSSL 文档详细说明了如何创建您自己的 CA 证书,您可以使用它来签署其他证书。

在你能够实现任何代码之前,你还有很长的学习旅程——你可能比从 openssl howto 和 x509 cerificates howto 开始做得更糟。

【讨论】:

  • 只是想知道,您是否知道任何真正有助于解释不同地穴技术(最好是可视化)的好书?我一直在努力提高我的理解力,但我只是没有找到我想要的东西。
【解决方案2】:

这里 [1] 暗示用于签署电子邮件的证书必须由证书颁发机构颁发(因此电子邮件客户端不会发出任何警告)。可以在此处找到一些颁发免费证书的机构列表:[2]。我选择的那个通过将证书直接安装到 Web 浏览器来提供证书。所以要做更多的事情,它应该被导出。流行的格式是*.p12,可以存储公钥和私钥。但似乎使用 PHP 函数 openssl_pkcs7_sign() 并将其参数指向具有两个证书的文件不起作用 - OpenSSL 返回模棱两可的错误 error:0906D06C:PEM routines:PEM_read_bio:no start line。分离密钥后(使用 OpenSSL)签名工作正常。

顺便说一句,尽管 PHPMailer 应该能够发送电子邮件,但它的当前版本不起作用。邮件正在被签名,存储在一个临时文件中,文件被删除,然后文件的内容被发送(所以邮件是空的)。

[1] - http://kb.mozillazine.org/Message_security

[2] - http://kb.mozillazine.org/Getting_an_SMIME_certificate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多