使用带有 Socket.io IOS 客户端的客户端证书

Posted

技术标签:

【中文标题】使用带有 Socket.io IOS 客户端的客户端证书【英文标题】:using a client certificate with Socket.io IOS client 【发布时间】:2016-03-09 15:19:15 【问题描述】:

我正在尝试连接到需要客户端验证的服务器。我的应用程序中的捆绑包中有一个 .P12 证书,由 CA 生成。有没有办法让 socket.IO 在连接到服务器时出示此证书。 (服务器是一个反向代理,虽然我不认为这会导致问题)

    let opts: [String : AnyObject] = ["log": true, "sessionDelegate": self, "forceWebsockets" : true]

    self.socket = SocketIOClient(socketURL: "https://myapp.something.com:49447", options: opts)

    self.socket.on("connect") [weak self] data, ack in
        self?.handleConnect()
        return
    
    self.socket.connect()

我有一个委托设置来处理挑战,但 ssl 握手在我到达那个点之前就失败了。

CFNetwork SSLHandshake 失败 (-9824 -> -9829)

func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) 
    completionHandler(.UseCredential, NSURLCredential(trust: challenge.protectionSpace.serverTrust!))

【问题讨论】:

【参考方案1】:

您需要自己将p12安装到您应用的钥匙串中,参考here

一旦安装,它将可用于 https 连接。

【讨论】:

以上是关于使用带有 Socket.io IOS 客户端的客户端证书的主要内容,如果未能解决你的问题,请参考以下文章