gpt4 book ai didi

java - 有没有办法在 servlet 中动态触发 SSL/TLS 重新协商?

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:15 24 4
gpt4 key购买 nike

我希望能够接受 Web 浏览器客户端和(自动)服务客户端到我的应用程序中运行的单个 servlet。一些服务客户端将使用 TLS 客户端证书进行身份验证,但有些则不会。我不希望 Web 浏览器客户端被提示输入证书,即使用户在他们的浏览器中安装了证书。是否提示客户端证书的决定是动态的,基于客户端的策略,因此不能在 web.xml 中静态配置。

有没有办法动态触发 TLS 重新协商以从 servlet 中请求客户端证书?如果我可以访问原始 SSLSocket,那么我可以将其配置为需要客户端证书,然后调用 startHandshake()强制重新协商。据我所知,没有可移植的方法来获取与 servlet 请求/响应关联的 SSLSocket。

我的应用程序必须在各种 servlet 容器中运行,因此我宁愿尽可能避免特定于容器的解决方案。理想情况下,解决方案不涉及重定向,但如果这是唯一的方法,我会接受。

最佳答案

您在上面的评论中写道:

because that setting will cause a web browser to prompt the user to choose a certificate if they have one installed that matches one of the configured CAs. I never want that to happen for web browser clients

然后我投票赞成这是不可能从服务器端实现的。在通过安全通道发送任何数据之前,TLS 首先进行。您无法确定是 Web 浏览器还是没有敲门而不询问客户身份。从 TLS 的角度来看,这只是另一个未命名的网络客户端尝试连接。建立安全连接后,发送数据,你可以判断这是不是浏览器。

您可能希望通过不同的端点传输浏览器(1 路 ssl)和服务器客户端(2 路 ssl)。

否则你可能想要实现你自己的 TLS 协议(protocol)握手过程。

您可能希望将浏览器配置为不响应客户端证书请求,而不是将服务器配置为不询问(如果可能)是否确定这是基于浏览器的客户端。可能会尝试通过密码套件(支持的加密模式列表)来猜测它,但这绝对不是 servlet 级别的交互。

我很好奇有人知道如何解决你的问题。

关于java - 有没有办法在 servlet 中动态触发 SSL/TLS 重新协商?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143947/

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