java SpringBoot对Https的支持

SpringBoot中如何开启Https?

参考:http://blog.csdn.net/u012702547/article/details/53790722

 

一、怎么做?

(1)生成证书

想要启用https,首先需要获得SSL证书。我们可以自己授权SSL证书,也可以从SSL证书授权中心获得证书。区别在于,客户端(比如浏览器)不会信任自己授权的证书,从授权中心获得的证书则没有这个问题。

很久以前我曾经申请过“免费”的SSL证书,但是一次都没有成功过…。如果要在生产环境上https,应该向信任的服务商购买证书。因为本文只是出于实验目的,所以我们自己尝试生成证书。

我们使用jdk自带的keytool工具生成证书。命令为:

参数的含义是:

执行命令之后,根据流程指示填写证书的详细信息即可。比较重要(需要记录)的三个参数为:密钥仓库类型storetype、密钥password、证书文件的路径keystore。

生成完毕后,我们将在指定目录下得到一个keystore.p12证书文件,稍后将会用上。

(2)修改SpringBoot的配置文件

增加如下配置:

对照填写生成证书时的信息即可。这些参数实际上是提供给SpringBoot内置的Tomcat使用的,相当于配置Tomcat开启https。

在填写key-store参数时可能会出现“找不到证书文件”问题。个人倾向于添加classpath,然后把证书文件keystore.p12放在resources目录下。

至此,SpringBoot应用已经支持https访问,只有8443端口可以访问,不再支持8080端口的http访问。

现在有个问题,就算我们开启了https,不知情的用户可能会按照习惯访问http,导致访问失败。如何“诱导”用户使用https是个关键问题。

(3)用户访问http时,跳转为https

为了解决上面的问题,我们必须实现这样一个功能:“在用户使用http访问应用时,在服务端把http链接重定向为https”。为此,我们实现一个配置类:

HttpsConfig.java

这段配置是从网上抄的,个人理解为:initiateHttpConnector负责把8080端口的http访问重定向到8443端口。servletContainer是SpringBoot中内嵌的Tomcat服务对象,负责处理https请求。

至此,所有http访问都会被重定向至https,强迫用户使用https的访问方式。

这里需要提到一个小问题,我在本机实验时,http确实会跳转为https,但是偶尔会访问失败,刷新之后恢复正常,个人难以理解发生了什么问题。

二、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注