更新时间:2022-02-21 GMT+08:00

回调接口实现及证书制作

回调接口实现

新建一个类并继承PushMessageReceiver,可以参考Demo中的PushMessageReceiverTest类,需要接收哪一类消息就重写对应的方法,如:
1
2
3
4
5
@Override
public void handleDeviceAdded(NotifyDeviceAddedDTO body) {
    System.out.println("deviceAdded ==> " + body);
    //TODO deal with deviceAdded notification
}
说明:
  • 接收到平台推送的消息后,开发者需要根据业务进行处理,但不建议进行复杂计算、I/O操作或者可能长时间等待的动作,可以先写数据库,应用进入相应界面或者刷新界面再从数据库取数据并进行数据处理。
  • 回调路径已在SDK中设置好了,所以在订阅时要注意订阅对应的回调地址,具体可参考《北向JAVA SDK API参考》文档中消息推送章节的接口。
  • 回调的IP地址则是服务器的地址,需要是公网地址。
  • Demo工程的回调端口配置在src\main\resource\application.properties中:
    1
    2
    #specify the port of the web application
    server.port=8099
    

回调证书制作

本章节以自签名证书为例。如果是使用商用证书,请直接向CA机构申请。

  1. 打开windows命令行窗口,输入where java,找到jdk所在路径,进入jdk的bin路径。

    1
    2
    where java
    cd /d {jdkbin路径}
    

  2. 使用如下命令生成tomcat.keystore文件。

    1
    keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500
    

    • 如果jdk的bin目录下已有tomcat.keystore,建议先将已有的tomcat.keystore移到别的路径下。
    • “您的名字与姓氏是什么”要输入应用服务器的IP或域名。
    • <tomcat>的密钥口令要与密钥库口令设置一致(最后一步按回车即可),输入的密钥库口令要记住,后续配置会使用到

  3. 将IoT平台提供的根证书ca.pem放到jdk的bin目录下,并使用如下命令将其加到tomcat.keystore的信任证书链中。

    1
    keytool -import -v -file ca.pem -alias iotplatform_ca -keystore tomcat.keystore
    

    输入密钥库口令,查看导入的证书内容,确认无误后,输入y即可。

    说明:
    • 平台的测试根证书ca.pem可以在JAVA SDK包的cert目录下找到。
    • 将IoT平台提供的根证书ca.pem加到tomcat.keystore的信任证书链后,由ca.pem签发的子证书就能得到应用服务器的信任。

  4. 将tomcat.keystore放到Demo工程目录下,例如:src\main\resources,打开src\main\resource\application.properties,添加如下配置。其中,server.ssl.key-store 为tomcat.keystore 所在路径,server.ssl.key-store-password为密钥库口令。

    #one-way authentication (server-auth)
    server.ssl.key-store=./src/main/resources/tomcat.keystore
    server.ssl.key-store-password=741852963.

  5. 右键单击PushMessageReceiverTest,选择Run As > Java Application ,运行Demo中的PushMessageReceiverTest类。运行结果如下:

    说明:

    当有数据推送到应用服务器时,就会进入相应的回调函数中。

回调证书导出

  1. 使用浏览器打开回调地址https://server:8099/v1.0.0/messageReceiver,以Google为例,并查看证书。

    server是应用服务器的地址(即本机地址),8099是在application.properties中配置的端口。

  2. 系统将弹出证书窗口,选择“详细信息”,单击“复制到文件”

  3. 单击“下一步”,进入“导出文件格式”界面,选择“Base64编码”,然后单击“下一步”

  4. 指定证书的保存路径,完成证书导出。

    1. “要导出的文件”界面,单击“浏览”,选择一个路径,输入文件名,单击“保存”,回到证书导出向导,单击“下一步”

    2. 单击“完成”,完成证书导出。

    如果应用服务器最后部署到云上,可能会有多级证书,建议在部署完成后再导出证书。此时需要将证书链上面几级的证书一一导出

  5. 若存在多级证书,需一一导出。

    1. “证书”窗口,选择“证书路径”,查看多级证书,选中证书路径中的某个证书,单击“查看证书”

    2. 系统将弹出证书窗口,选择“详细信息”,然后重复上述导出证书的步骤,导出已选证书。

  6. 使用文本编辑器,将所有导出的证书以首尾相连的方式,合并为一个.pem格式的文件。该文件需要上传到IoT平台相应的应用下。

  • Demo中的配置为单向认证,在导出证书后需要修改为双向认证。将以下配置打开(去掉注解,修改tomcat.keystore目录与密码),由于已将平台的根证书加入tomcat.keystore的信任证书链中,所以不需要再做其他修改,重启一下服务器即可。
    #two-way authentication (add client-auth)
    server.ssl.trust-store=./src/main/resources/tomcat.keystore
    server.ssl.trust-store-password=741852963.
    server.ssl.client-auth=need
  • 单向认证较之双向认证安全度低,请使用双向认证。

回调证书上传

  1. 登录开发中心,进入相关项目。
  2. 选择应用 > 对接信息,单击“证书管理”
  3. 单击“添加”,上传证书。