Springboot配置ssl证书踩坑记 - Go语言中文社区

Springboot配置ssl证书踩坑记


1、准备材料

准备材料
此为团队成员从let’s encrypt获取的免费ssl证书。分别有ca_bundle.crt,certificate.crt,private.key三个文件。

2、转换成.pfx格式证书

首先将ca_bundle.crt用文本软件打开,复制内容到certificate.crt文件中,格式如下:

-----BEGIN CERTIFICATE-----



-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----



-----END CERTIFICATE-----

随后打开https://www.chinassl.net/ssltools/convert-ssl.html进行在线证书格式转换。
格式转换

3、Springboot配置

将生成好的.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;
   }

4、测试

测试代码:

@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 ''

页面显示:
springboot测试
可以看到顺利跳到https下,但由于证书绑定了域名,用本地访问会出现证书和机构不匹配的情况,故仍然会报不安全的提示。可以点击不安全进行证书信息的查询。

5、配置过程中遇到的问题

本人在配置的过程中曾遇到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命令进行进程的杀除。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_16410733/article/details/89518650
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢