使用c连接aws cassandra#

jhkqcmku  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(382)

我正在尝试使用以下代码连接到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()[调用堆栈被截断]

bjp0bcyl

bjp0bcyl1#

我猜你用的是datastax c#驱动程序。如果是这样的话,这里有一个关于ssl/tls的文档部分,它还链接到几个示例:https://docs.datastax.com/en/developer/csharp-driver/3.15/features/tls/
如果该片段是准确的,那么实际上您并没有设置 SSLOptionsBuilder.WithSSL() 方法。
如果这不起作用,代码示例对您没有帮助,请向我们展示 ValidateServerCertificate 方法,以便我们可以看到证书验证中可能出现的错误。

编辑(来自我下面的评论):

在tls/ssl文档页面上,有一部分与此相关:使用自定义根证书启用服务器身份验证。
如文档中所述,您要么必须在运行应用程序的计算机上安装该证书,要么必须提供与此类似的自定义证书验证器。
这个 SSLOptions.SetCertificateCollection() 方法用于客户端身份验证,因此它对于需要服务器身份验证的情况没有用处。

相关问题