美文网首页
iOS MQTT链接-双向认证

iOS MQTT链接-双向认证

作者: Felix的笔头 | 来源:发表于2020-02-28 11:04 被阅读0次

双向认证方法:
让后台生成 ca.crt 和 client.p12文件(client.p12文件由client.crt和client.key合成) 我使用的是自签证书

使用命令行把ca.crt转化为ca.der格式

openssl x509 -in ca.crt -out ca.der -outform der

client.crt,client.key合并成p12文件

openssl pkcs12 -export -in client.crt -inkey client.key -out certificate.p12 -name "certificate" 

MQTTClient中的的session的双向认证方法:

   MQTTSSLSecurityPolicyTransport *transport = [[MQTTSSLSecurityPolicyTransport alloc] init];
    transport.host = @"192.168.1.19";
    transport.port = 8000;
    transport.tls = YES;
    
    NSString *ca = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"der"];
    NSString *client = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"p12"];;//注意不可以用client命名,否则无法获取到文件路径
    transport.certificates = [MQTTSSLSecurityPolicyTransport clientCertsFromP12:client passphrase:@"证书的密码"];
    
    MQTTSSLSecurityPolicy *securityPolicy = [MQTTSSLSecurityPolicy policyWithPinningMode:MQTTSSLPinningModeCertificate];
    securityPolicy.allowInvalidCertificates = YES;
    securityPolicy.validatesDomainName = NO;
    securityPolicy.validatesCertificateChain = NO;
    securityPolicy.pinnedCertificates = @[[NSData dataWithContentsOfFile:ca]];
    transport.securityPolicy = securityPolicy;
    
    _session = [[MQTTSession alloc] init];
    _session.transport = transport;
    _session.delegate = self;
    _session.willFlag = YES;
    _session.userName = @"userName";
    _session.password = @"password";
    _session.willQoS = MQTTQosLevelAtLeastOnce;
    _session.willRetainFlag = NO;
    _session.cleanSessionFlag = YES;
    _session.willTopic = @"/app/lastwill" ;
    _session.certificates = [MQTTSSLSecurityPolicyTransport clientCertsFromP12:client passphrase:@"password"];
    NSDictionary *dic = @{@"subject":@"disconnect"};
    NSData *data1 = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
    _session.willMsg = data1;
    _session.clientId = @"ssid";
    [_session connectAndWaitTimeout:30];  //this is part of the synchronous API
    
    [_session subscribeToTopic:@"/topic/event" atLevel:1 subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss){
        
    }];

参考链接:https://www.jianshu.com/p/4676834ac3c4

相关文章

  • iOS MQTT链接-双向认证

    双向认证方法:让后台生成 ca.crt 和 client.p12文件(client.p12文件由client.cr...

  • (iOS)MQTT连接 遗嘱 双向认证

    最近有项目需要用MQTT来做实时通讯,但是网上关于MQTT的ssl双向认证的资料十分少,终于在MQTT-Clien...

  • Android与mqtt双向SSL认证

    Android与mqtt双向SSL认证 借鉴大佬博客:http://blog.linguofeng.com/ 需要...

  • iOS HTTPS 双向认证

    iOS HTTPS 双向认证 @(iOS)[网络,HTTPS] 搞了半天,记录一下,坑很多。双向认证,就是在访问网...

  • (iOS)MQTT连接 遗嘱 双向认证1

    MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主...

  • Android Mqtt SSL/TLS 单向和双向认证

    看到公司Mqtt相关有用到单项和双向认证,这里记录一下做法。SSL/TLS双向认证的原理,网上有一大堆,但是真正要...

  • (iOS)MQTT连接 遗嘱 双向、单向认证2

    转过的文章代码格式有点乱,具体看的demo就就行,有空再整理,上我自己的demo, 只看这篇就可以了,常见的都能用...

  • iOS中的安全与加密

    iOS中的安全与加密 一。HTTPS双向认证 Charles是大家所熟悉的抓包工具,如果网络请求未经过双向认证,那...

  • iOS中的HTTPS认证

    一、HTTPS认证 1. 会话认证机制 iOS 中会话认证机制共有四种,大体分为两种类型: 单向认证双向认证; N...

  • iOS https 双向认证

    /** 一.非浏览器应用(iOS app)与服务器AFNetworking HTTPS ssl认证 虽然是HTTP...

网友评论

      本文标题:iOS MQTT链接-双向认证

      本文链接:https://www.haomeiwen.com/subject/yhpkhhtx.html