【发布时间】:2018-05-22 19:40:09
【问题描述】:
当我尝试升级到 Grails 3 时,我一直在尝试镜像我在 Grails 2 中的实现已有一段时间了。
我需要使用“client-cert”身份验证方法支持基于 X509 证书的身份验证,也就是说,我只想在请求受保护的资源后提示输入证书。 请参阅下面 Application.groovy 中的当前实现。
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container
tomcat.addConnectorCustomizers(
new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setPort(8443)
connector.setSecure(true)
connector.setScheme("https")
Http11NioProtocol proto = (Http11NioProtocol) connector.getProtocolHandler()
proto.setMinSpareThreads(5)
proto.setSSLEnabled(true)
proto.setClientAuth("false")
proto.setKeystoreFile("/tmp/keys/app.jks")
proto.setKeystorePass("changeit")
proto.setKeystoreType("JKS")
proto.setKeyAlias("ssl_server")
proto.setTruststoreFile("/tmp/keys/app.jts")
proto.setTruststoreType("JKS")
proto.setTruststorePass("changeit")
}
})
tomcat.addContextCustomizers(new TomcatContextCustomizer() {
@Override
public void customize(Context context) {
context.setPath("/myapp")
SecurityConstraint sc = new SecurityConstraint()
SecurityCollection securityCollection = new SecurityCollection()
securityCollection.setName("Protected")
securityCollection.addPattern("/*")
sc.addCollection(securityCollection)
sc.addAuthRole("mySecureConnection")
sc.setUserConstraint("CONFIDENTIAL")
context.addConstraint(sc)
context.addSecurityRole("mySecureConnection")
context.setRealm(new MySecurityRealm())
LoginConfig loginConfig = new LoginConfig()
loginConfig.setAuthMethod("CLIENT-CERT")
loginConfig.setRealmName("MySecurityRealm")
context.setLoginConfig(loginConfig)
sc.setAuthConstraint(true)
}
});
}
}
但是,无论我尝试使用多少种不同的方式来削减它,应用程序都不会在访问时请求证书(它应该基于我上面的全部捕获模式)。 请注意,当 clientAuth 设置为 true 时,此机制会按预期工作;
proto.setClientAuth("true")
但这意味着总是要求一个证书,这最终不是我想要的(我打算更新上面的模式)。 任何帮助将不胜感激。
【问题讨论】:
标签: ssl spring-boot grails x509certificate grails-3.3