1

我正在使用 Starscream 的最新标签 4.0.4 ( https://github.com/daltoniam/starscream )。我使用创建了自己的 SSL 证书

openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365

在我的后端,我使用 node.js 创建 https 服务器并使用 WebSocket-Node 库 ( https://github.com/theturtle32/WebSocket-Node )创建一个 websocket

const httpsServer = https.createServer(
{
    key: fs.readFileSync('./certs/key.pem'),
    cert: fs.readFileSync('./certs/cert.pem')
});

httpsServer.listen(1234, function() 
{
    logger.log.info(filename + "Server is listening on port " + 1234);
});

var wsServer = new webSocketServer({
    httpServer: httpsServer,
    autoAcceptConnections: false
});

在 Swift 5 中,我可以使用以下代码连接到 websocket 并与之通信

var request = URLRequest(url: URL(string: "wss://mydomain.com:1234")!)
request.timeoutInterval = 10
let pinner = FoundationSecurity(allowSelfSigned: true)
socket = WebSocket(request: request, certPinner: pinner)
socket?.delegate = self
socket?.connect()

但是,上面根本没有使用我的证书。我期望必须将我的 .cer 导入 xcode(添加到包中),然后使用证书设置 WebSocket。在接受连接之前进行某种握手或 ssl 挑战。

我遇到的一个问题是新的 Starscream 库没有“socket.security”(就像旧版本似乎有)或者无论如何都没有向连接添加证书。所以我不知道如何向套接字添加证书。

// I've seen other post using "socket.security", but this does not 
// appear to work anymore as "socket.security" doesn't exist
socket.security = SSLSecurity(certs: [ssl], usePublicKeys: true)

我不知道我的应用程序在没有证书的情况下如何连接和通信。这意味着如果他们知道域和端口号,任何人都可以与我的 websocket 通信。

httpsServer 不应该拒绝它吗?

我不应该将证书添加到我的应用程序包并以某种方式配置 Websocket 吗?

主要问题:如何保护我的 WebSocket,以便只有我的应用程序(带有证书)可以与我的后端 https websocket 服务器通信?

4

0 回答 0