如何在 java 中创建安全的 AsyncHttpClient POST 请求

How to create a secure AsyncHttpClient POST request in java

我有一个 Swing 应用程序需要将登录详细信息发送到服务器(用 Node.js 编写)进行验证。 到目前为止,我已经成功地发送了 http POST 请求并从服务器获取了 JSON 对象,唯一的问题是,当使用 WireShark 进行嗅探时,我实际上可以看到请求主体,因此可以看到密码和用户名在里面,所以我想那不是很安全,我不介意服务器,我不太确定我想要一个 SSL 连接,因为我不介意返回安全的对象。 我的代码看起来像这样:

// Http members
private AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

调用函数本身如下所示:

    private void login(String username, String password) throws IOException, InterruptedException, ExecutionException {

    asyncHttpClient.preparePost(LOGIN_URL).
    addFormParam("email", username).
    addFormParam("password", password).
    execute(new AsyncCompletionHandler<Response>() {

        @Override
        public Response onCompleted(Response response) {
            // do something with the response object
            return response;
        }
    });
}

如您所见,这里没有详细说明。

在 WireShark 中,请求正文如下所示:

Line-based text data: application/x-www-form-urlencoded email=myUserName&password=myPassword

我确实尝试环顾四周并在此处和其他地方搜索答案并阅读文档,但看起来有一种简单的方法可以做到这一点,我只是遗漏了一些东西..

感谢您的回答

如果您不想让任何人看到您的数据,您需要以某种方式对其进行加密。

以合理的安全级别实现此目的的最简单方法是使用 https 连接。 如果你只关心数据,你也可以尝试自己实现某种形式的端到端加密,但这很难做到。

总结:只需使用 https

使它更安全的事情:

  • 添加传输加密 aka HTTPS
    • 来自您计算机外部的攻击者什么也看不到
  • 以哈希而非明文形式发送密码
    • 在浏览器中查看预加密数据的攻击者仍然不知道您的密码。但仍然可以重新发送相同的请求以获得访问权限
  • 每条短信一次性令牌
  • ...