首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >13-STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-Android以SSL单向认证方式连接MQTT服务器(验证服务器证书) 1.把mqtt服务器上

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

作者头像
杨奉武
发布2021-07-19 15:52:30
4810
发布2021-07-19 15:52:30
举报
文章被收录于专栏:知识分享知识分享

<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.下载安装到手机测试

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
    • 这节说明一下设备使用SSL单向认证连接服务器以后检验一下服务器的证书.
    • 这节就在下面的章节程序上进行修改
    • 把这节里面的MyX509TrustManager.java 文件放到工程里面
    • 在工程上点击鼠标右键,新建一个assets
    • 导入证书
      • 1.把mqtt服务器上面的cert.pem 证书下载到本地(该证书用于解开服务器证书)
        • 2.复制证书
          • 3.粘贴证书
          • 使用证书
            • 1.新建一个变量,用来选择验不验证证书
              • 2.增加下面的函数
                • 下面这个地方要对应哈
              • 3.把原先的程序改一下
                • 4.把下面的程序放到else里面
                  • 5.下载安装到手机测试
                  相关产品与服务
                  SSL 证书
                  腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档