用于启用 SSL 的 Spring Boot Cassandra 配置

Posted

技术标签:

【中文标题】用于启用 SSL 的 Spring Boot Cassandra 配置【英文标题】:Spring boot Cassandra configuration for enabling SSL 【发布时间】:2021-04-07 21:05:45 【问题描述】:

我正在开发一个使用 Cassandra 的 Spring Boot 应用程序。我想在我的应用程序中启用 SSL,但似乎找不到如何配置 Cassandra 以使用 SSL。

@Configuration
 class CassandraApplicationConfiguration extends AbstractCassandraConfiguration 

        @Value("$spring.data.cassandra.contact-points:localhost")
        private String contactPoints;

        @Value("$spring.data.cassandra.keyspace-name:my_keyspace")
        private String keySpace;

        @Value("$spring.data.cassandra.port:9042")
        private int port;

        @Value("$spring.data.cassandra.username:cassandra")
        private String username;

        @Value("$spring.data.cassandra.password:cassandra")
        private String password;

        @Value("$spring.data.cassandra.schema-action:NONE")
        private String schemaAction;

       @Override
       protected AuthProvider getAuthProvider() 
           return new PlainTextAuthProvider(username, password);
       

另外我使用的是默认驱动,附带以下依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-cassandra</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

只需以下标志即可传递信任库和密码

-Djavax.net.ssl.trustStore=~/keys/internal-truststore
-Djavax.net.ssl.trustStorePassword=password

【问题讨论】:

【参考方案1】:

如果您使用的是集群工厂 bean

@Bean 
@Override public CassandraClusterFactoryBean cluster() 
    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
    PlainTextAuthProvider sap = new PlainTextAuthProvider(env.getProperty("cassandra.username"), env.getProperty("cassandra.password"));
    cluster.setContactPoints(env.getProperty("cassandra.contactpoints"));
    cluster.setPort(Integer.parseInt(env.getProperty("cassandra.port")));
    cluster.setAuthProvider(sap);
    cluster.setSslEnabled(true);
    return cluster; 

【讨论】:

引起:com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:xxx.xx.x.xxx/xxx.xx.x.xxx :9042 (com.datastax.driver.core.exceptions.TransportException: [ xxx.xx.x.xxx/xxx.xx.x.xxx::9042] Error writing)) --- 我一直收到这个错误

以上是关于用于启用 SSL 的 Spring Boot Cassandra 配置的主要内容,如果未能解决你的问题,请参考以下文章

启用 ssl 和 Elastic Beanstalk 的 Spring Boot - 找不到文件

Spring Boot启用HTTPS

将 .crt 添加到 Spring Boot 以启用 SSL

如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?

如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2

Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot