Closed sdbjzj closed 2 years ago
key="pameile.com.key"; pem="pameile.com.pem" ws = Pywss(name, ssl_key=key, ssl_pem=pem) 把上面的变量改了一下,新建了两个文件用来存证书和私钥,现在报下面的错 ssl.SSLError: [SSL] PEM lib (_ssl.c:3991)
ssl证书是第三方提供的。我从阿里云那边直接下载得到。 第一个报错是文件路径不对,第二个报错应该是证书有问题, 我提供了参考证书,上传到了examples里,你可以试下是不是这个原因。
readme也更新了,比之前详细一点,可以参考下。或者直接运行example6.py,看看是否会报错。
用你的example6.py可以运行,非常感谢,我自己的demo把key和pem互换一下也可以跑起来了。看来是没有理解这个key和pem的意思。另外还有一个问题客户端如何连?ws = new WebSocket("wss://www.czasg.xyz:8866/ws/chat");我用这个去连你的也不行,www.czasg.xyz这个域名我已经在host中配置指向了127.0.0.1,服务端的服务也是启好的。
WebSocket connection to 'wss://www.czasg.xyz:8866/ws/chat' failed: Error in connection establishment: net::ERR_CERT_DATE_INVALID 浏览器报如下的错
我把证书加入了受信任的颁发机构,www.czasg.xyz也加入了可信任站点,直接访问https://www.czasg.xyz:8866会提示安全风险,我也通过了,可是后台确出现异常关闭了。后端报错如下
Traceback (most recent call last): File "D:\workspace\mypydemo\src\example6.py", line 15, in <module> ws.serve_forever() File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\site-packages\pywss\__init__.py", line 104, in serve_forever super(MyServerTCPServer, self).serve_forever(poll_interval) File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 237, in serve_forever self._handle_request_noblock() File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 324, in _handle_request_noblock self.shutdown_request(request) File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 509, in shutdown_request self.close_request(request) File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 513, in close_request request.close() File "C:\Users\hnbcj\AppData\Local\Programs\Python\Python38\lib\socket.py", line 499, in close if self._io_refs <= 0: AttributeError: _io_refs
需要区别https和http,姑且,,,,,ssl证书可以理解为https后面的's'。 这个证书是 域名 的持证,我这么说可能不太标准,你可以百度下。
针对你的问题: 1、首先,你使用了你的域名证书,那么这个websocket服务应该在你域名绑定服务器端启动。 不然受限于ssl认证,前端是无法连接的。 换句话说,直接在本地搭建wss服务端,不会起作用。 举例:进入阿里云官网,打开8866端口,然后进入阿里云服务器(该服务器需要绑定此证书域名),创建后端代码如下:
from pywss import Pywss, route
@route("/ws/chat")
def index(request, data):
return "Pywss support wss protocol"
if __name__ == '__main__':
ws = Pywss(__name__,
address="0.0.0.0",
port=8866,
ssl_key="服务器绑定域名证书.key",
ssl_pem="服务器绑定域名证书.pem")
ws.serve_forever()
把ws改为wss即可,域名部分也要替换。
ws = new WebSocket("wss://证书域名:8866/ws/chat")
ws.onmessage = function (ev) {
console.log(JSON.parse(ev.data));
}
ws.onclose = function (ev) {
console.log('Connect Closed')
}
ws.onopen = function() {
if (ws.readyState === WebSocket.OPEN) {
ws.send('hello, pywss!') // you will get 'hello, pywss! - data from pywss'
}
}
2、其次,我框架有点问题,你使用了ssl,那么前端就只能使用wss连接,没使用证书,前端只能使用ws连接。我最近在参考tornado,或许后期有优化。。。
我提供的证书绑定了域名 'www.czasg.xyz',然而这个域名已经过期了,虽然服务端启动没问题, 但不会有任何作用,前端还是无法连接。
你不要用 www.czasg.xyz 了,也不要用我提供的证书。可能是我readme对你起了误导,,
我自己的也是报一样的错,我的证书是刚申请的。
你有py36或者py37吗,我当时改了一点原生socket类,这个报错我看着怎么像,有点不兼容的样子O.O
那我用3.7的试试
我用Python 3.7.6试了也一样的错
我下午找人借一个服务器试试
我朋友服务器也可以搭,在线聊天室demo,基于wss: https://czaorz.github.io/Pywss/client
这个demo只开今天下午,毕竟别人的服务器。 聊天只能发文字,可以进来试试。如果看到在线两个人,另一个那就是我了。
报下面的错,上面的key和pem省略了后面的字符串, ssl_context.load_cert_chain(pem, key) FileNotFoundError: [Errno 2] No such file or directory