使用带有 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 客户端的客户端证书的主要内容,如果未能解决你的问题,请参考以下文章

带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets

socket.io 在空闲时断开客户端的连接

express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器

如何在客户端中获取 socket.io 客户端的会话 ID

如何使用套接字(socket.io)在 NodeJS 中找到客户端的响应时间(延迟)?

基于socket.io客户端与服务端的相互通讯