[2019-12-07 13:05:02 最后更新]
[苹果/ios/apns/golang]苹果推送go语言实现在windows2003下报x509: certificate signed by unknown authority的问题
题目起得非常长,因为担心网友们搜索不到它。
我用的是 github.com/sideshow/apns2
今天发现在 windows server 2003 的老机器上没有发送消息报告到手机上,查看了服务器日志又是调用了苹果的接口了的。于是用测试程序在服务器上运行发现报
"x509: certificate signed by unknown authority" 一看,这不是证书问题嘛,重新更新上传证书 ... 仍然失败。来回几次无奈下搜索 apns2 的源码,并没有这个错误提示,
那说明是网络问题,更新了服务器 dns 等于,仍然失败! 搜索这个关键字,发现有网友说是 golang 发现对方证书错误时报的。这... golang 的提示也太简化了,我马上知道
了这是苹果的根证书在 win2003 上没预装,我一开始还以为是 2003/xp 家族少某些新的 dll 函数(现在的新语言实现经常因为调用了最新的 windows 接口函数导致不能在
xp/2003 下使用),但在 xp 下出乎意料的成功了!这实在也没太吃惊,因为我更新过本机 xp 的 https 补丁。不过我打算找出真实的原因,所以并没有立即给 2003 也打这个补丁。
而是继续测试,通过对 apns2 和 http://newbt.net/ms/vdisk/show_bbs.php?id=D895AA1C4795ED2B5BD6EBA4230151D3&pid=164 处的http 处理方法,我用类似于此帖子
的方法让 golang 不校验服务器证书就完事了。方法是 InsecureSkipVerify: true 修改 github.com\sideshow\apns2\client.go 中的以下代码
//--------------------------------------------------
//clq 尝试解决 "x509: certificate signed by unknown authority" ,似乎是客户端报服务器有问题
//TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
//req.TLS = nil;
//--------------------------------------------------
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{certificate},
InsecureSkipVerify: true, //clq add
}
可参考 https://studygolang.com/articles/11175
另外对于自己加根证书的方法见后面的回贴.
--------------------------------------------------
ps.相关的站点是 https://api.push.apple.com/ 确实太新,几年前的 firefox 版本就打不开,说算法太新。相关的老 ie 浏览器也是打不开的。
涉及的证书是 "Apple IST CA 2 - G1" "GeoTrust Global CA"
https://zhidao.baidu.com/question/1733164917548085627.html
这个怎么弄? 50
服务器“221.176.1.138”具有“GeoTrust Global CA”颁发的有效证书,但“GeoTrust Global CA”未配置为该配置文件的有效信任密钥。而且,服务器“221.176.1.138”未配置为有效的 NPS 服务器,无法连接到该配置文件。
最佳答案
jyjy008
推荐于2017-11-26
WIN7如下,运行栏中输入certmgr.msc,打开证书管理器
操作→查找证书→输入GeoTrust Global CA→立即查找
从查出的列表里选择GeoTrust Global CA(有两个),
右键“属性”,勾选“证书目的”里的“启用此证书的所有目的”,
然后再连接无线网,输入用户名和密码。