如何在 Ubuntu 和 Windows 10 Power BI plus PostgreSQL 上的 PostgreSQL 11 數據庫上設置簽名的 SSL 根和葉證書?
我在 Windows 10 上安裝了 Power BI 和 PostgreSQL 11,在 Ubuntu 18.10 Linux 上安裝了我的主 PostgreSQL 11 數據庫。我將postgresql.conf和pg_hba.conf文件正確編輯為我的 Windows 10 電腦與 PostgreSQL 11 和 Power BI 一起使用的 IP 地址,以連接到我的 PostgreSQL 11 Ubuntu 數據庫。但是,當我可以通過命令行手動連接時,我在 Power BI 中遇到了錯誤。
通過 Microsoft 支持進行故障排除後,我被告知:
這表明 Postgresql 伺服器沒有配置其證書,因此無法連接到 PowerBI。為了允許客戶端驗證伺服器的身份,在客戶端放置一個根證書,在伺服器上放置一個由根證書籤名的葉證書。為了允許伺服器驗證客戶端的身份,在伺服器上放置一個根證書,在客戶端上放置一個由根證書籤名的葉證書。可以使用一個或多個中間證書(通常與葉證書一起儲存)。
但是,我對教程感到困惑
- https://www.postgresql.org/docs/current/libpq-ssl.html和
- https://www.gab.lc/articles/postgresql_with_ssl/ .
錯誤資訊
我收到的錯誤消息是:
“ConnectionId”:“bcfc620b-0fda-4db9-bda6-d9ac4aabcc4c”,“Exception”:“Exception:\r\nExceptionType: System.Security.Authentication.AuthenticationException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089\r\n消息:根據驗證過程,遠端證書無效。\r\nStackTrace:\n 在 System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)\r\n 在 System .Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)\r\n 在 System.Net.Security.SslState.ProcessReceivedBlob(Byte
$$ $$緩衝區,Int32 計數,AsyncProtocolRequest asyncRequest)\r\n 在 System.Net.Security.SslState.StartReceiveBlob(Byte$$ $$緩衝區,AsyncProtocolRequest asyncRequest)\r\n 在 System.Net.Security.SslState.CheckCompletionBef
和
詳細資訊:“從提供程序讀取數據時發生錯誤:‘根據驗證程序,遠端證書無效。’”
和
詳細資訊:“Microsoft SQL:與伺服器建立連接成功,但在登錄前握手期間發生錯誤。(提供者:TCP 提供者,錯誤:0 - 現有連接被最遠主機強行關閉。)”
問題
我不知道在我的 Ubuntu PC 上需要執行哪些步驟以及在我的 Windows PC 上需要執行哪些步驟。我不知道使用證書配置 Power BI 是否需要特殊步驟。如何設置我的雙向證書?
有人可以提供一個非常詳細的教程,告訴我“如何”閱讀教程,或者解釋答案中的步驟嗎?
我相信 PowerBI 使用 npgsql 進行連接,這預設為 libpq/psql 在“PGSSLMODE=verify-full”下為您提供的行為。如果您使用“PGSSLMODE=verify-full”,您可以從 Windows psql 連接到您的伺服器嗎?
您連結的教程假設您為證書頒發機構和數據庫伺服器使用同一台機器,這可能對您有用。但它也假設客戶端機器是 debian/ubuntu,而不是 Windows。因此,在您的 ubuntu 機器上“配置客戶端”之前,您將完成所有工作。但是根據您收到的錯誤消息,您可能已經這樣做了。
你必須在你的 Windows 機器上“配置客戶端”之後做所有的事情,除了你必須使用 Windows 機制,而不是 linux 機制。如何做到這一點是您的基礎設施如何設置的問題——您需要某種方法將文件 ca-cert.pem 從證書頒發機構複製到 Windows 機器,但該機制可能是 scp(如果您安裝了該機制)在 Windows 上,可能通過 cygwin)或 CIFS 掛載,或者只是從 putty 中複製 .pem 文件的文本並將其粘貼到記事本中,或者使用拇指驅動器。
請注意,本教程用於雙向使用證書——客戶端驗證伺服器的身份,伺服器也驗證客戶端。但是很少有人真正使用客戶端證書——他們通常只使用伺服器證書。如果您不使用客戶端證書,那麼您只需要在客戶端上安裝一個證書,即“ca-cert.pem”文件(安裝在客戶端上時應命名為“root.crt”)。其他兩個僅用於客戶端證書。而在 Windows 上,它需要安裝的路徑是 %APPDATA%\postgresql\root.crt,而不是 ~/.postgresql/root.crt。
來自初學者的謙虛建議。
我建議從 Windows 上的 pgAdmin 開始,以了解您在這裡是否有基本錯誤。
安裝最新版本的pgAdmin。
然後創建一個新伺服器(= 一個新連接):
並逐步載入您的證書。這
ca-cert.pem
可能是“根證書”。我用這裡Require
代替Verify-Full
。如果這可行,它也應該在 Power BI 前端上執行 - 請耐心等待。嘗試模仿你在 pgAdmin 中所做的事情。
運氣好的話,在 Windows 上的 pgAdmin 中執行此操作也足以解鎖 Windows 上的 Power BI,而無需在 Power BI 中載入證書。至少在 Linux 上,我注意到每次查詢 PostgreSQL 時都不需要驗證與證書的連接。驗證似乎只需要在較長時間後進行。它是同一台伺服器,您在 pgAdmin 中所做的更改也將在 Power BI 中可用,也許證書是在 Windows 內部(系統範圍)載入的。