目的地管理
对HTTP、MQ等各类路由目的地进行分类管理。
HTTP目的地管理
负责HTTP URL类接收地址的统一管理。
1.URL管理
从左侧导航栏选择“消息流转”中的“目的地管理”,在页面左上方选择“HTTP”标签页,进入HTTP目的地管理页面。页面显示目前已经创建的HTTP目的地列表,包括URL、修改时间、描述、组织机构等信息。
点击右上方“新增目的地”按钮弹出新增目的地对话框,在框中添加URL地址,点击“确定”完成新增操作。用户可以在新增HTTP目的地对话框中为URL地址添加URL描述。如所添加的URL为专网地址,则需要勾选“专网地址”(注:目前HTTP目的地支持IPV6地址。另,若保存时提示专网地址错误,请联系运营人员维护进专网地址白名单)。
支持添加10个HTTP目的地地址,有特殊需求请联系客户经理。
如果用户定制的HTTP目的地地址中,存在HTTP地址,且没有启用数据加密,则弹出安全风险提示,用户确认后,才能进行下一步操作。如果用户点击取消或右上角关闭键,则返回新增HTTP目的地对话框;如果用户点击确认,则URL格式为HTTP格式。
如果用户启用消息加密,则需要填写加密Token。该Token将作为消息推送数字签名和数据加密的重要依据,需用户妥善保管。Token要求为8到16位字符。
在HTTP目的地管理列表右侧可以对已经创建的HTTP目的地进行操作,包括详情,编辑,删除,相关路由等。
点击“详情”按钮,弹出HTTP目的地详情对话框,包括URL,消息是否加密,是否为专网地址,URL描述,组织机构,创建时间,修改时间,推送指标统计等信息。如果URL为专网地址,该URL的右侧会有蓝色字段,内容为“专网地址”以作提示。推送指标统计中包括统计时间,推送速率,失败率,平均时延,上次失败时间,失败信息等内容。
点击“编辑”按钮,弹出HTTP目的地编辑对话框,可以编辑URL,消息是否加密,是否为专网地址,URL描述,加密Token等信息。
点击“删除”按钮,弹出删除提示对话框,点击确认即可删除HTTP目的地。
删除目的地时,如该目的地有关联路由和规则引擎则无法直接删除,需要取消关联后才可以删除。
点击“关联路由”按钮,可以查看该目的地关联的路由及规则引擎列表,可以通过点击关联路由对话框上方的标签页进行切换。
用户启用消息加密时,平台会对推送消息格式进行封装,格式为Json,格式如下:
{
“msg_signature”:”xxxxxx”,//消息数字签名
“enc_msg”:”xxxxxx”//加密编码后的消息内容}复制
其中,消息加密是基于用户配置的Token,采用AES对称加密算法,对推送消息内容进行加密,并将加密后的内容进行Base64编码后,推送给接收应用。接收方收到消息后,首先通过Base64进行解码,然后基于配置的Token,采用AES算法对消息内容进行解密。 消息数字签名是采用对推送消息加密内容(enc_msg)+Token取MD5的方式,对推送消息进行数字签名,将签名内容一并推送给接收应用。接收方收到消息后,可按照相同的方式对接收消息内容(enc_msg)+Token计算MD5,并与推送内容中的数字签名进行比较,如果相等则认为消息没有被篡改。 解密和MD5签名的代码参考如下:
public class AesUtil { private static Logger log = LoggerFactory.getLogger(AesUtil.class); private static final String CIPHER_ALGORITHM = "AES"; /**
* 默认编码
*/
private static final String CHARSET = "utf-8"; /**
* 通过密码/token 生产16位byte数组,password对应字节不足16位数组末尾补0,超过16位取前16位
*
* @param password
* @return
*/
private static byte[] encodeKey(String password) { byte[] result = new byte[16]; for (int i = 0; i < 16; i++) {
result[i] = 0;
} byte[] passByte = password.getBytes(); for (int i = 0; i < passByte.length; i++) { if (i >= 16) { break;
}
result[i] = passByte[i];
} return result;
} /**
* AES解密,对加密后的base64字符串进行解密
*
*/
public static String decrypt(String password, String data) { if (password == null || password.trim().length() < 1) { throw new RuntimeException("加密失败,key不能为空");
} if (data == null) { return null;
} try {
SecretKeySpec key = new SecretKeySpec(encodeKey(password), CIPHER_ALGORITHM);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16])); return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
} catch (Exception e) {
log.error("", e); return data;
}
} /**
* 根据传入的字符串,返回Base64编码的MD5值
*
* @param str
* @return
*/
public static String getMD5(String str) {
MessageDigest messageDigest = null; try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes(CHARSET)); byte[] byteArray = messageDigest.digest(); return Base64.getEncoder().encodeToString(byteArray);
} catch (NoSuchAlgorithmException e) {
log.error("", e);
} catch (UnsupportedEncodingException e) {
log.error("", e);
} return "";
}
}复制
2.CA证书管理
从左侧导航栏选择“消息流转”中的“目的地管理”,在页面左上方选择“HTTP URL”标签页,进入HTTP目的地管理页面。点击“CA证书管理”。页面显示目前已经创建的CA证书列表,包括证书名称、域名/IP与端口、是否检查Common Name、Common Name、所属机构等信息。
点击右上方“增加证书”按钮弹出增加证书对话框,在框中进行上传证书,填写域名端口,选择是否检查CN(Common Name)等操作,如需要检查CN时需要填写CN(需要与消息接收服务端证书保持一致),点击“确定”完成添加操作。证书格式支持pem,der,cer,crt四种,且证书大小不可超过1M。一个域名端口只可以配置一个证书。
在CA证书列表右侧可以对已经创建的CA证书进行操作,包括详情,编辑,删除等。
点击“详情”按钮,弹出CA证书详情对话框,包括证书名称、域名端口、是否检查CN、Common Name、组织机构,创建时间,修改时间等信息。
点击“编辑”按钮,弹出CA证书编辑对话框,可以重新进行上传证书,选择是否检查CN以及修改CN等操作,点击“确定”按钮完成修改。注意域名端口是不可以修改的。
点击“删除”按钮,弹出删除提示对话框,点击确认即可删除CA证书。子机构仅可以查看根机构下CA证书的数据,无法修改与删除不属于本机构的数据。
用户在上传证书时,需要将多级证书合并后上传。具体步骤如下:
应用部署在第三方云服务器上时一般会存在多级证书,首先需要导出CA证书和服务器端证书。导出方法如下(以百度网址为例):
i.点击链接前面的图标,在弹出的窗口中点击进入“证书”。
ii.在跳出的证书窗口中,点击“详细信息”,选择“复制到文件”,如果该选项是灰色的,则请以管理员身份运行 IE 浏览器。
iii.导出证书的编码格式请选择“Base64编码X.509(.CER)(S)”。然后点击“下一步”,选择一个路径保存导出的证书,最后点击完成。
iv.在证书的“证书路径”标签页下,点击“baidu.com”的上一级证书,然后点击“查看证书”,重复上述步骤将CA证书导出;
v.把导出的服务器端证书与CA证书首尾相连放在同一个文本文件里,并将文件后缀名保存为“.pem”。(注意是服务器端证书拼接在前,CA证书拼接在后)这样就可以将证书文件上传到平台上了。
MQ目的地管理
负责MQ 主题类接收地址的统一管理。
从左侧导航栏选择“消息流转”中的“目的地管理”,在页面左上方选择“MQ”标签页,进入MQ目的地管理页面。如果还没有开通 MQ消息推送,需先点击“立即开通”按钮。开通后,页面上方将显示TenantId和Token。在物联网市场购买了MQ消息推送特定topic主题后,MQ列表中将展示购买的topic,包括Topic名称、修改时间、描述、所属机构等信息。
在MQ目的地管理页面列表右侧可以对已经创建的MQ目的地进行相关操作,包括详情,编辑,删除,相关路由、续约等。
点击“详情”按钮,进入Topic详情页面,页面左侧显示Topic名称,Topic ID,描述,创建时间,消息堆积量和Topic推送速率等信息。页面右侧显示Topic缓存空间使用情况。页面下方显示接收端状态列表,包括消费者标识,消费速率,未ack消息数以及启动时间。
点击页面左上方标蓝的“MQ主题”可以返回MQ目的地管理页面。
点击“编辑”按钮,弹出Topic编辑对话框,仅可以编辑Topic描述信息。
点击“删除”按钮,弹出删除提示对话框,点击确认即可删除MQ目的地。
删除目的地时,如该目的地有关联路由和规则引擎则无法直接删除,需要取消关联后才可以删除。
点击“关联路由”按钮,可以查看该目的地关联的路由及规则引擎列表,可以通过点击关联路由对话框上方的标签页进行切换。