SSL双向认证-SpringBoot项目

SSL双向认证需要CA证书,开发过程可以利用自签CA证书进行调试验证。

自签CA证书生成过程:SSL双向认证-自签CA证书生成

1.将server.p12证书和client.jks证书复制到项目resources目录下

2.修改配置文件,增加下述内容

#https端口
server.port=7001
#启用https
server.ssl.enabled=true

#是否启用客户端认证(双向认证),
#need需要验证客户端,不认证无法访问,none不验证客户端,want不强制验证,即验证失败也可以成功建立连接
server.ssl.client-auth=need

server.ssl.key-store=classpath:server.p12
server.ssl.key-store-password=123456

server.ssl.trust-store=classpath:client.jks
server.ssl.trust-store-password=123456

保存配置,启动项目。

3.利用apifox/postman或浏览器测试双向认证

没有证书无法请求

4.apifox添加证书:

这里不勾选SSL证书验证(自签证书无法通过验证)

点击证书管理:

证书配置完成后,请求成功:

Spring Boot 配置WebSocket SSL双向认证通常涉及到以下几个步骤: 1. **添加依赖**:首先,在`pom.xml`或`build.gradle`文件中添加WebSocket相关的Spring Websocket依赖,以及支持SSL/TLS的Spring Security依赖。 ```xml <!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- Gradle (Kotlin) --> implementation("org.springframework.boot:spring-boot-starter-websocket") implementation("org.springframework.boot:spring-boot-starter-security") ``` 2. **创建SSL证书**:生成一对公钥私钥对,比如使用`keytool`工具。在命令行运行类似下面的命令: ```sh keytool -genkey -alias server-cert -keyalg RSA -keystore keystore.jks -storepass password -keypass password ``` 3. **配置服务器端点**:在`Application.java`或其他启动类里,启用WebSocket并设置HTTPS监听: ```java @Configuration @EnableWebSockets public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { // ... } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket").withSockJS(); } @Bean public ServletServerContainerFactoryBean createWebSocketContainer() { ServletServerContainer container = new StandardServletWebSocketContainer(); container.setSecure(true); // 使用HTTPS // 如果需要SSLEngine设置,请在这里配置 return container; } } ``` 4. **配置Spring Security**:在`SecurityConfig`类中,启用WebSocket安全,并指定客户端证书验证: ```java @Configuration @EnableWebSecurity @EnableWebsocketAuthentication public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CertificateAuthenticationProvider certificateAuthProvider; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/ws/**").authenticated() .anyRequest().permitAll(); // 可能需要根据实际需求调整 http.certificateBasedAuthentication() .authenticationManager(authenticationManager()) .and() .apply(securityConfigurerAdapter); } @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return new DefaultWebSecurityConfigurerAdapter().authenticationManager(); } @Override protected void configure(WebSocketSecurity web) throws Exception { web.authorizeRequests() .anyMessage().authenticated() .and() .addCustomizer(new WebSocketSessionManagementExtensionAdapter(certificateAuthProvider)); } } ``` 5. **提供证书**:将生成的keystore文件放在应用目录下,并在`application.properties`或`application.yml`中指定路径: ```properties server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=password server.ssl.trust-store=classpath:truststore.jks server.ssl.trust-store-password=password ``` 6. **启动应用并测试**:启动Spring Boot应用,客户端连接到HTTPS地址,并提供正确的证书进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值