问题描述
微信小程序开发过程中,官方提供的wx.request()函数仅仅支持https请求。而使用springboot在本地开发后端时,一般不指定访问的方式,即是通过localhost:8080/addr的方式进行访问。这样一来,微信小程序发出的request请求就不能很好被后端代码接收。此时,需要进行ssl证书的配置,打通小程序请求的通路。
解决方法
1. SpringBoot 开启https访问
- JDK自带的keytool生成自签证书
以管理员身份运行CMD,输入命令:
keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "D:/data/ssl/testhttps.keystore"
各个参数的含义如下:
参数 | 含义 |
---|---|
genkey | 创建一个新的密钥命令 |
alias | 表示 keystore 的别名,此处是testhttps |
keyalg | 使用的加密算法,此处是RSA |
keysize | 密钥的长度,此处是2048 |
validity | 密钥的有效时间,单位为天 |
keystore | 生成的密钥存放路径,自行修改 |
- 有的JDK版本应该会给出一个warning,并给出修改建议,将密钥迁移到行业标准格式 PKCS12。
2. 在springboot 中项目配置证书
- 将第一步生成的 testhttps.keystore 文件复制到 /resource 目录下(即classpath目录),关于路径有如下博客可以参考:classpath路径说明
- 在application.yml 配置文件中添加ssl 相关配置
server:
port: 8090
ssl:
key-store: classpath:testhttps.keystore # 类路径下的自签证书
key-alias: testhttps # 证书别名
key-store-password: 123456 # 证书密码,就是第一步中的密钥口令
key-store-type: pkcs12 # 格式要保持一致,确认第一步是不是迁移了格式
enabled: true # 开启证书验证
3.验证连通
把后端的springboot项目运行部署起来,用https://localhost:8080/addr的路径去访问,由于是自签证书,浏览器可能会认为它是危险地址,不用理会,继续访问,应该就可以连通了。
参考文章:
springboot部署:https://blog.csdn.net/jiey0407/article/details/126114085
JDK生成证书:https://blog.csdn.net/kunlyy/article/details/105399255
补充知识
- 利用mkcer工具创建本地LocalHost-SSL证书:https://blog.csdn.net/y117862654/article/details/130858575?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130858575-blog-131000774.235%5Ev38%5Epc_relevant_anti_vip_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130858575-blog-131000774.235%5Ev38%5Epc_relevant_anti_vip_base&utm_relevant_index=2
- 利用OpenSSL生成本地Https证书:https://blog.csdn.net/huyaguang/article/details/128192978