springboot配置ssl证书,同时支持https、wss和ws、http

如题,看了网上一些文章,其实都还不错,只是感觉不够完整,今天自己操作了一把,特整理起来供同行们参考。

前提说明一下,配置成功https了也就可以通过wss连接了,底层应该都一样,只是wss是个长连接。

获取证书

要配置ssl证书,也就是通过https访问,首先得有个证书吧。有不太了解ssl证书、https是干啥的先去补充这方面知识,这里不做讲解。不过不了解也不妨碍可以通过这篇文章可以把你的项目搞成可通过https去访问的最终效果实现,哈哈,是不是很神奇。做我们这行就是这样,可能你不是很了解1、2、3,但最终需要10,我们也能想办法搞定。知其然,可以不知其所以然,当然我说是可以不知。如果精力允许的话最好是都搞明白。好了扯远了进入正题。

获取证书可以有两种方式,购买云服务器的从云服务厂商那获取,网上教程很多,这里不展开讲。第二种自签发证书,一般我们开发、调试的时候在本地,总不可能写一点代码往服务器部署一版吧,这里详细讲一下这种方式。

最终都是获取到一个后缀pkcs12的文件和一串密码。

从阿里、腾讯等厂商获取

自行百度,哈哈。

这里做一点说明,厂商都会提供各种格式的证书供选择,选其中那个pkcs12就好了。

自签发证书

这里讲通过openssl工具生成证书,通过这个工具有个啥好处呢,可以通过ip签发证书,我想我们开发的时候你机子不会搞个域名吧,当然你搞个dns啥的可能也行,不过感觉没必要。我是在linux服务上安装的工具,然后生成的证书,在本地使用,感觉有点绕了,应该有在本地生成的办法,欢迎有试过的小伙伴补充一下。

安装工具

通过yum安装,我这是centos系统啊,ubantu稍微有点差异。

yum install openssl openssl-devel -y

生成一个RSA密钥 (私钥)

openssl genrsa -out server.key 2048

生成一个证书请求

openssl req -new -key server.key -out server.csr -subj 
"/C=CN/ST=Beijing/L=Beijing/O=power Inc./OU=Web Security/CN=192.168.5.4"

字段解读

C字段:Country,单位所在国家,为两位数的国家缩写,如:CN 表示中国;
ST 字段:State/Province,单位所在州或省;
L 字段:Locality,单位所在城市/或县区;
O 字段:Organization,此网站的单位名称;
OU 字段:Organization Unit,下属部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
CN 字段:Common Name,替换成自己的ip;

自己签发证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

转换为pkcs12格式

这里会提示输入两次密码,国际惯例123456

一定要记住,稍后需要配置到项目里。

openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.pkcs12

 这时候应该会有这几个文件

 最终用到的是server.pkcs12 这个

springboot配置证书

这一步就比较简单了

拷贝证书到项目中

路径不在这也没关系,只要和后面配置的路径一致就好了。

配置

server:
  port: 9083
  # 当使用https时有需求同时支持http场景时http端口
  # http-port: 9084
  ssl:
    key-store: classpath:static/server.pkcs12 #对应刚才文件放置的路径
    key-store-password: 123456 #对应生成证书时的密码
    key-store-type: pkcs12

 这里有个点需要注意一下,就是有的小伙伴可能会发生项目读取不到证书文件的问题。看了网上好多办法需pom文件配置一些东西,个人建议如果搞不清楚所以然的话不要乱配置,可能会发生意想不到的后果哦~。

这是我pom文件,什么也没有配置:

 教大家一个简单的办法,如果没有特意配置什么的话,直接在maven那clear一下大概率能解决。

 启动项目

ok,效果。完美启动!

注意

好啦,访问试试吧。

写个测试接口

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/test")
    public void test(String id){
        System.out.println("data: "+id);
    }
}

重新启动项目 

浏览器输入地址访问试试

注意一定是https哦~

完,啥情况,不会搞了半天搞瞎了吧~~

别急,因为是自签发证书的原因,生产上我们肯定用大厂颁发的证书的。

所以设置一下,选择信任就好了。

不同的浏览器或工具设置方式可能不一样,不过应该都大同小异。

我用的是火狐,贴出来看一下吧

 效果就是这样滴,因为测试代码,能省则省,连返回值都省了。

还是能从idea控制台看到请求成功了的。

ok,到此ssl证书配置完成。

wss也可以测试一下, 

 

 猜想到应该也是自签发证书的原因

 果然被我猜中了。因为这个wss客户端工具我不知道咋设置信任自签发证书,就这样了。

另外wss服务端代码就不贴了,有点长,也不是本文的重点,网上这种例子一大堆。

总结

只要是https通了wss大概率也没问题,看到了吧,spring boot配置ssl证书很简单,业务代码一点都不需要改动,只需上面几步就搞定。

同时支持http、ws

按上面的配置完成后,以后请求只能用https了,用http是请求不到了,不信你看:

ok,有的小伙伴又来了,能不能同时支持http、ws和https、wss啊。

哎哟,还真是贪心啊,鱼与熊掌还想兼得。

好吧,其实我就是这种贪心的淫~~~  嘿嘿~~~

上代码

/**
 * @author lil
 * @Description: 配置https后同时支持http
 * @date 2022/7/22 9:57
 */
@Component
public class TomcatServerCustomer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
    @Value("${server.http-port}")
    public Integer httpPort;

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(httpPort);
        factory.addAdditionalTomcatConnectors(connector);
    }
}

加配置

要想同时支持http和https 只能分开不同的端口

看效果

启动项目

 ok,完美!

啥,想一个端口实现http和https同时访问? 请你死远一些,谢谢~~~~

哈哈 开玩笑~~

要在Spring Boot配置SSL WSSWebSockets over SSL),你需要遵循以下步骤: 1. 生成SSL证书:首先,你需要生成一个SSL证书,可以使用工具如keytool、openssl等来生成证书。确保证书包含服务器名称和相关其他信息。 2. 配置Spring Boot应用程序:在Spring Boot的应用程序配置文件(通常是application.properties或application.yml)中,添加以下配置: ``` server.port=443 server.ssl.enabled=true server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=your_password server.ssl.key-store-type=JKS server.ssl.key-alias=your_cert_alias ``` 这些配置将启用SSL,并指定SSL证书的位置和密码。 3. 配置WebSocket:如果你使用Spring WebSocket来实现WebSockets,你需要在应用程序中创建一个WebSocket配置类,并覆盖`registerWebSocketHandlers`方法。在该方法中,添加以下代码来配置SSL连接: ``` .setAllowedOrigins("https://your-domain.com") .withSockJS() .setInterceptors(myHandshakeInterceptor()) .setWebSocketEnabled(true) .setSessionCookieNeeded(true) ``` 这些配置将允许只有来自指定域的请求才能访问WebSockets,并启用SSL连接。 4. 重新启动应用程序:保存配置文件并重新启动Spring Boot应用程序。 5. 测试:使用wss://your-domain.com或wss://localhost:443等URL来测试WebSocket连接是否已成功配置。 这是一个简单的Spring Boot配置SSL WSS的步骤,你可以根据你的实际需求和环境进行调整和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值