使用 Gremlin.net 从本地 windows 机器连接到 AWS Neptune

Connecting to AWS Neptune with Gremlin.net from a local windows machine

我正在 access-graph-gremlin-dotnet 关注亚马逊的文档 并尝试在通过 EC2 实例使用 SSH 隧道连接到 Neptune 的本地 windows 机器上 运行 它。
我已经用 gremlin 控制台测试了 SSH 隧道,它工作正常。
运行 EC2 实例上的程序也能正常工作,但是当 运行 在本地 windows 机器上运行程序时,我收到以下异常,因为需要将 Neptune 的证书添加到可信证书:

System.Net.WebSockets.WebSocketException (0x80004005): Unable to connect to the remote server ---> 
System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner 
 exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is 
invalid according to the validation procedure.

我正在寻找如何在 Gremlin.Net 3.4.6(最好是 C#)中执行此操作。

您需要这样做:

  1. 以管理员身份打开cmd.exe
  2. notepad c:\windows\system32\drivers\hosts
  3. 添加一行127.0.0.1 <your neptune cluster endpoint just the name without port>
  4. 保存文件
  5. 现在再次尝试 运行 .Net 代码

这是因为您最有可能连接到 localhost 并且证书是为集群的主机名签名的,所以不匹配。

另一种选择是使用 GremlinClient 构造函数的 webSocketConfiguration 参数并使用 RemoteCertificateValidationCallback 进行手动检查。
由于明显的安全风险,您应该对证书验证格外小心。

var webSocketConfiguration = new Action<ClientWebSocketOptions>(options => {options.RemoteCertificateValidationCallback=(o, c, ch, er) => Test and return true if certificate is valid;});
var gremlinServer = new GremlinServer(endpoint, 8182, enableSsl: true );
var gremlinClient = new GremlinClient(gremlinServer, webSocketConfiguration: webSocketConfiguration);