You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

域名SSL证书与WebSocket SSL证书的关联及配置疑问

WebSocket SSL配置疑问解答

核心疑问解答

  • 此处的pem文件是否需与注册商颁发的证书一致,还是二者完全独立?
    取决于你的架构:

    • 当前你用Apache做反向代理,对外的wss://example.com:8888/wss/连接的SSL由Apache处理,Apache与后端Python服务之间是明文HTTP连接。这种情况下,Python服务端不需要配置SSL上下文(即不需要pem文件),和注册商证书完全独立。
    • 如果要让Python服务端直接对外提供wss服务(不经过Apache代理),则必须使用注册商颁发的*.example.com证书(pem文件需包含该证书及私钥),不能用无关的自签名证书,否则客户端会因域名不匹配、证书不被信任而报错。
  • 客户端与服务端是否应使用相同的pem文件?
    不需要。客户端只需要信任服务端使用的证书:

    • 若用Apache代理,客户端信任的是Apache配置的公共CA颁发的证书(浏览器默认信任),无需持有pem文件。
    • 若Python服务端直接对外,服务端部署对应域名的证书即可,客户端只需验证证书有效性(公共CA证书自动被信任,自签名证书需手动添加信任),不需要客户端保存pem文件。
  • 若域名已使用SSL,是否仍需为WebSocket连接加密?
    需要。wss是加密的WebSocket协议,和https一样用于保护传输过程中的数据,防止窃听和篡改。你的当前架构中,Apache已经处理了对外wss连接的加密,后端与Apache的内部连接为明文(内部网络环境下安全),对外的WebSocket连接仍保持加密状态,符合安全要求。

额外问题说明

为什么未提供SSL上下文仍能正常工作?

因为你的WebSocket连接是通过Apache反向代理实现的:
客户端发起的wss://example.com:8888/wss/请求,SSL加密/解密由Apache完成,Apache将解密后的WebSocket请求以明文形式转发给后端Python服务(即http://<internal_ip>:8888/)。因此后端Python服务无需配置SSL,也能正常接收连接,客户端看到的wss标识是因为Apache完成了SSL终止。

使用localhost.pem连接失败的原因

localhost.pem是自签名证书,存在两个问题:

  1. 证书绑定的域名是localhost,但你的客户端是通过example.com发起连接,域名不匹配;
  2. 自签名证书未被客户端的信任根CA列表收录,客户端验证证书时无法确认其合法性,因此抛出ssl.SSLCertVerificationError错误。

内容的提问来源于stack exchange,提问作者asml

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:13:18