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

 

posted on   广源时代  阅读(183)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-07-15 06-STM32+ESP8266+AIR202远程升级篇-移植使用-移植STM32主动访问升级到自己的工程项目

导航

支付宝 QQ群
点击右上角即可分享
微信分享提示