繁体   English   中英

带证书的 Nifi 和 Postgresql:如何设置客户端证书和密钥?

[英]Nifi and Postgresql with certificate: how to set client certificate and key?

我有一个在 openshift 中运行的 NIFI 映像和另一个部门“拥有”的云中的 postgres。

他们向我们发送了一个证书(“.crt”)和一个密钥(“.key”),因为登录是通过客户端证书而不是用户名和密码进行的。 我已成功登录 pgAdmin 4,但未使用证书和密钥将 NIFI 连接到 Postgres。

我已经上传了证书和镜像的密钥(使用秘密并安装它),所以如果我去 pod 终端,我可以访问它。

但是,当我将下面的连接字符串传递给 DBCPConnectionPoll 服务并激活 ExecuteSQL 处理器时,我收到证书无效的异常,如下所示:

ERROR
ExecuteSQL[id=...] Unable to execute SQL query <...>;
due to java.sql.SQLException: Cannot create a PoolableConnectionFactory (FATAL: connection requires a valid client certificate).
No FlowFile to route to failure: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: Cannot create a PoolableConnectionFactory (FATAL: connection requires a valid client certificate)

我尝试通过两种方式将证书传递给 DBCPConnectionPoll 服务:

1) 作为连接字符串中的参数(“数据库连接 url”属性:

jdbc:postgresql://<ip>:<port>/<username>?user=<username>&sslTrue&sslcert=/etc/.../mycerts/mycert.der&sslkey=/etc/.../mycerts/mykey.key.pk8

2)在服务中添加属性(+按钮和刚刚的参数名称和路径作为值)并将其作为url传递:

jdbc:postgresql://<ip>:<port>/<username>

一般来说,两者似乎都有效,因为我可以连接到另一个不需要 ssl 认证的 postgres。

一些考虑:

1)我的假设是 NIFI 中的连接字符串不知道正确读取证书和密钥的文件路径。

2)我已经多次将证书转换为java可以接收的不同类型,以查看是否是问题所在,但我仍然收到相同的异常。 所以看起来连接池根本没有“实现”文件。 不过,如果有人在这个话题上有发言权,那么在主要问题解决后,这会很方便。 所以也请欣赏这里的一些提示。

3)我还阅读了 NIFI 源代码,似乎 NIFI 通常使用 JDBC 类来创建连接池,所以我传递的连接字符串可以在 java 代码中工作,但不知何故在 NIFI 中不起作用(这是用java写的)。

4) jdbc 驱动程序和其他所有东西都配置正确,因为我可以在 NIFI 中使用非安全的 postgres。

非常感谢。

一位同事找到了我提出的问题的“简单解决方案”,我想分享一下,以便它可以帮助其他人。

缺少的是属性 sslmode = require。 包括在内后,该服务运行良好。 实际上,我不确定为什么它不能与 sslmode = prefer 一起使用,因为它是我的 pgadmin 用于同一个数据库的,并且它在那里工作得很好。 在这种情况下,似乎我们必须“强制”nifi 使用 ssl - 请参阅此处的文档: https ://jdbc.postgresql.org/documentation/head/ssl-client.html。

此外,一些见解:

  1. 它使用“.der”格式的证书和“.pk8”格式的密钥(不必根据其他服务的需要使用信任库和密钥库)。

  2. 可以在“加号”按钮中添加属性并为它们提供正确的名称,就像我们在 java 代码中所做的那样,而不是连接连接字符串中的每个属性(请参阅上面问题中的第二个选项)。

让它也帮助他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM