Springboot配置ssl证书踩坑记

Springboot配置ssl证书踩坑记

  • 1、准备材料
  • 2、转换成.pfx格式证书
  • 3、Springboot配置
  • 4、测试
  • 5、配置过程中遇到的问题

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进行在线证书格式转换。
Springboot配置ssl证书踩坑记_第1张图片

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配置ssl证书踩坑记_第2张图片
可以看到顺利跳到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命令进行进程的杀除。

你可能感兴趣的:(出现的问题)