java - 加密和解密两个系统之间的消息
问题描述
我有以下系统
Android 应用程序 -> kafka -> 侦听器服务(Java)。
我想确保此过程中的数据完整性。
我想在 Android 应用程序中加密消息,将其插入主题中,然后让侦听器拾取并解密消息。
我想知道在系统之间加密和解密的最佳方法(算法和实践)是什么。这可以通过简单的方式实现(没有证书或密钥)吗?
假设将有 5 个移动应用程序向代理推送消息。
解决方案
我想确保此过程中的数据完整性。
如果您担心在传输过程中确保消息的完整性,则在大多数情况下使用 TLS(ssl、https)可以解决问题。如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密的消息),则需要对消息进行签名。在大多数情况下,您应该可以使用第一个选项 (https)。
这可以通过简单的方式实现(没有证书或密钥)吗?
PKI(证书和密钥)使我们能够确保完整性和机密性,而无需对秘密进行硬编码(这对于移动应用程序来说不是很明智)。您已经拥有用于 SSL 的开箱即用库,因此请认为它是“简单的方法”。构建自定义协议来签名和验证消息只会更复杂,而且可能更不安全。
我想知道在系统之间加密和解密的最佳方法(算法和实践)是什么。
对于基本的传输安全性,我建议依靠 TLS,您仍然需要对用户(用户名、密码?)进行身份验证以确保客户端的身份。TLS 提供到 SSL 终止点(https 服务器、kafka 侦听器......)的安全通道。
如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密的消息),有一些标准可以对消息进行加密和签名,例如 Web 服务的 WS-Security 或者您可以使用已签名和加密的 JWT 传递消息。
但是 - 您必须在客户端和验证后端之间安全地交换密钥(使用单独的服务或某些密钥交换协议)。
推荐阅读
- java - 我无法在 Holder 中设置值
与 Mockito - c# - 将工具提示添加到 UWP 中的禁用菜单
- angularjs - 如何修复 $http GET 请求
- automl - 禁用 AutoML API 会删除训练数据和模型吗?
- angular - 将焦点更改为以 Angular 6 提交的表单
- visual-studio-2017 - Visual Studio 2017 社区构建失败且未显示任何错误
- elasticsearch - 如何通过 AWS VPC 使用 Elastic Cloud 的 Logstash 从 MySQL(AWS RDS) 导入数据?
- excel - 如何自动隐藏功能区,但仅适用于特定工作簿且仅适用于该工作簿中的一个工作表
- javascript - 如何更改分页点的 react-native-swiper-flatlist 样式?
- arguments - Nim argv 等效项