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

初始化及证书配置

新建一个NorthApiClient实例,设置好ClientInfo(包括平台IP、端口、appId和密码),再初始化证书。

  • 平台IP、端口、appId和密码都是从配置文件./src/main/resources/application.properties中读取的,因此,当这些信息发生变化时,只要修改配置文件,不用修改应用服务器的代码。
  • 本章节所指的证书是平台提供的,在调用平台接口过程中使用;一般情况下,与回调使用的证书不一样。

使用测试证书

如果使用测试证书:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
NorthApiClient northApiClient = new NorthApiClient();

PropertyUtil.init("./src/main/resources/application.properties");

ClientInfo clientInfo = new ClientInfo();
clientInfo.setPlatformIp(PropertyUtil.getProperty("platformIp"));
clientInfo.setPlatformPort(PropertyUtil.getProperty("platformPort"));
clientInfo.setAppId(PropertyUtil.getProperty("appId"));
clientInfo.setSecret(PropertyUtil.getProperty("secret"));

northApiClient.setClientInfo(clientInfo);
northApiClient.initSSLConfig();//默认使用测试证书,且不进行主机名校验

使用指定证书

如果不使用测试证书,可使用指定证书(如商用证书):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
NorthApiClient northApiClient = new NorthApiClient();

PropertyUtil.init("./src/main/resources/application.properties");

ClientInfo clientInfo = new ClientInfo();
clientInfo.setPlatformIp(PropertyUtil.getProperty("platformIp"));
clientInfo.setPlatformPort(PropertyUtil.getProperty("platformPort"));
clientInfo.setAppId(PropertyUtil.getProperty("appId"));
clientInfo.setSecret(getAesPropertyValue("secret"));

SSLConfig sslConfig= new SSLConfig();
sslConfig.setTrustCAPath(PropertyUtil.getProperty("newCaFile"));
slConfig.setTrustCAPwd(getAesPropertyValue("newCaPassword"));
slConfig.setSelfCertPath(PropertyUtil.getProperty("newClientCertFile"));
slConfig.setSelfCertPwd(getAesPropertyValue("newClientCertPassword"));

northApiClient.setClientInfo(clientInfo);
northApiClient.initSSLConfig(sslconfig); //使用指定的证书,且默认使用严格主机名校验
使用指定证书时,如果不使用严格主机名校验,在调用northApiClient.initSSLConfig(sslconfig)之前可以自行设置主机名校验方法:
1
2
3
4
5
6
7
northApiClient.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String arg0, SSLSession arg1) {
        // 自定义主机名校验
        ……
        return true;
    }
});

主机名校验方法应以安全为原则,不应该直接返回true。