背景
搭建微信小程序后端(我使用的是java的Springboot+SSM框架)时发现微信小程序在“”“真机调试”和“上线”后request请求后端需要后端服务通过https合法请求,https请求需要安装SSL证书,故写一段以供下次搭建参考
SSL安装误区
我们安装SSL证书时网上有大批大佬的文章教程,但大多是localhost本机生成的SSL证书(openssl等工具),这类证书的功能只能是将原先request的http请求改为https请求(无效证书),只能用于测试阶段。但在上线后像微信小程序这样的官方请求需要官方审核的SSL证书(有效证书)(证书一般做申请域名时同步申请,有免费的SSL证书),一下是一些搭建时容易走进的误区:
- 必须去官网(腾讯云或阿里)申请有效的SSL证书;
- 网上的SSL生成教程只要是看到是让你安装什么软件(openssl等)然后输入密码、城市、邮箱等生成SSL的软件,都不用理会,这些软件生成的https只适合使用做无需校验证书有效性的请求;
- 网上的通过电脑安装IIS添加导入ssl证书,再做右侧网站上点击ssl配置,配置SSL是可行的,但有些服务器无效(原因未知);
- 网上的通过安装nginx导入ssl证书,我的服务器使用这种方法依然无效,故不推荐;
步骤一
下载证书
我使用的是腾讯云,证书是在申请域名的时候同步申请的SSL证书,直接前往腾讯云“SSL证书”找到我的证书下载即可。
步骤二
下载解压后打开tomcat文件夹(我们后端使用的是java Springboot+SSM故配置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