做了一个微信小程序的项目,后端使用springboot,部署时需要部署ssl证书前后端之间使用https请求
1. 申请ssl证书
申请链接:https://www.trustauth.cn/marketing/freessl.html
申请后使用fullchain.crt来完成以下步骤。
2. 合成证书
因为springboot内置的有tomcat,所以ssl证书部署选择tomcat方式,因此需要合成jks证书
合成证书链接:https://www.trustauth.cn/SSLTool/tool/export_keystore.jsp
3. Tomcat上部署ssl证书
复制已正确合成的www.AAA.jks文件到Tomcat安装目录下的conf目录,使用文本编辑器打开conf目录下的server.xml文件(操作前备份server.xml,以备错误时恢复)找到并修改以下内容,我使用的是8.5的tomcat,不同版本的tomcat配置不太相同
<Connector port="9293" SSLEnabled="true" maxThreads="150" protocol="org.apache.coyote.http11.Http11NioProtocol"> <SSLHostConfig> <Certificate type="RSA" certificateKeystorePassword="1234567890" certificateKeystoreFile="conf/www.AAA.jks"/> </SSLHostConfig> </Connector>
最后保存该配置文件,然后重启Tomcat后再次访问即可。
默认的SSL访问端口号为443,如果使用其他端口号,则您需要使https://域名:port的方式来访问自己的站点,防火墙要开放相应的端口。
4. springboot配置https
将证书放置在resources文件夹下,书写相应的配置。
server.port=9292 server.ssl.enabled=true server.ssl.key-store=classpath:www.AAA.jks server.ssl.key-store-type=JKS server.ssl.key-store-password=1234567890
5. http转https
在启动类中写
@Bean public TomcatServletWebServerFactory servletContainer() { // TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { ... } 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(connector()); return tomcat; } @Bean public Connector connector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(httpPort); connector.setSecure(false); connector.setRedirectPort(httpsPort); return connector; }