springboot安装SSL证书(微信小程序后台访问)

  • Post author:
  • Post category:小程序


背景

搭建微信小程序后端(我使用的是java的Springboot+SSM框架)时发现微信小程序在“”“真机调试”和“上线”后request请求后端需要后端服务通过https合法请求,https请求需要安装SSL证书,故写一段以供下次搭建参考



SSL安装误区

我们安装SSL证书时网上有大批大佬的文章教程,但大多是localhost本机生成的SSL证书(openssl等工具),这类证书的功能只能是将原先request的http请求改为https请求(无效证书),只能用于测试阶段。但在上线后像微信小程序这样的官方请求需要官方审核的SSL证书(有效证书)(证书一般做申请域名时同步申请,有免费的SSL证书),一下是一些搭建时容易走进的误区:

  1. 必须去官网(腾讯云或阿里)申请有效的SSL证书;
  2. 网上的SSL生成教程只要是看到是让你安装什么软件(openssl等)然后输入密码、城市、邮箱等生成SSL的软件,都不用理会,这些软件生成的https只适合使用做无需校验证书有效性的请求;
  3. 网上的通过电脑安装IIS添加导入ssl证书,再做右侧网站上点击ssl配置,配置SSL是可行的,但有些服务器无效(原因未知);
  4. 网上的通过安装nginx导入ssl证书,我的服务器使用这种方法依然无效,故不推荐;



步骤一

下载证书

我使用的是腾讯云,证书是在申请域名的时候同步申请的SSL证书,直接前往腾讯云“SSL证书”找到我的证书下载即可。

下载证书



步骤二

下载解压后打开tomcat文件夹(我们后端使用的是java Springboot+SSM故配置tomcat就行)

解压后文件夹样式

tomcat文件夹

可能一:打开后一般会有一个jks文件和一个txt文件,txt文件就是解密密码,后面要用的。

可能二:如果打开后只有一个jks文件,深呼吸不要慌,这是因为原来申请证书的时候已经设置私钥密码了,头脑风暴一下,好好想一想这个密码

可能二



步骤三

打开后端源代码编程软件(我的是IDEA),将刚才tomcat文件夹下的.jks文件放到代码resources文件夹下

拖进入就行



步骤四

打开配置文件application.properties

添加

server.ssl.enabled=true

#rh13456.xyz.jks就是刚才的jks文件名

server.ssl.key-store=classpath:rhyuq.xyz.jks

#98042123就是步骤二里的密码

server.ssl.key-store-password=98042123

server.ssl.key-store-type=JKS

配置



步骤五

配置启动函数

@SpringBootApplication

@EnableAsync

@EnableScheduling

@ServletComponentScan

@ComponentScan(“zy.cloud.copy.controller”)

@ComponentScan(basePackages = {“zy.cloud.copy.service”})

public class CopyApplication {

public static void main(String[] args) {
    SpringApplication.run(CopyApplication.class, args);
}


// 如果没有使用默认值80
@Value("${http.port:80}")
Integer httpPort;

// 正常启用的https端口 如443
@Value("${server.port}")
Integer httpsPort;

// springboot2 写法
@Bean
@ConditionalOnProperty(name = "condition.http2https", havingValue = "true", matchIfMissing = false)
public TomcatServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint constraint = new SecurityConstraint();
            constraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            constraint.addCollection(collection);
            context.addConstraint(constraint);
        }
    };
    tomcat.addAdditionalTomcatConnectors(httpConnector());
    return tomcat;
}

@Bean
@ConditionalOnProperty(name = "condition.http2https", havingValue = "true", matchIfMissing = false)
public Connector httpConnector() {
    System.out.println("启用http转https协议,http端口:" + this.httpPort + ",https端口:" + this.httpsPort);
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    // Connector监听的http的端口号
    connector.setPort(httpPort);
    connector.setSecure(false);
    // 监听到http的端口号后转向到的https的端口号
    connector.setRedirectPort(httpsPort);
    return connector;
}

}

添加这段

这样后端就已经配置好了,只需package打包代码就行

打包



步骤六

把jar包放到服务器上运行就行,在浏览器请求后端数据,请求头用https://;然后点击这个不安全查看证书是否有效就行

查看

end

2021-05-19 10:55:00

zhang



版权声明:本文为weixin_43866483原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。