java - 在没有加密的情况下在 Java 中使用 HTTPS

标签 java https

我们正在寻找一种解决方案,使我们能够在不加密的情况下使用 HTTPS。为什么?这是故事:

我们的产品(安装在客户处)连接到我们的服务器以获取更新、发布信息等。我们希望产品在发布数据之前验证它是否连接到服务器(而不是冒名顶替者)。我们还需要确保没有中间人攻击(即内容应该被签名等)。但是,我们的客户要求他们能够嗅探流量(Wireshark、tcpdump 等)并查看整个交易的内容。这是出于合规性和安全性原因。

顺便说一下,我们的产品是用 Java 编写的。

有什么想法吗?

更新: 如果我没有使用正确的表格来回复答案,请原谅,我是这个网站的新手。

首先,感谢您的快速回答!

我们调查 HTTPS 可能性的原因是因为我们不想在这里发明一个新的协议(protocol)。这不仅仅是工作量,而且发明自己的安全协议(protocol)(即使只是为了签名)通常被认为是不好的做法。我们正试图获得 HTTPS 在验证服务器方面的优势(这很重要,该服务器还提供可能非常大的可执行代码 - 我们不希望任何人提供恶意软件或仅在收到整个后才使用大数据来攻击我们的客户系统会发现它是坏的)以及确保 MITM 不会发生(消息本身的签名)。我们不介意是否有人窃听流量,因为它从不包含被视为 secret 的内容。此外,Wireshark 中的内容不一定要易于阅读,只要审计人员能够做到即可。

@Nate Zaugg - 不,这不是开玩笑。令人惊讶的是,如今供应商使用带加密的 HTTPS,并且没有受到严格合规性问题的客户的强烈反对。

@erickson - NULL 密码套件的第一个解决方案看起来很有趣,我们将对其进行研究。第二种解决方案将需要为每个客户提供一组 key - 这不是我们想要管理的。

@ZZ Coder - 你的意思是使用空密码将无法查看 Wireshark 中的内容吗?

最佳答案

有没有加密的 SSL“密码套件”,所有版本的 Sun JSSE 提供程序都支持 SSL_RSA_WITH_NULL_SHA。但是,所有应用程序数据仍然包裹在 SSL 记录中(携带提供完整性保护的 MAC 等),因此当您在 Wireshark 中查看它时,您会看到这些结构。

或者,只要您不使用短暂的 Diffie-Hellman(DHE_XXX 密码套件之一),您就可以向 Wireshark 提供服务器的私钥,它会解密 SSL session 。虽然这是一些额外的工作,但它不会对服务器或客户端强加任何不寻常的要求来支持很少使用的未加密密码套件。

关于java - 在没有加密的情况下在 Java 中使用 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3143033/

相关文章:

java - 使用多个标记创建折线

java - 使用 JSoup 转到 aspx 表单上的下一页

java - Guice配置范围

node.js - 使用 Node 的 HTTPS/TLS 与 OpenSSL s_client 时不同的证书链顺序

http - 使用 `UrlFetchApp` 的 PUT 请求返回 'Bad Request' 但 Google Apps 脚本之外的相同请求有效

http - URL 路径段中的参数

.htaccess - 在 https ://上时页面 404ing

java - 3D相交测试

javascript - Webrtc 应用程序开发、网络和安卓

amazon-web-services - 将 HTTPS/SSL 添加到指向 AWS 实例的域