elasticsearch 和 searchguard ssl 的密钥库和信任库问题

Keystore and truststore issue with elasticsearch and searchguard ssl

在问这个问题之前,让我先介绍一下背景,以便我们对问题本身有一个清晰的认识。我们需要通过 Elasticsearch (v5.2.x) 支持一种方式的 SSL,使用 searchguard ssl。我们有一份针对开发人员(而非生产)的程序列表,它负责生成自签名的 SSL 证书。这里我们有一个根(本地创建的)和实际的证书。如果我们导入密钥库(包含私钥和签名证书)和信任库(包含根证书)一切正常。

但几天前,我们收到了一位客户的请求。在那里,在生产中我们需要支持 SSL。所以,我们按照以下步骤操作:

  1. 使用我们的脚本,我们生成了私钥,将其导入密钥库,还生成了 csr。

  2. 我们给了客户csr。他得到了一个合适的 CA 的签名,并把证书还给了我们。

  3. 对于给定的证书,现在信任链的长度为 3。因此,有一个根 CA,它签署了证书 (issuer1),它签署了证书 (issuer2),后者又签署了实际的 csr。

  4. 为了将实际证书导入密钥库,我们导入了所有三个父证书,然后导入了实际证书。

  5. 然后我们从密钥库中删除了所有父证书。所以,现在密钥库只有私钥和实际证书。

  6. 我们将所有三个父证书导入信任库。

现在,如果我们启动 Elasticsearch,则会抛出以下错误:[ERROR][c.f.s.s.t.SearchGuardSSLNettyTransport] [uyyIg3i] SSL Problem Received fatal alert: certificate_unknown javax.net.ssl.SSLException: Received fatal alert: certificate_unknown

有趣的是,如果我们只有根 ca,签署实际的 csr,那么确切的过程是有效的。感谢任何帮助找出此问题的根本原因,因为我现在有点不知所措。

经过几次令人厌烦的调试之后,我们发现 CN-name 和实际主机名不同。使它们相同后,我们就可以正常工作了。