我在几台服务器上运行了几个独立的PHP应用程序。没有服务器具有SSL,但我能够使用PHP包装器进行SSL。我想确保服务器之间发送的所有数据都是安全的并签名。我是否需要生成证书,或者每次发送内容时是否足以创建公钥/私钥?这种方法安全吗?
答案 0 :(得分:1)
如果两台机器都有mcrypt,那么你可以在一端用PHP加密你想要通过网络发送的文本,然后在另一端解密它,但当然你在这里遇到的重大问题就是密钥分发。您必须使用正确的密钥预先配置每台计算机,并希望没有人注意到您每次都使用相同的密钥(这很糟糕),或者您必须提出一些在没有密钥被窥探的情况下发送数据时将密钥分配给接收机器的方式。 (这很复杂)。
您还提到了签名,这也是一个棘手的问题。
虽然理论上可以使用适当的扩展(例如mcrypt)在PHP中实现所有这些,但老实说,我怀疑做正确的努力是值得的,这将是相当大的,你也只是重新发明轮子。
SSL实现了您已经需要的所有内容,并且是公认的行业标准,如果可能的话,我强烈建议您安装它。
答案 1 :(得分:1)
在我的一个小项目中,我使用Blowfish加密进行一些数据传输,使用大多数服务器上提供的mcrypt扩展:
$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null);
解密也是一样,只需使用mcrypt_decrypt即可。这是一个共享密钥,而不是公钥/私钥系统。
答案 2 :(得分:1)
我是否需要生成证书或者是否足以创建证书 每次我发送东西时公钥/私钥?
每次都不要生成公钥/私钥。你怎么能检查谁控制私钥?证书的要点是能够将身份绑定到公钥:检查您是否信任证书,并且您愿意与其所引用的身份进行通信是保护通信的必要组件。
据我所知,服务器之间的通信本身并不涉及用户交互。如果你控制所有服务器,你可以给他们证书,自签名的X.509证书(如果你可以为所有各方安装它们:仅适用于实际中的小数字)或你自己的CA(如果你有OpenSSL,查看CA.pl
,其中有一个手册页。)
然后,您可以使用S / MIME对您交换的内容进行加密签名(PHP中有可用的功能)。
(您可能也可以使用PGP实现相同的目标,而不是使用PGP密钥/证书。)