为X509客户端身份验证配置Spring Security,它不会提示浏览器提供证书

时间:2015-04-21 16:12:39

标签: authentication spring-security x509

我尝试启用应用程序以使用Spring的Client-Auth安全性。这是我的配置:

  <security:http pattern="/api/**" >
<security:x509 subject-principal-regex="CN=(.*?)," 
  user-service-ref="x509UserService" />
  <security:intercept-url pattern="/api/**" access="IS_AUTHENTICATED_FULLY" requires-channel="https" />
</security:http>

如果我没有在web.xml或tomcat的server.xml中配置任何内容,则永远不会提示浏览器发送带有请求的证书。因此,它始终在org.springframework.security.web.authentication.preauth.x509.X509AuthenticationFilter.extractClientCertificate(HttpServletRequest)方法中返回null。

是否需要配置一些特殊内容以使Spring参与SSL流并请求客户端证书?

任何帮助都将不胜感激。

如果我指定clientAuth =&#39;想要&#39;在server.xml连接器配置中,这会产生不良的副作用,即无论是否访问/ api路径,都会提示每个人提供证书。

同样,如果我将login-config和auth-method指定为CLIENT-CERT,它也会挑战用户,但是我基本上必须复制我在春天做的所有证书检查(或者看起来似乎)。

1 个答案:

答案 0 :(得分:0)

根据您当前的java和构建类型,您至少需要包含类似于

的内容。
<filter>
  <filter-name>springSecurityFilterChain</filter-name>
   <filter-class>
     org.springframework.web.filter.DelegatingFilterProxy
   </filter-class>
 </filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/api/*</url-pattern>
</filter-mapping>

或者如果您正在使用带弹簧的Java配置......

public class SecurityWebApplicationInitializer 
   extends AbstractSecurityWebApplicationInitializer {
 }