【问题标题】:MongoDB ssl in java works only with intermediate certificatejava中的MongoDB ssl仅适用于中间证书
【发布时间】:2015-01-01 16:19:36
【问题描述】:

我正在使用带有 SSL 连接的 MongoDB 2.6.3。
我没有使用客户端验证,SSL配置只有:

sslMode = 需要SSL
sslPEMKeyFile = /path/to/MyServerCertificate.pem

我正在使用的证书已签名,并由具有根 CA 的 CA 颁发给我的服务器,如下所示:
RootCA ---> SignerCA ---> MyServerCertificate

问题是:我正在尝试通过 java 连接,方法是使用 仅使用 SignerCA 指定信任库,并且一切正常。但是,当我使用 仅 RootCA 指定信任库时,我得到:

com.mongodb.MongoServerSelectionException:无法连接到任何服务器

在 mongo 日志中我可以看到:

错误:SSL:错误:14094416:SSL 例程:SSL3_READ_BYTES:sslv3 警报证书未知


我的java代码:

Builder options = MongoClientOptions.builder();

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("path/to/keystore"), "pass".toCharArray());

TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustFactory.init(ks);

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustFactory.getTrustManagers(), null);

options.socketFactory(sc.getSocketFactory());
new MongoClient("loclahost", options.build());

当我使用的密钥库仅包含 RootCA 时,由于某种原因我无法连接...
我会很高兴提出建议。谢谢。

【问题讨论】:

  • 您能否提供您正在使用的 MongoDB 服务器启动参数——例如,您是否在服务器配置中提供了 SSLCAFile? (客户端正在验证服务器,但反之亦然:只是确保这是您想要的行为。)此外,您是否将根 CA 文件和签名者 CA 都加载到您的密钥库中? (我不熟悉 Java 的 TrustManager API,但我担心它不知道 Signer CA 和 Root CA 之间的联系。) Root CA 是 KeyStore.TrustedCertificateEntry 吗?此外,为了澄清一下,“loclahost”是这篇文章的错字还是你的代码中的错字?
  • 感谢您的评论。正如您在文章开头看到的那样,这是没有 CA 文件的配置,因为我只想要客户端验证,而不需要服务器验证。 localhost 是错字,我正在为我的 mongo 远程服务器使用 RHLE 6.2。如果我在密钥库中有签名者 CA,则连接建立良好,如果我将根 CA 添加到同一个密钥库,它仍在工作(它没有影响)。问题在于密钥库仅包含根 CA。如果 TrustManager 不知道要建立链接,是不是违反了证书的原则?

标签: java mongodb ssl ca


【解决方案1】:

您看到的问题是因为 TrustManager 无法在您的证书、签名者 CA 和根 CA 之间建立链接。由于您的证书仅包含对签名者 CA 的引用,因此就 TrustManager 而言,证书和根 CA 之间没有链接。您需要提供签名者 CA 以表明该链接存在于受信任的机构。

举一个拟人化的例子,假设 Alice 正在 Security Corp 找工作。Alice 有 Bob 的推荐(签名证书),而 Bob 又是 Charlie 推荐(签名)的。如果 Security Corp 只能获得 Bob 对 Alice 的推荐(签名),而 Security Corp 信任 Charlie 但不知道 Bob 是谁,那么他们没有理由信任 Alice。 Security Corp 需要访问 Charlie 对 Bob 的推荐,以便信任 Bob 对 Alice 的推荐。

我希望这是有道理的!

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多