返回

本地https/wss服务与SSL安全证书

见解分享

本地服务能不能实现https服务,能不能与客户端的wss(websocket secure)建立安全的socket通信?一般这都算是常规需求,但对于没有接触过的用户,也是一个疑难问题。

网上很多教程会教你使用自签发证书,但实际效果并不理想。尤其如果你有同时在进行wss通信,由于证书非受信任证书,必然会报出WebSocket connection to 'wss://localhost/' failed: Error during WebSocket handshake: Unexpected response code: 403这样的错误。事实上这个问题是无法解决的,因为浏览器的安全性不允许你与一个非受信任的证书建立wss连接。自签发证书不经CA的签发,自然无法被浏览器信任。而使用自带的证书,它已经跟你的域名绑定了,无法做到仅仅用于本地服务。

使用前端方案非常简单。我们只需要一个开发工具即可完成所有功能。Node.js的http-server功能强大,这个工具让我们不用多敲一行代码就可以实现任意本地服务支持https协议,证书还是受信任的证书。

首先,你需要一个cert.pem文件,使用如下命令:

openssl req -new -nodes -x509 -keyout cert.pem -out cert.pem -days 365

需要注意的是,其中-nodes是不输入密码的意思。如果这里没有填加-nodes,那么后面你需要输入两次你的密码。

-x509```是指生成自签名证书。```-keyout```和```-out```是要你自定义文件名和扩展名,```-days 365```是有效期365天,365天之后证书过期,需要重新生成。

接下来,使用如下命令启动你的服务:

http-server -S -C cert.pem -p 8080 -d C:\Users\Desktop\project_dir

其中```-S```为https服务,```-C```指定刚才你生成的自签名证书,```-p 8080```表示端口为8080```-d```为启动服务的目录。现在你就可以访问```https://localhost:8080```了。

注意,自签名证书,需要你手动安装到浏览器中。安装方法如下:

1. 打开浏览器,在地址栏输入```chrome://settings/security```,并回车。

2. 找到```管理证书```,点击```导入```3. 在弹出的对话框中,点击```下一步```,然后选择刚才你生成的cert.pem证书。

4. 在弹出的对话框中,选择```信任该证书用于识别网站```,并点击```确定```。

这样,你就可以正常访问```https://localhost:8080```了。

这样就能实现一个能够进行wss通信的https本地服务了。