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

时间:2019-03-17 18:06:45

标签: java ssl elasticsearch keystore truststore

在提出问题之前,请允许我提供一些背景知识,以便我们对问题本身有一个清晰的了解。我们需要使用searchguard ssl支持SSL与Elasticsearch(v5.2.x)的一种方式。我们为开发人员(而非生产人员)提供了一系列过程,这些过程负责生成自签名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进行签名即可使用确切的过程。感谢您提供帮助,找出了此问题的根本原因,因为我现在有点想法了。

1 个答案:

答案 0 :(得分:1)

经过几次艰苦的调试之后,我们发现CN名称和实际的主机名称不同。在使它们两个相同之后,我们开始工作了。