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

使用凭证连接NGS Global NATS服务器报错:nats: no ssl context provided

问题

使用凭证连接NGS Global NATS服务器时触发异常,报错信息如下:

2022-08-22 11:46:51,755 ERROR: nats: encountered error
Traceback (most recent call last):
  File "/home/devaxe/.pyenv/versions/3.10.4/lib/python3.10/site-packages/nats/aio/client.py", line 419, in connect
    await self._process_connect_init()
  File "/home/devaxe/.pyenv/versions/3.10.4/lib/python3.10/site-packages/nats/aio/client.py", line 1792, in _process_connect_init
    raise errors.Error('nats: no ssl context provided')

触发错误的核心代码:

async def init_nats():
  global ns
  try:
    ns = await nats.connect('connect.ngs.global', user_credentials=NATS_CREDS) if not _DEBUG \
    else await nats.connect("nats://localhost:4222")

    return ns
  except Exception as e:
    print(f"[init_nats] Could not connect to NATS server. {e}")
    return None

_DEBUG常量定义:

def main():
  global _DEBUG
  if len(sys.argv) == 2 and sys.argv[1] == '-d':
    _DEBUG = True

本地NATS服务器可正常连接,但远程NGS Global连接失败,搜索该错误无有效结果。

解决方案

报错原因是NGS Global的NATS服务要求SSL/TLS加密连接,但当前代码连接远程服务器时未提供SSL上下文,有两种修复方式:

方式1:使用tls=True快捷参数

直接在连接远程服务器时添加tls=True参数,nats.py库会自动创建默认的SSL上下文:

async def init_nats():
  global ns
  try:
    # 远程连接添加tls=True参数
    ns = await nats.connect('connect.ngs.global', user_credentials=NATS_CREDS, tls=True) if not _DEBUG \
    else await nats.connect("nats://localhost:4222")

    return ns
  except Exception as e:
    print(f"[init_nats] Could not connect to NATS server. {e}")
    return None

方式2:显式创建SSL上下文

如果需要自定义SSL配置(比如指定CA证书),可以手动创建SSL上下文后传入:

import ssl

async def init_nats():
  global ns
  try:
    if not _DEBUG:
      # 创建默认SSL上下文
      ssl_ctx = ssl.create_default_context()
      # 若需验证服务器证书,可加载CA证书文件
      # ssl_ctx.load_verify_locations('/path/to/ca.crt')
      ns = await nats.connect('connect.ngs.global', user_credentials=NATS_CREDS, ssl=ssl_ctx)
    else:
      ns = await nats.connect("nats://localhost:4222")

    return ns
  except Exception as e:
    print(f"[init_nats] Could not connect to NATS server. {e}")
    return None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:15:43