SpringBoot配置使用SSL,使用https(单向认证)

1.生成证书,可以使自签名或者从SSL证书授权中心获得的

JDK中keytool是一个证书管理工具,可以生成自签名证书。

我这里是windows系统,打开命令行,执行:

keytool -genkey -alias bitservice -keypass bitservicepwd -keyalg RSA -keysize 1024 -validity 365 -keystore D:/bitservice.keystore -storepass bitservice

参数说明:

keytool 

-genkey 

-alias bitservice(别名) 

-keypass bitservicepwd(别名密码) 

-keyalg RSA(算法) 

-keysize 1024(密钥长度) 

-validity 365(有效期,天单位) 

-keystore D:/bitservice.keystore(指定生成证书的位置和证书名称) 

-storepass bitservicepwd(获取keystore信息的密码)

 

命令执行完成后,窗口下方有个建议“迁移到行业标准格式PKCS12”,只需要执行它建议的命令即可。

图示:

图示

此时证书已在D盘根目录生成,文件名称“bitservice.keystore”

2.SpringBoot配置SSL

1. 把bitservice.keystore拷贝到项目的src/main/resources下,和application.properties同级

2. 修改application.properties文件,添加如下内容:

server.port=443
server.ssl.key-store: src/main/resources/bitservice.keystore
server.ssl.key-store-password: bitservice

3. 配置同时支持http和https访问项目,在启动类中添加如下内容:

@Bean
    public EmbeddedServletContainerFactory servletContainer() {

        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected void postProcessContext(Context context) { //org.apache.catalina.Context

                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
        return tomcat;
    }

    private Connector initiateHttpConnector() {

        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(443);
        return connector;
    }

到此整个配置完成,启动项目进行测试,在浏览器地址栏输入http://127.0.0.1/和https://127.0.0.1/均可访问(http会自动跳转到https)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值