使用RFC 1847加密和签名的MIME邮件

时间:2009-06-24 07:25:57

标签: php encryption sockets gnupg openpgp

我需要一个用于Web传输的客户端 - 服务器加密解决方案(即签名和加密的客户端,以及经过验证和解密的服务器端)。

我正在使用HTTP,但由于共享托管限制(我的服务器是共享主机环境),SSL无法使用。 在研究替代解决方案时,我已经使用GnuPG决定使用OpenPGP。其中一个原因是它通过各种PEAR和PECL模块在PHP中得到支持(PHP是我打算用于两者我的客户端脚本和我的服务器脚本的语言,尽管Perl也可用作不得已)。

我现在正在尝试确定传输数据的最佳方式。我遇到了RFC 1847,它定义了加密和签名的多部分MIME邮件。该协议专门针对RFC 3156中的PGP进行了扩展。 (我认为这些协议与S / MIME加密电子邮件协议有关。)

我的问题是:有没有理由遵循这些标准?就协议而言,它们看起来像是明智的解决方案,但是有没有客户真正使用这个协议?例如,如果我向Apache Web服务器发出多部分/加密请求,是否有任何简单的方法来检索数据?我使用PHP脚本进行的测试让我觉得PHP尝试破译这些请求是没有用的($ _POST数据似乎来自'multipart / form-data'MIME类型数据)。

由于我的主机让我打开套接字, 可以让我使用PHP的套接字编程API来编写一个PHP脚本来充当服务器接受'multipart / encrypted'和'multipart / signed'HTTP请求,但这看起来有点矫枉过正。

有什么建议吗?

有关我的问题的详情,请参阅this question

1 个答案:

答案 0 :(得分:1)

你是对的 - 这些协议与enrypted邮件协议有关,在你的情况下使用它有点矫枉过正,你必须使用OpenSSL php扩展。使用OpenPGP。

由于您的客户端将使用PHP编写 - 请考虑以下方案:

场景1:创建简单的SOAP webservice

服务器和客户端方法是相同的:

  • getPublicKey() - 返回公钥
  • sendMessage(msg) - 返回答案

场景2:使用GET / POST消息

  • 客户 - > HTTP GET(发给我你的 公钥) - >服务器
  • 客户< - (我的 公钥是xxxx)< - 服务器
  • 客户端 使用服务器的公共加密消息 密钥客户端将自己的公钥添加到 消息
  • 客户 - > HTTP POST(发送 加密的消息) - >服务器
  • 服务器 对消息进行解码并进行编码 回答客户公钥
  • 客户端 < - (对客户的编码答案)< - 服务器