gpt4 book ai didi

java - 如何优雅地检测 SSL

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:59 25 4
gpt4 key购买 nike

我有一个可以绑定(bind)到 ssl 或纯 http 的网络服务。配置为知道服务器主机和端口的 Java 客户端。当客户端连接时,我构建服务器端点,如 http://host:port/service .客户端不知道服务器是否正在使用 ssl - 服务器总是绑定(bind)到一个端口,因此它是安全的还是不安全的。现在,问题是如何让客户端在不引入另一个参数的情况下发现这一点?我可以挑战纯 http 请求,然后在出现特定异常时回退到 ssl(反之亦然)吗?或者我必须明确地为客户端引入新的连接参数?

最佳答案

在服务器端,你可以使用像Grizzly's port unification这样的机制。执行。这可用于在同一端口上提供 HTTP 和 HTTPS。这依赖于这样一个事实,即在这两种情况下,客户端首先进行对话,然后发送 HTTP 请求或 SSL/TLS 客户端问候消息。这在服务器端非常方便(虽然我不确定我是否会推荐在同一端口上运行两个协议(protocol))。

从客户的角度(这就是您要问的),其后果是:

  • 客户先说话的事实意味着它总是必须先尝试。如果您尝试将 SSL/TLS 与普通 HTTP 服务对话,反之亦然,则可能会出现某种异常。
  • 如果服务器使用端口统一,您将无法可靠地找到答案。

抛开端口统一(毕竟这种情况很少见),您可以尝试缓存过去尝试的结果。

更根本的是,从安全的角度来看,不知道应该使用哪种协议(protocol)会引入漏洞:您的系统将容易受到降级攻击(与 blindly relying on automatic redirects 的方式类似) .如果您的用户代理支持 HSTS , 值得研究一下(尽管它需要用户代理记住哪些站点要与 HTTPS 一起使用)。

无论哪种方式,如果您担心安全问题,您必须配置客户端以知道何时使用https://

关于java - 如何优雅地检测 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com