我有几个独立的PHP应用程序在几台服务器上运行。没有一个服务器具有SSL,但我可以使用PHP封装器进行SSL。我想确保在服务器之间发送的所有数据都是安全并且有签名的。我需要生成一个证书还是足以在每次发送内容时创建公钥/私钥?这个方法安全吗?在Apache中没有SSL的服务器之间发送加密数据
回答
我需要生成一个证书还是足以创建 公共/私人密钥每次我发送一些东西?
每次都不要生成公钥/私钥。你将如何检查谁能控制私钥?证书的要点是能够将身份与公钥绑定在一起:检查您是否信任证书,并且您愿意与其引用的身份进行通信是保证通信安全的必要组件。
据我所知,服务器之间的通信本身并不涉及用户交互。如果你控制了所有的服务器,你可以给他们证书,或者是自签名的X.509证书(如果你可以为所有人安装它们:只适用于实践中的小数字)或你自己的CA(如果你有OpenSSL,看看CA.pl
,它有一个手册页)。
然后,您可以使用S/MIME对您交换的内容进行签名加密(PHP中提供了此功能)。
(您可能还能够实现使用PGP同一个目标,使用PGP密钥/证书来代替。)
如果两台机器都有mcrypt,那么你可能会加密你希望通过PHP发送的文本一端发送的文本,并在另一端解密它,但是当然这里的重大问题将是密钥分发。你必须预先配置每台机器的正确密钥,并且希望没有人注意到你每次都使用同一个密钥(这很糟糕),或者你必须想出一些分配你的方式当您发送数据而没有监听到密钥时,接收机的密钥。 (这很复杂)。
你还提到了签名,这也是一个棘手的问题。
虽然理论上可以使用适当的扩展名(如mcrypt)在PHP中实现所有这些,但我真的怀疑这样做是否值得做正确的工作,这将是相当可观的,您也可以重新发明轮子。
SSL实现所有你需要的东西,并且是公认的行业标准,如果可能的话,我强烈建议你安装它。
这可能是一个选项,但手动输入密钥并不真正用户友好......我想我会坚持使用SSL。 – JanL
在我的小项目,我使用的Blowfish加密一些数据传输,使用mcrypt扩展这是适用于大部分的服务器:
$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null);
解密去以同样的方式,只是使用mcrypt_decrypt。这是一个共享密钥,而不是公钥/私钥系统。
- 1. 如何在Apache 2.4.18服务器中实现没有ssl的http2
- 2. Android - 在服务器和客户端之间发送数据
- 3. 发送cookie数据到服务器没有页面加载
- 4. 服务器在服务器之后立即发送加密握手
- 5. 文件请求之间2台服务器之间的数据加密
- 6. 尽量减少客户端/服务器之间在javascript中发送的数据
- 7. SSL Apache HTTP服务器上
- 8. Apache HTTP服务器发生间歇性SSL握手错误
- 9. 数据发送HTTP到web服务器没有结果
- 10. 发送数据到服务器没有ajax
- 11. 以扭曲的形式在服务器和客户端之间发送数据
- 12. 如何加密发送到服务器的密码
- 13. 在传递期间未加密的HTTP服务器数据
- 14. 加密客户端和服务器之间的密钥交换
- 15. Angular 2有没有办法在服务之间传递数据?
- 16. GPS中间件服务器 - 保存位置并发送数据到服务器
- 17. 加密Apache和MySQL服务器
- 18. 在iPhone中发送加密数据
- 19. Android-> iPhone之间的某种推送通信没有中间服务器
- 20. 客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据
- 21. 通过网络在客户端和服务器之间发送数据
- 22. 在客户端和服务器之间发送数据2种方式
- 23. 在两个网络服务器之间发送连接元数据
- 24. 流从移动设备发送加密密码到服务器
- 25. 通过不同的sql服务器之间的电子邮件发送数据
- 26. 向远程数据库服务器发送数据和从远程数据库服务器发送数据
- 27. 使用Angular 2中的服务在组件之间发送数据
- 28. 如何在.Net服务器中不加密地支持SSL?
- 29. SQL服务器 - 加密数据库中的表的列数据
- 30. 发送给用户的出站数据是否也在SSL连接中加密?
其实是否必须签名,或者是滥竽充数加密?简单的共享密钥加密可以阻止偶然的窥探者,而签名则是更多的工作。 – TMN
它应该被签名,因为服务器必须确定对方的身份。 – JanL