Mosquito使用SSL/TLS进行安全通信时的使用方法 ------生成和发布证书openssl

MQTT作为android客户端的push消息推送协议。android客户端需要通过SSL/TLS连接mqtt代理服务器,实现消息的加密传输。实现这个流程需要提供两个方面的支持,一个是mqtt协议客户端实现,另一个是mqtt代理服务器。 有很多开源的mqtt代理服务器,我选择使用mosquitto broker. 

  1. mosquitto 安装到windows 上,我使用windows作为mosquitto代理服务器

 2. 安装openssl

3.生成服务器证书

 openssl req -new -x509 -days 3650 -keyout m2mqtt_ca.key -out m2mqtt_ca.crt

openssl genrsa -des3 -out m2mqtt_srv.key 1024

openssl req -out m2mqtt_srv.csr -key m2mqtt_srv.key -new

openssl x509 -req -in m2mqtt_srv.csr -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key -CAcreateserial -out m2mqtt_srv.crt -days 3650

android仅支持BKS格式的证书 ,使用keytool装换CRT成为BKS格式,


4.生成BKS格式证书

先下载bcprov-jdk16-141.jar 放到1.6.0.jdk/Contents/Home/lib/ext目录下

keytool -importcert -keystore test.bks -file m2mqtt_ca.crt  -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider


5.配置服务器端

修改 mosquitto_m2mqtt.conf


  • bind_address : server name (in my case bind_address ppatierno-PC);

  • port : MQTT port for SSL/TLS is 8883 (port 8883);

  • cafile : path for CA certificate (cafile C:\OpenSSL-Win64\bin\PEM\m2mqtt_ca.crt);

  • certfile : path for server certificate (certfile C:\OpenSSL-Win64\bin\PEM\m2mqtt_srv.crt);

  • keyfile : path server private key (keyfile C:\OpenSSL-Win64\bin\PEM\m2mqtt_srv.key);

  • tls_version : TLS version (tls_version tlsv1);

启动服务器

mosquitto –c mosquitto_m2mqtt.conf –v


6.android客户端,添加信任证书代码

SSLContext context;

     KeyStore ts = KeyStore.getInstance("BKS");

     ts.load(getResources().openRawResource(R.raw.test),

       "123456".toCharArray());

     TrustManagerFactory tmf = TrustManagerFactory

       .getInstance("X509");

     tmf.init(ts);

     TrustManager[] tm = tmf.getTrustManagers();

     context = SSLContext.getInstance("TLS");

     context.init(null, tm, null);


     // SocketFactory factory= SSLSocketFactory.getDefault();

     // Socket socket =factory.createSocket("localhost", 10000);

     SocketFactory factory = context.getSocketFactory();

     conOpt.setSocketFactory(factory);

7.源码下载地址

git clone https://github.com/widercode/AndroidMqttWithSSLSample.git

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值