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

通过Nginx反向代理访问Neptune DB时遭遇SSL证书错误

解决GremlinPython连接Nginx反向代理Neptune的SSL证书不匹配问题

问题根源

你遇到的SSLCertVerificationError核心原因是证书域名不匹配:

  • 浏览器访问用的是Nginx所在EC2的公网IP(或对应域名),但代码里用的是Neptune的内部域名xxxx.compute-1.amazonaws.com
  • Nginx配置的SSL证书对应EC2公网IP/域名,和Neptune内部域名不匹配,导致客户端SSL验证失败;浏览器可手动跳过警告,但GremlinPython默认严格验证证书有效性。

另外你修改hosts的方式错误:hosts文件不能带端口,且将Neptune域名指向127.0.0.1完全不符合需求,这只会让请求发向本地而非EC2反向代理。


可行解决方案

方案1:修改代码使用EC2公网IP作为Endpoint(推荐,符合反向代理逻辑)

既然通过Nginx反向代理访问Neptune,代码里应直接用EC2公网IP作为neptune_endpoint,而非Neptune内部域名:

from gremlin_python.driver import client
import os
import ssl

# 替换为EC2的公网IP
neptune_endpoint = os.environ.get('NEPTUNE_ENDPOINT', 'EC2_PUBLIC_IP')
neptune_port = os.environ.get('NEPTUNE_PORT')
neptune_uri = f'wss://{neptune_endpoint}:{neptune_port}/gremlin'

# 若Nginx用自签名/不被信任的证书,添加ssl_context跳过验证(仅限测试环境)
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE

# 初始化客户端时传入ssl_context
conn = client.Client(neptune_uri, 'g', ssl_context=ssl_context)

# 执行查询
query_existing_IDs = """
g.V().hasLabel('Sentences').values('sentenceID').limit(2)
"""
response = conn.submit(query_existing_IDs)
result = response.all().result()
print(result)

注意:跳过SSL验证仅适合测试环境,生产环境必须配置域名匹配的合法SSL证书(比如给EC2公网IP绑定域名并申请对应证书)。

方案2:配置Nginx使用匹配Neptune域名的证书(生产环境推荐)

若必须在代码中使用Neptune内部域名,需:

  1. 给xxxx.compute-1.amazonaws.com申请合法SSL证书(但AWS Neptune内部域名无法直接申请公网证书,此方案可行性低)
  2. 或在Nginx中配置SNI,使用对应Neptune域名的自签名证书,同时在客户端代码中导入该证书验证:
import ssl
ssl_context = ssl.create_default_context(cafile='/path/to/nginx-self-signed.crt')
conn = client.Client(neptune_uri, 'g', ssl_context=ssl_context)

需确保自签名证书的CN字段为xxxx.compute-1.amazonaws.com。

方案3:修正hosts文件配置(仅本地测试用)

若坚持用Neptune内部域名访问,需修改hosts文件为:

EC2_PUBLIC_IP  xxxx.compute-1.amazonaws.com

注意:hosts里不能加端口,需指向EC2公网IP而非127.0.0.1,之后结合方案1的ssl_context跳过验证(因证书仍对应EC2,与Neptune域名不匹配)。


额外说明

浏览器能访问是因为手动跳过了SSL警告,但GremlinPython基于aiohttp实现,默认严格验证证书的域名匹配性和有效性,因此必须通过上述方式解决。生产环境强烈建议使用域名匹配的合法SSL证书,避免跳过验证带来的安全风险。

内容的提问来源于stack exchange,提问作者Péricles Serotini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:27:32