要求浏览器不缓存证书



我们已经在localhost:8081设置了一个服务器,这将是我们的默认网站。然后,我们在8443上打开了一个https端口,该端口需要证书。第一次对该端口发出请求时,Chrome/Edge会显示一个弹出式对话框,其中包含可用的证书(在我们的示例中为1)。然后我们有一个程序启动,它执行其他授权,使证书可用,以便浏览器可以将其发送到服务器。但是,如果我们尝试第二次连接到该端口,浏览器似乎已经缓存了证书,并将其发送到服务器,而不显示弹出对话框。我们确定在服务器端使所有会话无效。似乎重新提示证书的唯一方法是重新启动浏览器或隐身。有没有办法强制浏览器不缓存证书?

我已经设法通过做两件事来解决它,在此之前我只想澄清我们正在做什么。我们有一个智能卡读卡器,可以识别卡片。如果插入了卡,chrome会显示证书对话框。选择证书后,智能卡读卡器通过pin对话框对卡进行身份验证,并将卡的证书发送给服务器。如果卡被移除并重新插入,它应该重新提示pin对话框,但在我们的情况下,它没有,因为chrome/edge缓存会话。我们在Apache中使用Spring引导,并做了以下事情解决了我们的问题:

使用httpResponse.addHeader("Connection","close"):

private void handleSessionUnlockRequest(HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException {
...
...
httpResponse.addHeader("Access-Control-Allow-Credentials",
"true");
httpResponse.addHeader("Cache-Control",
"no-cache, no-store, max-age=0, must-revalidate");
httpResponse.addHeader("Connection","close");

writer.flush();
httpRequest.getSession().invalidate();
}

在HttpConnector中设置hostConfig.setSessionTimeout(1):

private Connector getHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
connector.setScheme("https");
connector.setSecure(true);
...
...
protocol.setSslEnabledProtocols("TLSv1.2");
protocol.setClientAuth("Required");
for(SSLHostConfig hostConfig : connector.findSslHostConfigs()){
hostConfig.setSessionTimeout(1);
}
return connector;
}

最新更新