Authentication 为X509客户端身份验证配置Spring安全性,它不是';t提示浏览器获取证书

Authentication 为X509客户端身份验证配置Spring安全性,它不是';t提示浏览器获取证书,authentication,spring-security,x509,Authentication,Spring Security,X509,我试图使应用程序能够使用spring的客户端身份验证安全性。以下是我的配置: <security:http pattern="/api/**" > <security:x509 subject-principal-regex="CN=(.*?)," user-service-ref="x509UserService" /> <security:intercept-url pattern="/api/**" access="IS_AUTHENTICATE

我试图使应用程序能够使用spring的客户端身份验证安全性。以下是我的配置:

  <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流并请求客户端证书

任何帮助都将不胜感激

如果我在server.xml连接器配置中指定clientAuth='want',这会产生不良的副作用,即提示每个人输入证书,而不管他们是否正在访问/api路径


类似地,如果我将login-config和auth方法指定为CLIENT-CERT,它也会对用户提出挑战,但是我基本上必须复制我在spring中所做的所有证书检查(或者看起来是这样)。

取决于您当前的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>
public class SecurityWebApplicationInitializer 
   extends AbstractSecurityWebApplicationInitializer {
 }