簡體   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