Mosquito使用SSL/TLS进行安全通信时的使用方法 ------生成和发布证书openssl
2016-09-18 12:25
489 查看
MQTT作为android客户端的push消息推送协议。android客户端需要通过SSL/TLS连接mqtt代理服务器,实现消息的加密传输。实现这个流程需要提供两个方面的支持,一个是mqtt协议客户端实现,另一个是mqtt代理服务器。 有很多开源的mqtt代理服务器,我选择使用mosquitto broker.
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
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
相关文章推荐
- Mosquito使用SSL/TLS进行安全通信时的使用方法 ------生成和发布证书openssl
- Mosquito使用SSL/TLS进行安全通信时的使用方法
- 转(逍遥子)Mosquito使用SSL/TLS进行安全通信时的使用方法
- Mosquito使用SSL/TLS进行安全通信时的使用方法
- 安全通信系统--OpenSSL的安装编译、证书生成
- 使用 OpenSSL 进行安全编程的基本方法流程
- 使用Openssl生成CA及签发证书方法
- [原]安全通信系统--OpenSSL的安装编译、证书生成
- 安全通信系统--OpenSSL的安装编译、证书生成
- 使用证书对数据进行签名、验签、加密、解密以及openssl的常用方法
- 安全通信系统--OpenSSL的安装编译、证书生成
- 【网络安全】如何使用OpenSSL工具生成根证书与应用证书
- 安全通信系统--OpenSSL的安装编译、证书生成
- 调用Https WebService发布后使用时报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系”证书验证失败的解决过程(3)
- 使用Openssl生成CA及签发证书方法
- 使用 OpenSSL API 进行安全编程
- [转]使用 OpenSSL API 进行安全编程
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 使用 OpenSSL API 进行安全编程
- 关于asp.net网站发布后,使用登录控件和注册控件时出现“数据库只读,无法进行数据更新”的解决方法