我正在尝试使用以下代码连接到aws cassandra:
var pathToCAFile = $"{Directory.GetCurrentDirectory()}/AmazonRootCA1.pem";
X509Certificate2[] certs = new X509Certificate2[] { new X509Certificate2(pathToCAFile, "amazon") };
X509Certificate2Collection certificateCollection = new X509Certificate2Collection(certs);
var options = new Cassandra.SSLOptions(SslProtocols.Tls11, true, ValidateServerCertificate);
options.SetCertificateCollection(certificateCollection);
Cluster cluster = Cluster
.Builder()
.WithCredentials("username", "password")
.WithPort(9142)
.AddContactPoint("cassandra.us-east-1.amazonaws.com")
.WithSSL()
.WithLoadBalancingPolicy(new DefaultLoadBalancingPolicy("us-east-1"))
.Build();
// Connect to the nodes using a keyspace
var session = cluster.Connect("system_distributed");
// Execute a query on a connection synchronously
var rs = session.Execute("select * from system.peers");
下面是我得到的错误:
“cassandra.nohostavailableexception:'所有尝试查询的主机都失败(尝试3.83.169.143:9142:authenticationexception'根据验证过程,远程证书无效')”
此异常最初引发于此调用堆栈:
cassandra.connections.control.controlconnection.connect(bool)system.runtime.exceptionservices.exceptiondispatchinfo.throw()system.runtime.compilerservices.taskawaiter.throwfornonsuccess(system.threading.tasks.task)system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(system.threading.tasks.task)system.runtime.compilerservices.configuredtaskawaitable.ConfiguredTaskAwaitater.getresult()cassandra.connections.control.controlconnection.initasync()system.runtime.exceptionservices.exceptiondispatchinfo.throw()system.runtime.compilerservices.taskawaiter.ThrowForOnSuccess(system.threading.tasks.task)system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(system.threading.tasks.task)system.runtime.compilerservices.configuredtaskawaitable.configuredtaskawaiter.getresult()[调用堆栈被截断]
1条答案
按热度按时间bjp0bcyl1#
我猜你用的是datastax c#驱动程序。如果是这样的话,这里有一个关于ssl/tls的文档部分,它还链接到几个示例:https://docs.datastax.com/en/developer/csharp-driver/3.15/features/tls/
如果该片段是准确的,那么实际上您并没有设置
SSLOptions
上Builder.WithSSL()
方法。如果这不起作用,代码示例对您没有帮助,请向我们展示
ValidateServerCertificate
方法,以便我们可以看到证书验证中可能出现的错误。编辑(来自我下面的评论):
在tls/ssl文档页面上,有一部分与此相关:使用自定义根证书启用服务器身份验证。
如文档中所述,您要么必须在运行应用程序的计算机上安装该证书,要么必须提供与此类似的自定义证书验证器。
这个
SSLOptions.SetCertificateCollection()
方法用于客户端身份验证,因此它对于需要服务器身份验证的情况没有用处。