社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
此为团队成员从let’s encrypt获取的免费ssl证书。分别有ca_bundle.crt,certificate.crt,private.key三个文件。
首先将ca_bundle.crt用文本软件打开,复制内容到certificate.crt文件中,格式如下:
-----BEGIN CERTIFICATE-----
…
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
…
-----END CERTIFICATE-----
随后打开https://www.chinassl.net/ssltools/convert-ssl.html进行在线证书格式转换。
将生成好的.pfx复制到springboot中的resources文件目录下,并配置.yml/.properties:
server:
port: 443
ssl:
key-store: classpath:xxx.pfx
key-store-password: xxxx
key-store-type: PKCS12
enabled: true
如图为yml配置。在TzbApiApplication中配置:
/**
* http重定向到https
* @return
*/
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(443);
return connector;
}
测试代码:
@Controller
public class TestApi {
@ResponseBody
@GetMapping("/test")
public String test() {
return "hello";
}
}
启动Springboot,可以顺利看到:
2019-04-25 15:39:25.708 INFO 8652 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 443 (https) 8080 (http) with context path ''
页面显示:
可以看到顺利跳到https下,但由于证书绑定了域名,用本地访问会出现证书和机构不匹配的情况,故仍然会报不安全的提示。可以点击不安全进行证书信息的查询。
本人在配置的过程中曾遇到Failed to start component [Connector[HTTP/1.1-443]]信息,提示信息为443端口启动失败。
调用cmd进行端口命令查询:netstat -ano | findstr “443”,发现并没有被占用。
经过不断调试,发现是yml配置格式不对(上文已经是修改过的正确格式),调整后发现可以顺利启动。
如若出现端口被占用的情况可以通过:tasklist | findstr “pid(端口进程号)” 进行查询,然后用:taskkill /f /t /im xxx.exe命令进行进程的杀除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!