2013-05-09 48 views
1

我使用Spring Security的2.X的预认证与X.509证书。的Spring Security X.509预认证

我通过HttpServletRequest.getAttribute("CERTIFICATE")得到certificateText

有时,上述调用返回""(空)。我相信它会在HTTP会话过期时发生。

什么能解释为什么HttpServletRequest.getAttribute("CERT")返回空?

编辑例如,在Kerberos中,票证在每个HTTP请求中都可用。证书不是总是在X.509 HTTP请求中?

回答

1
  1. 使用此代码,请访问证书: X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
  2. 证书总是被填充成功的客户端证书身份验证后请求。

确保您的支持长证书链:

  1. 的MAX_PACKET_SIZE属性格式添加到文件worker.properties worker.ajp13w.max_packet_size=65536

  2. 的分组大小属性格式添加到AJP连接器在Tomcat的配置configuration \ conf \ server.xml <Connector port="8089" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" packetSize="65536"/>

Apache日志: http://httpd.apache.org/docs/2.2/logs.html#accesslog http://httpd.apache.org/docs/2.2/logs.html#errorlog http://httpd.apache.org/docs/2.2/mod/core.html#loglevel

+0

因此,如果客户端证书验证失败,则HTTP会话将不包括'javax.servlet.request.X509Certificate'属性?我添加了日志语句来打印'request.getAttributeNames()',然后遍历它们。有时候不会有'javax.servlet.request.X509Certificate'证书。 找出失败原因的关键是Apache日志? – 2013-05-10 14:57:33

+0

您如何连接Apache和您的servlet容器? AJP? – Michael 2013-05-10 17:01:54

+0

Apache和Tomcat通过'mod_jk'进行通信。但我确实有这个属性设置:'conf.d/workers.properties:worker.eurekastreams.type = ajp13'按您编辑 – 2013-05-10 17:30:32