当前位置: 首页 > 知识库问答 >
问题:

无法从JAVA连接到Mongo SSL副本集

耿永寿
2023-03-14

mongo admin--主机mongo1.xxxx.com--ssl--sslpemkeyfile mongoclient.pem--sslcafile mongoca.crt

不起作用

public static void main(String args[]){
    System.setProperty("javax.net.ssl.trustStore","/home/gasparms/truststore.ts");
    System.setProperty("javax.net.ssl.trustStorePassword", "mypasswd");

    System.setProperty("javax.net.ssl.keyStore", "/home/gasparms/truststore.ts");
    System.setProperty("javax.net.ssl.keyStorePassword", "mypasswd");
    System.setProperty("javax.security.auth.useSubjectCredsOnly","false");

    MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true)
    .build();

    MongoClient mongoClient = new MongoClient("mongo1.xxxx.com",options);
    System.out.println(mongoClient.getDatabaseNames());
}

我从Mongo这边得到了这个错误:

openssl x509 -outform der -in certificate.pem -out certificate.der
keytool -import -alias MongoDB-Client -file certificate.der -keystore truststore.ts -noprompt -storepass "mypasswd"
keytool -import -alias "MongoDB-CA" -file mongoCA.crt -keystore truststore.ts -noprompt -storepass "mypasswd"

我做错了什么?

共有1个答案

东门玺
2023-03-14

我也有同样的问题,对我来说,这是我创建密钥库的方式的问题。我注意到您对truststore和KeyStore都使用了同一个文件truststore.ts。这可以起作用,但我建议使用单独的文件以避免混淆。

我已经为根CA和mongo用户创建了。pem文件,并且能够成功地使用它们与mongo shell连接。我从它们中创建了truststore.jks和keystore.jks。

首先,为了创建TrustStore.jks,我运行了:

keytool -import -alias root -storepass mypass -keystore truststore.jks -file rootca.pem -noprompt

对于keystore.jks,您需要公钥和私钥,因此首先将PEM文件转换为PKCS12格式,然后导入到JKS:

openssl pkcs12 -export -out myuser.pkcs12 -in myuser.pem -password pass:mypass
keytool -importkeystore -srckeystore myuser.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS -deststorepass mypass -srcstorepass mypass
 类似资料:
  • null 我确信我已经在127.0.0.1:27017启动了数据库服务,并且可以用shell和非异步方法连接。错误: PrimaryServerSelector没有从群集描述中选择服务器ClusterDescription{type=unknown,connectionmode=single,all=[ServerDescription{address=localhost:27017,type=u

  • 我在将Netbeans中的Java与localhost中的mariadb连接时遇到问题。我已经看到一些类似的帖子,从Linux上NetBeans的Java应用程序连接到MariaDB(Mageia)但不起作用,这是非常相似的,所以我不知道为什么这个帖子不能帮助我。 我在/etc/my.cnf中选中了skip-networking指令,但它已经被注释了。

  • 我试图连接到mysql数据库从docker图像。然而,这是投掷错误。 下面是我正在使用的docker图像。https://hub.docker.com/_/mysql/ 下面是我用来运行docker映像的命令。 以下是命令的输出 如果我使用docker检查IP并ping该IP,则显示IP不可访问。 如果我尝试使用和我遇到以下错误。 无法加载身份验证插件“缓存\u sha2\u密码”。

  • 我正在尝试使用rds部署带有MySQL引擎的rds实例。数据库子网组位于公用子网中。 我已执行以下检查:-允许安全组在端口3306上进行公共访问-在端口3306上的endpointURL上成功执行Telnet命令 配置如下: 日志记录详细信息: 正在尝试使用console连接到rds

  • 我试图运行一个连接到本地独立spark集群的java应用程序。我使用start-all.sh以默认配置启动集群。当我转到集群的web页面时,它被启动为OK。我可以用SparkR连接到这个集群,但是当我使用相同的主URL从Java内部连接时,我会得到一条错误消息。 下面是Spark日志中的输出: