2013-05-09 46 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