简述
在本章中,我们将为在“WebRTC 信令”一章中创建的信令服务器添加安全功能。将有两个增强功能 -
- 使用 Redis 数据库进行用户身份验证
- 启用安全套接字连接
首先,你应该安装Redis。
Redis 有两个可执行命令 -
要运行 Redis 服务器,请在终端控制台中键入redis-server 。你应该看到以下内容 -
现在打开一个新的终端窗口并运行redis-cli来打开一个客户端应用程序。
基本上,Redis 是一个键值数据库。要创建具有字符串值的键,您应该使用 SET 命令。要读取键值,您应该使用 GET 命令。让我们为他们添加两个用户和密码。键将是用户名,这些键的值将是相应的密码。
现在我们应该修改我们的信令服务器以添加用户身份验证。将以下代码添加到server.js文件的顶部 -
在上面的代码中,我们需要 Node.js 的 Redis 库并为我们的服务器创建一个 Redis 客户端。
要添加身份验证,请修改连接对象上的消息处理程序 -
在上面的代码中,如果用户尝试登录,我们从 Redis 获取他的密码,检查它是否与存储的密码匹配,如果成功,我们将他的用户名存储在服务器上。我们还将isAuth标志添加到连接以检查用户是否已通过身份验证。注意这段代码 -
如果未经身份验证的用户试图发送报价或离开连接,我们只需返回一个错误。
下一步是启用安全套接字连接。强烈推荐用于 WebRTC 应用程序。PKI (Public Key Infrastructure) 是来自 CA (Certificate Authority) 的数字签名。然后用户检查用于签署证书的私钥是否与 CA 证书的公钥相匹配。用于开发目的。我们将使用自签名安全证书。
我们将使用 openssl。它是一个实现 SSL(安全套接字层)和 TLS(传输层安全)协议的开源工具。它通常默认安装在 Unix 系统上。运行openssl version -a查看是否安装。
要生成公共和私人安全证书密钥,您应该按照以下步骤操作 -
现在您有两个文件,证书 (server.crt) 和私钥 (server.key)。将它们复制到信令服务器根文件夹中。
要启用安全套接字连接,请修改我们的信令服务器。
在上面的代码中,我们要求fs库读取私钥和证书,使用私钥和证书的绑定端口和路径创建cfg对象。然后,我们使用我们的密钥和端口 9090 上的 WebSocket 服务器创建一个 HTTPS 服务器。
现在在 Opera 中打开https://localhost:9090 。你应该看到以下内容 -
单击“仍然继续”按钮。您应该看到“确定”消息。
为了测试我们的安全信令服务器,我们将修改我们在“WebRTC 文本演示”教程中创建的聊天应用程序。我们只需要添加一个密码字段。以下是整个index.html文件 -
我们还需要通过此行在client.js文件中启用安全套接字连接var conn = new WebSocket('wss://localhost:9090'); . 注意wss协议。然后,必须修改登录按钮处理程序以发送密码和用户名 -
以下是整个client.js文件 -
现在通过节点服务器运行我们的安全信令服务器。在修改后的聊天演示文件夹中运行静态节点。在两个浏览器选项卡中打开localhost:8080 。尝试登录。请记住,只允许使用“password1”的“user1”和使用“password2”的“user2”登录。然后建立 RTCPeerConnection(调用另一个用户)并尝试发送消息。
以下是我们安全信令服务器的全部代码 -