建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

Lily_y

发帖: 76粉丝: 21

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-6 19:59:51 3869 7 楼主 显示全部楼层
[干货分享] 如何上传正确的消息推送证书

消息推送应用实现消息推送的接口,部署证书,同时上传根证书到平台。
目前消息推送失败,很大一部分原因是证书上传不对。推荐小伙伴们使用下面的方法导出证书。

====================~~概念扫盲分割线~~====================

推送:平台调用应用服务器的restful接口将数据主动发给北向应用(这些restful接口是平台在北向接口文档的消息推送章节提前定好,由应用服务器实现的。)
回调地址:应用实现消息推送的restful接口时,可以自定义接口的URL,这些URL就是回调地址
订阅:应用服务器调用平台订阅接口,将回调地址设置给平台。

====================~~概念扫盲分割线~~====================

 1、使用IE浏览器打开回调地址(无论回调地址有没有应用界面)
如果是自签名的证书,会出现如下提示,选择继续:
image.png

比如这是我本地的应用服务,回调地址是https://XX.XX.XX.XX:8099/v1.0.0/messageReceiver,由于没有写GET方法,所以会提示405,不用管这个报错,只要能查看证书即可。

image.png

说明:如果打不开具体看提示什么错误,可能是服务没有启起来,或者服务有问题,也可能是使用了双向认证,得在浏览器中导入客户端证书才能打开

2、查看证书

IE浏览器:
image.png

谷歌浏览器:

image.png

如果使用的不是自签名证书,则不会报证书错误,(以百度为例):
image.png

在证书路径下可以看到有3级证书:
image.png

当前查看的证书是最后一级:
image.png

3、导出证书
在详细信息页签中选择复制到文件,点击下一步(如果按钮是灰的点不了,就用管理员权限运行ie再试一下
image.png

注意选择Base64编码格式:
image.png

然后下一步,选择一个路径保存导出的证书,最后点击完成:
image.png

4、查看证书文本内容证书导出后可以使用文本编辑器打开:
image.png
5、导出上级证书,合并证书
上面4个步骤只导出最后一级证书,如果应用部署在别人提供的云上,一般会有多级证书,点击上一级证书,再点击查看证书,这时证书的颁发者和使用者会随之改变,重复步骤1-4,再导出这一级证书。
有多少级证书就导出多少个证书。(最下面的baidu.com可以不导出上传,但加上也没关系,可以多传不能少传)
  image.png
注意:最上面一级证书是根证书,颁发者和使用者是一样的。


如果最上面一级的证书的颁发者和使用者不是一样的话,那么说明这个证书不是根证书,则还有证书没有部署到应用上,这时,要么得把根证书(这时浏览器上查看不到的根证书)一起加到导出的证书中;要么得调整应用部署的证书,再重新导出证书。image.png
把导出的证书都放到一个文件里,头尾相连(如下图所示):

image.png

证书文件后缀改为pem,就可以上传到平台上。 


有两个地方可以上传证书:

1、开发者portal->找到对应的应用->对接信息->应用安全->证书管理

2、SP portal->应用管理->在应用列表中找到对应的应用->应用定义(或应用详情)->消息推送->将推送协议修改为HTTPS->再上传证书


P.S. 追加证书校验方法,使用curl命令可以测试证书与回调接口是否匹配:

单向认证:


curl -H "Content-Type:application/json" -X POST -d '{"notifyType":"deviceDataChanged"}' https://127.0.0.1:443/test -v --cacert application_ca.pem 


其中https://127.0.0.1:443/test需要换成应用服务器的回调地址,application_ca.pem就是上面使用浏览器导出的证书(即应用服务器根证书)

双向认证:
curl -H "Content-Type:application/json" -X POST -d '{"notifyType":"deviceDataChanged"}' https://127.0.0.1:443/test -v --cacert application_ca.pem --cert client.CertwithKey.pem 
其中https://127.0.0.1:443/test需要换成应用服务器的回调地址,application_ca.pem就是上面使用浏览器导出的证书(即应用服务器根证书);client.CertwithKey.pem是客户端证书,只要是应用服务器信任的根证书签发的子证书就能校验通过,但对证书格式有要求。可以将平台提供的ca.pem加入应用服务器的证书信任链中,再使用平台提供的outgoing.CertwithKey.pem。

(以下是单向认证结果示例)
image.png


回复 举报
分享

分享文章到朋友圈

分享文章到微博

ecstatic

发帖: 10粉丝: 4

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-10 15:39:06 沙发 显示全部楼层

很有用的知识,收藏一下。

点赞 回复 举报

羽扇纶巾周...

发帖: 1粉丝: 1

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-14 16:31:02 板凳 显示全部楼层
ecstatic 发表于 2018-12-10 15:39 很有用的知识,收藏一下。

欢迎将你的经验也分享一下。。。

点赞 回复 举报

Dark_Sky

发帖: 90粉丝: 17

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-17 09:50:08 地板 显示全部楼层

Mark一下

点赞 回复 举报

yd_3561774...

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-1-28 14:25:26 5# 显示全部楼层
点赞 回复 举报

0574119

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-3-29 14:46:25 6# 显示全部楼层

看不明白怎么做?


第一条就不知道:“ 1、使用IE浏览器打开回调地址(无论回调地址有没有应用界面)”?


在什么地方使用IE浏览器打开回调地址?

是不是要在应用服务器上用IE打开回调地址?


在其他任何电脑上打开可以吗?





点赞 回复 举报

Dark_Sky

发帖: 90粉丝: 17

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2019-3-29 15:32:27 7# 显示全部楼层
0574119 发表于 2019-3-29 14:46 看不明白怎么做?第一条就不知道:“ 1、使用IE浏览器打开回调地址(无论回调地址有没有应用界面)” ...
  1. 回调地址有无应用界面都可以

  2. 可以在任何电脑上(不需要再应用服务器上,但是你应用服务器是处于开启的状态)打开IE浏览器

  3. 对照步骤把证书导出来就可以了

点赞 回复 举报

掘客宝

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-5-6 18:39:37 8# 显示全部楼层

大佬我是用的官方的php sdk 现在 deviceDataChanged 订阅 已经成功了 就是在PushMessageReceiverTest.php 这个文件里面$server = stream_socket_server('tls://xxx.xxx.xxx.xxx:443', $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); 这里一直报错 请问 是什么原因 携带的证书 是sdk 自带的证书 passphrase 用的 IoM@1234  服务器是linux 配置也都是好的

点赞 回复 举报

游客

您需要登录后才可以回帖 登录 | 立即注册