2011-11-29 61 views
1

我有几个独立的PHP应用程序在几台服务器上运行。没有一个服务器具有SSL,但我可以使用PHP封装器进行SSL。我想确保在服务器之间发送的所有数据都是安全并且有签名的。我需要生成一个证书还是足以在每次发送内容时创建公钥/私钥?这个方法安全吗?在Apache中没有SSL的服务器之间发送加密数据

+0

其实是否必须签名,或者是滥竽充数加密?简单的共享密钥加密可以阻止偶然的窥探者,而签名则是更多的工作。 – TMN

+0

它应该被签名,因为服务器必须确定对方的身份。 – JanL

回答

1

我需要生成一个证书还是足以创建 公共/私人密钥每次我发送一些东西?

每次都不要生成公钥/私钥。你将如何检查谁能控制私钥?证书的要点是能够将身份与公钥绑定在一起:检查您是否信任证书,并且您愿意与其引用的身份进行通信是保证通信安全的必要组件。

据我所知,服务器之间的通信本身并不涉及用户交互。如果你控制了所有的服务器,你可以给他们证书,或者是自签名的X.509证书(如果你可以为所有人安装它们:只适用于实践中的小数字)或你自己的CA(如果你有OpenSSL,看看CA.pl,它有一个手册页)。

然后,您可以使用S/MIME对您交换的内容进行签名加密(PHP中提供了此功能)。

(您可能还能够实现使用PGP同一个目标,使用PGP密钥/证书来代替。)

1

如果两台机器都有mcrypt,那么你可能会加密你希望通过PHP发送的文本一端发送的文本,并在另一端解密它,但是当然这里的重大问题将是密钥分发。你必须预先配置每台机器的正确密钥,并且希望没有人注意到你每次都使用同一个密钥(这很糟糕),或者你必须想出一些分配你的方式当您发送数据而没有监听到密钥时,接收机的密钥。 (这很复杂)。

你还提到了签名,这也是一个棘手的问题。

虽然理论上可以使用适当的扩展名(如mcrypt)在PHP中实现所有这些,但我真的怀疑这样做是否值得做正确的工作,这将是相当可观的,您也可以重新发明轮子。

SSL实现所有你需要的东西,并且是公认的行业标准,如果可能的话,我强烈建议你安装它。

+0

这可能是一个选项,但手动输入密钥并不真正用户友好......我想我会坚持使用SSL。 – JanL

1

在我的小项目,我使用的Blowfish加密一些数据传输,使用mcrypt扩展这是适用于大部分的服务器:

$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null); 

解密去以同样的方式,只是使用mcrypt_decrypt。这是一个共享密钥,而不是公钥/私钥系统。

相关问题