我理解 SSL 握手流程,但我面临一个逻辑问题。当用户选择证书时,我需要根据应用程序对其进行验证,以了解其是否可靠并与任何系统用户匹配。但如果不,我必须允许用户再次询问以选择另一个。也许用户在其计算机上安装了多个证书,并错误地选择了错误的证书。
在我的实际场景中,要选择另一个证书,用户必须关闭浏览器并再次打开,但这会给用户体验带来负面影响,我想改进它。
该解决方案对每个请求都会进行握手,因此允许用户选择另一个请求。
但该如何做呢?
我发现最相关的电子问题是https://security.stackexchange.com/questions/56623/avoiding-ssl-handshake-for-each-call。
- 这完整握手是客户端和服务器在彼此不认识时(他们之前没有交谈过,或者很久以前没有交谈过)所做的事情。在完整握手中,会发送证书,并发生非对称加密(RSA、Diffie-Hellman...)。
- 这简短握手是客户端和服务器相互记住的内容;更准确地说,它们记住在之前的完整握手中建立的算法和密钥,并同意重新使用它们(从技术上讲,它们重新使用“主密钥”并从中得出用于此连接的新加密密钥)。
我可以释放任何 cookie、关闭选项卡并禁用保持活动,第二次握手不会打开证书提示。它使用之前选择的选项,例如对于 Chrome,没有“记住我的决定”选项,而 Firefox 有。Edge、Opera、Edge 等也发生了同样的情况。这是标准吗?
我猜想,它可以由服务器端控制,请求新的 SSL 握手。我做了一些干预,试图自己解决这个问题,但没有成功
在客户端:
- 清除所有数据,甚至历史记录。
- 在另一个子域中打开,无需 cookie
在服务器端:
- 发送“连接:关闭”标头
- 禁用保持活动
关闭浏览器是新 SSL 握手的唯一有效方法,但这会带来糟糕的用户体验。
好吧,如果我清除了浏览器中的所有数据,关闭了连接,删除了任何活动的连接,并且它仍然使用在第二个请求中选择的第一个证书,直到我关闭浏览器(终止所有进程),那么一定是浏览器(全部)或服务器出了问题。
如果我的应用程序使用 SSL 来验证用户身份,则我无法在不关闭浏览器的情况下使用多次登录,这是不对的,它应该有一种方法来重新协商此身份验证。
答案1
这遵循与 HTTP Basic Auth 相同的行为,以便浏览器在浏览器会话期间记住这些凭据并且不会提供忘记它的方法。