emqx / CocoaMQTT

MQTT 5.0 client library for iOS and macOS written in Swift
https://www.emqx.com/en
Other
1.6k stars 420 forks source link

One-way certification issue #553

Open wtdu opened 1 year ago

wtdu commented 1 year ago

I want to connect mqtt by pem file ,but I can not connect broker.

πŸ‘‡πŸ»πŸ‘‡πŸ» There are my some sample codes:

let cliendId = "xxxxxxxxxxxxxxxx" mqtt5 = CocoaMQTT5(clientID: cliendId, host: defaultHost, port: UInt16(port)) mqtt5?.logLevel = .debug mqtt5?.username = userName mqtt5?.password = password mqtt5?.keepAlive = 60 mqtt5?.delegate = self mqtt5?.autoReconnect = true mqtt5?.cleanSession = true mqtt5?.delegateQueue = .global(qos:.utility) mqtt5?.backgroundOnSocket = true mqtt5?.allowUntrustCACertificate = true mqtt5?.enableSSL = true guard let cert_Url = Bundle.main.url(forResource: "bundle", withExtension: "pem") else { return } guard let cert_data = try? Data(contentsOf: cert_Url) as? CFData else { return } let cert = SecCertificateCreateWithData(kCFAllocatorDefault, cert_data) var sslSettings: [String: NSObject] = [:] sslSettings[kCFStreamSSLCertificates as String] = [cert] as NSObject mqtt5?.sslSettings = sslSettings mqtt5?.connect()

This is error: Error Domain=MGCDAsyncSocketErrorDomain Code=8 "Error in SSLSetCertificate" UserInfo={NSLocalizedDescription=Error in SSLSetCertificate

MelnykovDenys commented 1 year ago

I want to connection mqtt by pem file ,but I can not connect broker.

πŸ‘‡πŸ»πŸ‘‡πŸ» There are my some sample code:

let cliendId = "xxxxxxxxxxxxxxxx" mqtt5 = CocoaMQTT5(clientID: cliendId, host: defaultHost, port: UInt16(port)) mqtt5?.logLevel = .debug mqtt5?.username = userName mqtt5?.password = password mqtt5?.keepAlive = 60 mqtt5?.delegate = self mqtt5?.autoReconnect = true mqtt5?.cleanSession = true mqtt5?.delegateQueue = .global(qos:.utility) mqtt5?.backgroundOnSocket = true mqtt5?.allowUntrustCACertificate = true mqtt5?.enableSSL = true guard let cert_Url = Bundle.main.url(forResource: "bundle", withExtension: "pem") else { return } guard let cert_data = try? Data(contentsOf: cert_Url) as? CFData else { return } let cert = SecCertificateCreateWithData(kCFAllocatorDefault, cert_data) var sslSettings: [String: NSObject] = [:] sslSettings[kCFStreamSSLCertificates as String] = [cert] as NSObject mqtt5?.sslSettings = sslSettings mqtt5?.connect()

This is error: Error Domain=MGCDAsyncSocketErrorDomain Code=8 "Error in SSLSetCertificate" UserInfo={NSLocalizedDescription=Error in SSLSetCertificate

Hey @wtdu ! I think It's because your cert == nil. I faced the same issue

wtdu commented 1 year ago

@MelnykovDenys
thanks,you are right !I printed the mqtt5. sslSettings parameter, gave me nil value . Now, do you have any new breakthroughs?

MelnykovDenys commented 1 year ago

@wtdu Unfortunately no, I’m observing this thread also #546 . If I find solution, I’ll write you

JaylinYu commented 11 months ago

This is an MQTT SDK, and TLS/SSL belongs to TCP transport. CocoaMQTT just a user of TLS lib. Feel free to learn how to convert your certificates.