当前位置: 首页 > 知识库问答 >
问题:

x509身份验证的“选择客户端证书”对话框

禹正阳
2023-03-14

我有一个用Java Spring写的应用程序运行在Wildfly 10上。我已经使用我的RootCA和客户端证书设置了基本的x509身份验证。

基于客户端的证书CN,我可以处理多个用户角色。

我想实现的是如何动态选择应该使用的客户端证书。访问https时会显示一个对话框(这是一个系统对话框——来自火狐)。但是这个对话框只显示一次,即使注销后,对话框也不会再次显示,最后一个客户端证书会自动选择。

即使当我取消选择“记住此决定”时,此证书也会被再次选择。

这里拒绝上传截图,所以有url:https://imgur.com/a/PklHR

共有1个答案

吕皓
2023-03-14

TL;DR:(目前)没有硬性的方法从服务器端强制使用新客户端证书进行重新身份验证,但是,在大多数情况下,用户可以手动完成。

正如我之前列出的错误中提到的,这种行为是由于火狐浏览器和Chrome记住了SSL状态,其中包括用于身份验证的任何客户端证书。用户可以通过重新启动浏览器或清除活动登录名来手动清除此缓存。虽然仍然没有方法可以远程触发浏览器的SSL缓存的清除,但有几种创造性的方法来解决此问题。

强制浏览器再次请求客户端证书的一种方法是强制TLS重新协商,这将涉及再次交换TLSClient HelloServer Hello消息。例如,当用户请求需要客户端证书的资源时,Apache使用TLS重新协商来“升级”连接。

由于我不熟悉Spring框架,我不知道在您的具体情况下如何完成,但是,我相当确定它可以在Java完成。您可以查看Hello Request消息上的TLS 1.2 RFC部分,它会提示客户端以Client Hello消息进行响应,从而有效地重新启动握手。

但是,此时,如果客户端已经使用证书进行身份验证,则浏览器仍会记住并发送它。服务器可能能够通过修剪其在证书请求消息的“certificate_authorities”部分中发送的已接受 CA 列表来强制客户端提供不同的证书。如果您要使用的新证书是由与旧证书相同的 CA 颁发的,这显然将不起作用。

我还见过这样的情况,如果再次提供相同的证书,使用自定义逻辑使SSL连接失败,但这并不能解决浏览器的证书内存问题。如上所述,它只是防止用户再次使用该站点,直到重新启动或清除活动登录。希望有帮助。

 类似资料:
  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

  • 问题内容: 我需要导入证书,以便向Spring Boot应用程序中的外部服务发出http请求。 我该如何设置Spring Boot来做到这一点? 那里有很多信息,但我发现所有这些都令人困惑。似乎我可能只需要创建类似“ truststore.jks”密钥库的内容并导入正确的证书,然后将一些条目添加到我的application.properties中即可。 问题答案: 打开您的终端或 回答所有问题。在