• 13-STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-Android以SSL单向认证方式连接MQTT服务器(验证服务器证书)


    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/CH395Q/my.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    说明

    这节说明一下设备使用SSL单向认证连接服务器以后检验一下服务器的证书.

    这节就在下面的章节程序上进行修改

    把这节里面的MyX509TrustManager.java 文件放到工程里面

    在工程上点击鼠标右键,新建一个assets

    导入证书

    1.把mqtt服务器上面的cert.pem 证书下载到本地(该证书用于解开服务器证书)

    2.复制证书

    3.粘贴证书

     

    使用证书

    1.新建一个变量,用来选择验不验证证书

    2.增加下面的函数

    //拿到自己的证书
        X509Certificate getX509Certificate(ClassLoader classLoader) throws IOException, CertificateException {
            InputStream in =  classLoader.getResourceAsStream("assets/cert.pem");
    //        InputStream in = context.getAssets().open("cert.pem");
            CertificateFactory instance = CertificateFactory.getInstance("X.509");
            X509Certificate certificate = (X509Certificate) instance.generateCertificate(in);
            return certificate;
        }

    下面这个地方要对应哈

    3.把原先的程序改一下

    4.把下面的程序放到else里面

    try{
                        //SSLContext 初始化
                        SSLContext tls = SSLContext.getInstance("TLS");
                        String defaultType = KeyStore.getDefaultType();
                        KeyStore instance = KeyStore.getInstance(defaultType);
                        instance.load(null);
                        instance.setCertificateEntry("cert",getX509Certificate(MyMqttClient.class.getClassLoader()));
                        String defaultAlgorithm = TrustManagerFactory.getDefaultAlgorithm();//得到默认算法
                        TrustManagerFactory trustMF = TrustManagerFactory.getInstance(defaultAlgorithm);
                        trustMF.init(instance);
                        TrustManager[] trustManagers = trustMF.getTrustManagers();
                        tls.init(null,trustManagers,new SecureRandom());
                        //ssl工厂
                        SSLSocketFactory socketFactory = tls.getSocketFactory();
                        mqttConnectOptions.setSocketFactory(socketFactory);
                        Log.e(TAG, "InitMqttOptions: useSSLCheck Init");
                    }catch (Exception e){
                        Log.e(TAG, "InitMqttOptions: "+e );
                    }

    5.下载安装到手机测试

  • 相关阅读:
    <C> 链表 双向链表 栈 队列
    <C> 结构体
    <C> getchar()函数 如何把getchar()到的字符串存起来的实际应用
    DataSet转换为泛型集合和DataRow 转成 模型类
    对DataSet,DataRow,DateTable转换成相应的模型
    Json对象与Json字符串互转(4种转换方式)
    Android开发 使用HBuilder的缓存方法
    MIT_AI公开课p1p2学习笔记
    LeetCode_02 两数相加【链表】
    leetcode_01两数之和
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/15017843.html
Copyright © 2020-2023  润新知