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格式,
不能
上述三个过程将使用openssl完成,将用到如下几条相关的命令:bn
l 产生CA的key和证书文件
openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt
该命令将为CA产生一个名字为“ca.key”的key文件和一个名字为“ca.crt”的证书文件,这个crt就是CA自己给自己签名的证书文件。
该命令中选项“-x509”表示该条命令将产生自签名的证书,一般都是测试的时候采用。
l 为mosquittoserver私钥文件“server.key”和证书文件”server.crt”
(1)为mosquittoserver产生一个私钥文件server.key
openssl genrsa -out server.key 2048
该命令将产生一个不加密的RSA私钥,其中参数“2048”表示私钥的长度,这里产生的私钥文件“server.key”将在下一步使用,同时在mosquitto程序的配置文件中也需要使用。
如果需要为产生的RSA私钥加密,则需加上选项“-des3”,对私钥文件加密之后,后续使用该密钥的时候都要求输入密码。产生加密RSA私钥文件的命令如下:
opensslgenrsa -des3 -out server.key 2048
如果为RSA私钥文件加密了,则一定要记好密码,后面产生csr文件时以及后续使用该私钥文件都会用到该密码。
(2)为mosquitto server产生一个签发证书的请求文件“server.csr”
openssl req -out server.csr -key server.key -new
该命令将使用上一步产生的“server.key”文件为server产生一个签发证书所需要的请求文件:server.csr,使用该文件向CA发送请求才会得到CA签发的证书。
(3)CA为mosquitto server产生一个证书文件
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500
该命令将使用CA的密钥文件ca.key,CA的证书文件ca.crt和上一步为mosquitto server产生证书请求文件server.csr文件这三个文件向CA请求产生一个证书文件,证书文件的名字为:server.crt。该命令中的36500可以修改为自己定义的时间值。
l 为mosquitto的客户端程序产生私钥文件”client.key”和证书文件“client.crt”,过程与为server端类似,这里将不再累述。
(1) 为mosquittoserver产生一个私钥文件”client.key”
openssl genrsa -out client.key 2048
(2) 为mosquitto客户端产生一个签发证书的请求文件“client.csr “
openssl req -out client.csr -key client.key -new
产生证书请求文件时需要第一步产生的私钥文件client.key作为输入。
(3) CA为mosquitto客户端产生一个证书文件”client.crt”
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
3、 Mosquito使用ssl功能的具体操作方法
下面的例子中,将使用:A(192.168.4.222),B(192.168.4.223)和C(192.168.4.221)这三台机子,其中使用A制作CA证书;在B上运行mosquitto实例,在C上运行一个订阅端,一个发布端。
3.1、产生CA
测试过程中CA在主机cddserver3上;另外,测试过程中,无需采用真正的CA,使用我们自己产生的CA即可,使用命令为:
openssl req -new-x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt
mosquitto_sub -h 192.168.16.211 -i 111 -p 9990 -t "111" --cafile /home/yandong/m2mqtt_key/ca.crt --cert /home/yandong/m2mqtt_key/client.crt --key /home/yandong/m2mqtt_key/client.key
mosquitto_pub -h 192.168.16.211 -p 9990 -t "111" -m "this is jason.hou" --cafile /home/yandong/m2mqtt_key/ca.crt --cert /home/yandong/m2mqtt_key/client.crt --key /home/yandong/m2mqtt_key/client.key
keytool -importcert -keystore test.bks -file ca.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider