在我提出这个问题之前,让我先介绍一些背景知识,以便我们清楚地了解问题本身。我们需要使用 Elasticsearch (v5.2.x) 支持单向 SSL,使用 searchguard ssl。我们为开发人员(不是生产环境)提供了一个过程列表,负责生成自签名 SSL 证书。在这里,我们有一个根(本地创建)和实际的证书。如果我们导入密钥库(包含私钥和签名证书)和信任库(包含根证书),一切正常。
但几天前,我们收到了一个客户的请求。在那里,在生产中,我们需要支持SSL。因此,我们按照以下步骤操作:
使用我们的脚本,我们生成了私钥,将其导入密钥库,并生成了 csr。
我们给了客户企业社会责任。他得到了一个适当的CA的签名,并把证书还给我们。
现在,对于给定的证书,信任链的长度为3。因此,有一个根 CA,它签署了证书(颁发者 1),它签署了证书(颁发者 2),而证书又签署了实际的 csr。
为了将实际证书导入密钥库,我们导入了所有三个父证书,然后导入了实际的证书。
然后,我们从密钥库中删除了所有父证书。因此,现在密钥库只有私钥和实际证书。
我们将所有三个父证书导入到信任库中。
现在,如果我们启动 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 进行签名。任何帮助都值得赞赏,因为我弄清楚了这个问题的根本原因,因为我现在有点想法了。
白衣非少年
相关分类