由SSL证书引发的微信公众平台token验证失败问题
起因
第一次尝试用java去搭建一个微信公众平台,在验证token的时候遇到了各式各样的问题,很多在网上也没有找到比较合适的说法只能自己一步步尝试,在这里记录分享一下也希望其他的朋友能在遇到类似的问题时少走弯路,以下内容多图预警
经过
起步的一些操作,比如如何申请微信公众号,代码中需要添加什么内容等在微信官方文档和其他博客中有详细说明,在此不做赘述。
我遇到的第一个验证失败是系统发生错误,请稍后重试
我是用的springboot启动项目,也查看了80端口是正常启动也可以访问网页的,这个错误后来经过排查,是springboot启动默认使用的是http启动,如果使用https是访问不到的,于是我改成了http://开头,这次验证确实发到了我的服务器,也收到了请求,但还是token验证失败。
这里我远程debug了一下,查看代码逻辑调整了一下token解决了,也验证成功了
但毕竟用http看着怎么都会有点不爽,还是想用https,于是接着找教程,使用jdk自带的密钥生成工具keytool生成了SSL证书并配置在服务里,具体教程可自行百度,页面访问是可以访问了,但会提示您的连接不是私密连接,不安全,我的另一台mac的chrome浏览器则是直接认为这个网站返回了杂乱的证书,不允许访问。
网上又重新查了很多生成SSL证书的方法,都大同小异,并不能根本性的解决链接不安全的问题,即使能够访问页面了,公众号的token验证也还是过不了,人家只接受安全的SSL证书。
由于我用的是阿里云服务器,参考官方文档配置 SSL 证书并开启 HTTPS 安全访问前往购买SSL安全证书
但是价钱真的很贵…所以最终还是怂巴巴的选择了免费版
进入证书控制台
填写证书申请
由于在下还没域名,所以要先注册一个域名再绑定,心塞塞
花了一小时时间去淘了一个域名,实名认证,解析绑定,可算是可以用了,继续我们的认证之旅
参考上面的截图填写证书申请
完成之后很快会收到一条邮件
在阿里云平台上产品与服务中可以搜索SSL证书
然后下载对应格式的证书
由于我的项目是springboot项目内置tomcat,所以下载了tomcat服务器的SSL证书
获得证书之后,以下全文引用阿里云官网文档配置方法,不清楚的地方上文有链接请自行查阅:
绑定 SSL 到 JAR 包部署的应用
要为使用 JAR 包直接部署的应用绑定 SSL,需修改 application.properties 文件开启 SSL 配置,并将证书文件一同打包在 JAR 包中,使用 JAR 包部署应用,然后进入应用设置页面修改应用的 Tomcat 的应用端口为 8443。
修改 application.properties 文件开启 SSL 配置。配置示例如下:
server.ssl.enabled=true
server.ssl.key-store=classpath:{jks}
server.ssl.key-store-password=jks_password
server.ssl.key-store-type=PKCS12
将证书文件放置于 resources 路径下,并与 application.properties 在同一个文件层级,然后将部署包打包成 JAR 包。
请参见在 ECS 集群中创建 Java Web 应用,使用打包好的 JAR 包部署应用。
登录 EDAS 控制台,在页面左上角选择所需地域。
在左侧导航栏中选择应用管理 > 应用列表 ,在应用列表页面单击具体的应用名称。
在应用的基本信息页面的应用设置区域,单击 Tomcat Context 右侧的编辑。
在应用设置对话框中修改应用端口为 8443,单击配置 Tomcat。
证书的相关参数配置也可通过jdk的keytool命令获取:keytool -keystore -list -v XX.pfx -storepass 证书密码
,如果正常没打错的情况下会出现类似以下内容:
将上面的相关内容填写到springboot的application.properties文件相应配置中,如果不按照这个瞎填或者瞎抄别的地方的配置的话项目启动时会报错:Alias name [tomcat] does not identify a key entry
,别问我怎么知道的,要脸
现在能通过域名ping通服务器,也能通过服务器ping通localhost,但公众号通过域名和ip端口访问依然报系统发生错误,从之前的经验来看应该是没有调通接口,可能是负载均衡的问题,明天配置个负载均衡服务器试试
结果
通过配置一个nginx负载均衡服务器后解决了该问题,http默认访问网站80端口,https默认访问网站443端口,其中过程不详述,如下为nginx配置
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream 域名.com {server www.域名.com:9310;}server {listen 443;server_name www.域名.com;#charset koi8-r;#access_log logs/host.access.log main;ssl on;ssl_certificate nginx证书地址.pem;ssl_certificate_key nginx证书地址.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root html; index index.html index.htm;proxy_pass https://域名.com;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
由SSL证书引发的微信公众平台token验证失败问题相关推荐
- 微信公众平台-token验证失败(域名未备案导致替换方案)
描述:我使用的是域名访问,但是我的域名并没有经过备案. URL:http://your_domain/{main.py url 映射路径}Token:随便写一个3-32位的字串 {要和handle.p ...
- nodejs+express解决微信公众号token验证失败
nodejs+express解决微信公众号token验证失败 问题描述 下面是服务端代码 问题原因 解决方案 重新运行服务器问题解决 结语 问题描述 这里是测试号的状态,如果是公众号的话上边应该显示t ...
- php 公众号 验证失败,微信公众号Token验证失败的几种情况及解决办法
微信公众号Token验证失败的几种情况及解决办法 1. 思路看验证的文件,编码是否是:utf-8 无bom头的 2. thinkphp框架,要关闭调试模式,开启调试模式容易有错误代码出现,导致验证失败 ...
- php开发微信公众号token验证失败,Thinkphp5 微信公众号token验证不成功的原因
微信是中国最流行的社交软件之一,随着微信生态系统的建立,很多人也致力于公众号 相关的文章">微信公众号和微信小程序的开发,那么Thinkphp5 微信公众号token验证不成功的原因及 ...
- 微信公众平台Token验证
1. 首先给出测试项目的整体目录: 2. CoreServlet类: 当get请求的时候会执行get方法,post请求的时候会执行post方法,分别来处理不同的请求 package com.zjn.s ...
- 阿里云服务器配置微信公众号token验证失败解决办法
我使用的是阿里云服务器ECS 第一步 根据阿里云服务器提示部署LAMP环境 根据提示一步步完成 第二步 远程连接服务器 进入目录 /var/www/html/phpinfo.php 更改phpinfo ...
- 微信公众号token验证失败的一些总结
本文转载自: https://www.cnblogs.com/sunnor/p/5958272.html 作者:Sunnor 转载请注明该声明. 这几天准备弄一个微信公众号,在进行服务器配置的时候出现 ...
- 配置微信公众号token验证失败
微信公众号 服务器配置出现token验证失败, <?php //define your token define("TOKEN", "zlsh"); // ...
- 微信公众号token验证失败解决方法——php
这里附上配置表单,我傻逼一开始不知道什么意思,以为填写了url 和令牌 就可以成功 谁知道一直出现 ,token验证失败的信息. 后来看了下文档,如下 要返回参数给微信,返回成功则成为开发者: 所以我 ...
最新文章
- python连接oracle批量写入_oracle大数据量python导入实践-1w/s
- HelloWorld程序的代码编写
- 7-1 活动选择问题 (25 分)(思路+详解+扩展)宝 今天你AC了吗!!!
- Python函数定义变量报错:local variable ‘a‘ referenced before assignment
- 腾讯广告算法大赛 | 第二周周冠军心得分享
- C++ 类中特殊成员变量(常量、静态、引用)的初始化方法
- 解读前端开发工程师必备技能
- 关于[知识竞赛现场管理系统-双屏PPT版]内置的第三方答题平台以及[评委计分系统-双屏专业版]的特殊疑难问题 汇编
- RJ45网线接口详解
- TwinCAT 3 使用XML-server
- 微信公众号授权登录重复登录不跳转
- Model性能相关操作:select_related
- react-contexify 右键菜单动态生成
- python之捕鱼问题
- 使用Python连接阿里云物联网
- java火焰纹章攻略女神之剑_火焰纹章晓之女神图文攻略(4)
- CodeSys轴控指令使用方法
- 天龙八部科举答题问题和答案(全4/8)
- VC++获取不同Windows版本的方法
- eslint报错解决方案:--fix的使用
热门文章
- WPS 系列:∑求和
- NC6 查询工具类 QueryUtil.java
- 机器学习之数学系列(三)逻辑回归反向传播梯度计算公式推导
- 云台山风景区认养一片茶叶,对雪深思家乡的发展
- 【愚公系列】2023年06月 网络安全(交通银行杯)-二战时期的密码
- 【愚公系列】2023年06月 网络安全(交通银行杯)-神秘的字符串
- hbilderx 扫一扫_HBuilderX入门教程(一)
- 华为手机关闭蓝牙开发搜索_华为手机这3个功能必须关闭,宜早不宜迟,否则手机很容易变卡...
- 简谈Xilinx Zynq-7000嵌入式系统设计与实现
- 安卓分屏神器_最好用的安卓UI系统,网友盘点十一代MIUI,你更喜欢哪一款?