gpt4 book ai didi

Java实现-SSL单向和双向握手切换

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

对于一个客户端和一个服务器,是否可以在运行时切换单向和双向 SSL 握手? (服务器必须在运行前设置身份验证模式)。

我想到的是分别使用两个端口进行单向和双向 SSL 连接。有没有更好的方法在运行时切换它们(使用一个端口)?

一个更复杂的情况是每个客户都可能在单向和双向方案之间切换。如果服务器选择一种方案,那么任何客户端都必须使用这种方案。如何处理以下情况? Alice 想要单向,而 Bob 需要双向。

谢谢。

最佳答案

当然。要切换到双向身份验证,请在服务器端执行以下操作:

  • 调用SSLSocket.setNeedClientAuth(true)
  • 调用SSLSocket.getSession().invalidate()使当前 session 失效
  • 然后调用 getSession().getPeerCertificates() 或 friend 来 (a) 执行新的握手和 (b) 获取客户端证书。

请注意,您必须调用 getSession() 两次。不要试图“优化”它。

编辑 您的“更复杂的案例”没有意义。它与客户“想要”做什么无关。这是一个服务器 是否想要或需要客户端身份验证的问题。一旦它获得了针对特定客户端的身份验证,就不需要为该客户端退回到非身份验证状态。请注意,客户端身份验证适用于该客户端的整个 SSLSession,而不仅仅是当前连接。特别是您的声明:

If server chooses one scheme, then any client must use such scheme.

完全不正确。 needClientAuth 设置在这里应用于单个 SSLSocket,而不是每个客户端的每个 SSLSocket

关于Java实现-SSL单向和双向握手切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30542112/

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