SpringBoot启动jar配置SSL证书

发布时间:2022/5/27 10:25:31 打印 字号:

本文主要针对SpringBoot微信小程序jar包运行的项目如何配置SSL证书。

关于域名:请确定域名已经获得ICP备案,服务器对外端口开放。

根据⼩程序官⽅⽂档描述,微信⼩程序的wx.request请求有如下⼏点要求。

● 域名⽀持https(request、uploadFile、downloadFile)和wss(connectSocket)协议;

● 域名不能使⽤IP地址或localhost,且不能带端⼝号;端口号⽀持443(https请求默认为443),并且必须是⼀个域名例如www.gworg.com⽽不能是IP地址。

● 域名必须经过ICP备案;

● 出于安全考虑,api.weixin.qq.com不能被配置为服务器域名,相关API也不能在⼩程序内调⽤。开发者应将appsecret保存到后

台服务器中,通过服务器使⽤appsecret获取accesstoken,并调⽤相关API。


配置教程

一、Gworg下载SSL证书,里面有文件包:Tomcat文件夹JKS证书service.txt里面有证书密码。


二、配置项目:

打开项目目录:src->main->resources中,把我们上面的两个文件放进去

20200304201836523.png

修改application配置文件,application配置文件,有两种格式properties和yml ;

内容相同,格式不同;请不要混用!当前项目文件使用的yml,将properties也写在下面。

注意:每个属性的分号后面必须加个空格,比如port: 443,而不是port:443)

application.yml添加的内容如下:

server:
    port: 443   #https的默认端口就是433 不能修改
    ssl:
        key-store: classpath:www.gworg.com.jks        #证书pfx的名字
        key-store-type: JKS                               #证书的类型
        key-store-password: ********                      #service.txt中的密码

application.properties添加的内容如下:

20200304202533362.png


三、如果存在HTTP,可以设置重定向到HTTPS(也可以不设置)

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * http重定向到https
 * @return
 */
@Configuration
public class SecurityConfig
{
    @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;
    }
 
}


四、将项目打包成jar包

20200304202953123.png

打开项目文件夹-->targer文件夹,可以看到jar包

2022030425151515.PNG

2022527105159.PNG




关于项目的其它问题:

如果之前一直都是jar包的方式部署到tomcat的小伙伴,可以跳过这一部分。

由于一开始我是采用导出war包的方式部署到tomcat服务器,因此可能会在pom.xml中会添加如下的代码:

<packaging>war</packaging>
这时候使用maven导包的时候,就需要把war改成jar。

因为war包形式部署一般都是将整个war包放在tomcat中的webapps目录中启动,使用的是服务器的tomcat,然而SpringBoot会自动嵌入tomcat,所以我会在pom.xml中再添加如下代码:
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 移除嵌入式tomcat插件 -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
               </exclusion>
            </exclusions>
        </dependency>

        <!-- 移除之后会报错,加入下面的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

但是这时候我们使用的是jar包形式部署,jar包形式直接使用SpringBoot内置的tomcat,因此我们需要把上面的代码注释掉或者删掉,更改后如下所示:

<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <!-- 移除嵌入式tomcat插件 -->
    <!--            <exclusions>-->
    <!--                <exclusion>-->
    <!--                    <groupId>org.springframework.boot</groupId>-->
    <!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
    <!--                </exclusion>-->
    <!--            </exclusions>-->
            </dependency>

            <!-- 移除之后会报错,加入下面的依赖 -->
    <!--        <dependency>-->
    <!--            <groupId>org.springframework.boot</groupId>-->
    <!--            <artifactId>spring-boot-starter-tomcat</artifactId>-->
    <!--            <scope>provided</scope>-->
    <!--        </dependency>-->

这一部分只是针对类似我这种情况的小伙伴提出的建议,如果一直都是采用jar包方式部署则可以忽略直接看下一部分。


运行jar包

我比较喜欢在运行jar包时同时创建日志,方便自己后期的检查维护,因此我们直接到jar包的目录下,输入如下Linux命令行

nohup java -jar test.jar >temp.txt &

nohup就是不挂断运行命令,如果终端关闭时,仍然可以运行此jar包,后面的temp.txt就是日志文件,没有则自动创建,当然你也可以选择不输出日志文件,命令行如下所示

nohup java -jar test.jar &

使用https访问

在浏览器中输入你的url,成功访问!

20190411210155226.png