java - 在本地微服务之间交换纯文本密码是一种好的编程习惯吗?
问题描述
我有两个微服务。微服务 A 向微服务 B 发送请求以在系统中注册用户,请求中有一个明文密码。这些服务之间的数据交换是基于 HTTP 的。
这些微服务之间的连接纯粹是本地的,所以基本上我不应该担心密码泄露,但是即使在两个本地微服务之间也不编码密码真的是一种很好的编程习惯吗?
解决方案
规则是,敏感信息永远不应通过不安全的连接以纯文本形式进行交换。如果您处于完全封闭的环境中,通常是同一主机中的 2 个服务,则加密无关紧要。但是,如果应用程序被拆分为多个服务,这些服务以后可能会托管在更远的地方,它们之间的网络安全性较低。
在这种情况下,一种简单的方法是使用 SSL 保护整个连接。对于当今的服务器来说,HTTPS 不再是一个太重的负载,因此它是一种加密客户端部分和服务器部分之间的所有内容的简单方法。
好的一点是,通过代理和反向代理,很容易保护两个 java 服务之间的通信,而服务本身不会看到它。因此,如果由于任何原因您无法直接在微服务中处理 HTTPS,您始终可以依靠 Apache 或 nginx(反向)代理来加密微服务之间的通信,以防它以后使用不安全的网络。顺便说一句,这是在 Java servlet 上使用 HTTPS 的常用方法:servlet 托管在 Tomcat(或任何其他 servlet 容器)中,并隐藏在处理 HTTPS 部分的 Apache httpd 服务器(或任何其他反向代理)后面,并且optionaly 可以提供静态内容。
推荐阅读
- javascript - 无法编译数据以在 ReactJs 中呈现
- puppeteer - 切换扩展切换按钮
- firebase - 如何加载以前登录的用户?
- android - Android 从服务中获取当前正在运行的应用程序包名
- python - 导入torch-显示时-[WinError 126]找不到指定的模块
- javascript - React Redux 更新项目数量(不止一个增量)
- android - 为什么更新、修改的数据库文件仍然包含旧的、以前的模式?
- angular - angular 11 表单动态数据绑定
- .net - Docker on Creating .net core 3.1 Linux Image, Getting SSL certificate Error, The remote certificate is invalid based on the validation procedur
- java - Java - 多线程