2013-05-12 130 views
0

我使用Spring Security为X.509 preauthentication在HTTP请求中放置X509证书

为了确保客户端每发送HTTP请求其证书,是否有必要:

  • 修改的pom.xml设置<wantClientAuth><needClientAuth>true
  • 设置Apache的SSLVerifyClientrequirereference

根据读取,Web服务器必须通知客户端发送其证书,以便客户端实际发送它。如果需要Spring Security和Apache配置来实现这一点,我很困惑。

+0

我在编辑'ActivClient's'(智能卡软件)配置时阅读了这篇文章,在HTTP会话中包含了客户端证书(http://stackoverflow.com/questions/13808630/request-getattributejavax-servlet-request-x509certificate-returns -null),但是我确实在会话中看到了客户端证书**有时候**。 – 2013-05-13 03:24:20

回答

1

Spring安全配置与客户端是否发送证书无关。这是在SSL协议层面决定的,因此由客户端和服务器之间的协商决定。你的问题有点不清楚,因为它指的是一个maven pom和一个Apache配置,而没有解释你的系统是如何建立的。您是否在前面运行Apache服务器的Maven Jetty插件?

如果SSL连接没有终止在servlet容器,Spring Security的X.509认证将不起作用。所以如果你在客户端和Apache之间有HTTPS,并且从Apache到servlet容器有一个非SSL连接,那么客户端证书通常不可用。

如果您使用的是AJP连接器,则可以配置Apache以使用ExportCertData选项将证书传递到后端。如果你不是,你仍然可以拿出导出的证书并将其作为请求头传递(你可以在SO的其他地方找到这个例子)。您还需要自定义Spring Security X.509代码以从头中提取证书,而不是默认使用的标准java属性名称。

+0

当记录'session.getAttributeNames()'时,是否应显示'SSL_CLIENT_CERT'?查看我的日志后,我只能看到'javax.servlet.request.X509Certificate'属性,而不是'SSL_CLIENT_CERT'。也许它需要特别检索? – 2013-05-14 01:51:11

+1

SSL_CLIENT_CERT只适用于Apache。如果设置了'javax.servlet.request.X509Certificate',那么不应该有任何问题。正如我所说,你应该在你的问题中澄清你的设置是什么,以及问题是什么。否则很难给出答案。 – 2013-05-14 19:41:38