我正在尝试为Sping Boot Flux应用程序建立x509身份验证,但在尝试身份验证期间收到以下消息:
服务器X509身份验证转换器:在SslInfo中找不到对等凭证,正在略过x509验证
当我尝试调试此日志消息中提到的类时,我可以看到证书信息确实为空。
我的当前配置:
Ssl证书是通过Sping Boot 属性(如 server.ssl.key-store)提供的,Ssl连接成功。出于测试目的,我从另一个Spring Boot应用程序(不是Flux应用程序)复制了证书,并使用了有效的x509身份验证。
我需要在本地运行多个应用程序,所以我通过端口来区分它们。
服务器。端口=${端口:8441}
对于Spring安全性,我有一个特定的配置类,用@Configuration和@EnableWebFluxSecurity标注标记。
@Bean
public SecurityWebFilterChain (ServerHttpSecurity http) {
String endpoint1 = "/first-endpoint-i-want-to-authorize";
String endpoint2 = "/second-endpoint-i-want-to-authorize";
http.authorizeExchange(exchanges -> exchanges.matchers(
new NegatedServerWebExchangeMatcher(new OrServerWebExchangeMatcher(
Arrays.asList(new PathPatternParserServerWebExchangeMatcher(endpoint1, null),
new PathPatternParserServerWebExchangeMatcher(endpoint2, null)
)
)
)
).permitAll());
http.authorizeExchange(exchanges -> exchanges.pathMatchers(endpoint1, endpoint2).authenticated())
.x509(x509 -> x509.principalExtractor(authenticationService).authenticationManager(authenticationService))
.httpBasic(Customizer.withDefaults())
.securityContextRepository(NoOpServerSecurityContextRepository.getInstance());
return http.build();
}
身份证明验证似乎可以与此配置一起使用。此外,authenticationService是一个自动连接的Bean,它实现了所有必需的接口,但它的实现似乎与这种情况的根本原因无关,因为在验证尝试期间没有调用任何已实现的方法。
1条答案
按热度按时间beq87vna1#
为了避免空证书,客户端授权应设置为“需要”模式。如果通过**.properties**文件进行配置,则可以这样做:
服务器.ssl.客户端验证=需要