使用 openssl 升級/更新 Postgres SSL 伺服器證書
我繼承了帶有 SSL 客戶端的公司 Postgres 伺服器。到目前為止,它的大約 100 個使用者。
兩個問題:我的Ca Cert(root.crt)明年到期,好像還是TlsV1.0。因此迫切需要升級(更新)。
我應該避免的是為所有使用者製作新的客戶端證書。這對我來說將成為一場噩夢:-)
因此,我尋找了一種新舊證書都可以使用的解決方案,直到所有舊證書都過期。我喜歡很多提示(也在 Serverfault 上),但到目前為止沒有任何效果。
到目前為止我所做的:我使用舊的 ca 密鑰 (rootCa.key) 並創建了一個新的 root.crt),我使用舊的伺服器密鑰 (server.key) 創建了一個新的 server.crt。我在我的 Postgres 備份伺服器上安裝了吊銷列表 (root.crl)、root.crt、server.crt 和 server.key。
我可以連接 newUser.crt 證書,但不能連接舊證書….正如我所料。
我確實像地獄一樣搜尋了網路,並找到了在伺服器上合併新舊證書的提示。因此,我將證書與 cat: cat oldRoot.crt >> root.crt 也用於其他文件。撤銷列表不起作用,所以我在 Postgres.conf 中評論了 Line: #ssl_crl_file =。似乎 Postgres 也可以在沒有撤銷列表的情況下工作。
結果:根據 server.crt 中首先出現的證書,我可以連接舊證書或新證書,但不能同時連接兩者。為了測試它,我使用了合併的 root.crt 與 oldServer.cert 以及 newServer.cert。兩者都與新的或舊的一起工作。
這意味著,合併的 root.crt 工作正常,但不是合併的 server.crt。
我用 openssl 檢查它並合併 root.crt 和合併 server.crt: openssl verify -verbose -x509_strict -CAfile root.crt -CApath 。old_cert.crt server.crt old_cert.crt:好的 server.crt:好的
openssl 驗證 -verbose -x509_strict -CAfile root.crt -CApath 。new_cert.crt server.crt new_cert.crt: OK server.crt: OK
似乎 openssl 可以管理合併的證書,但不能管理 Postgres。
知道如何解決這個問題嗎?
任何提示表示讚賞。
問候圖比
伺服器:Ubuntu 2104、Postgres13 備份伺服器:Ubuntu 1604、Postgres13
我對我的問題的簡短回答是:Yabadabbadooh….這是可能的,並且可以在我的備份系統上執行!
它沒有讓我睡覺,所以我從頭開始:首先我再次檢查新舊證書是否有任何差異,唯一的區別是主題的順序不同,但內容相同。
#1 所以我用舊的 rootCa.key 和舊的 server.key 製作了一個新的 root.crt 和 server.crt,主題順序相同。現在文本輸出相同(主題,簽名算法……)
#2 我用 root.crt 創建了一個新的 userCert。
#3 我在 Postgres 中安裝了證書並進行了測試-> 工作。
#4 這次我從頂部的新證書開始。
cat root_old.crt >> root.crt
cat server_old.crt >> server.crt
cat server_old.key >> server.key
postgres restart …… 現在新舊證書都在工作!
#5 檢查在合併後複製舊證書的另一種方式,然後:
cat root_new.crt >> root.crt
cat server_new.crt >> server.crt
cat server_new.key >> server.key
postgres restart ……它不再工作了。回到第 4 步,一切正常。
#6 吊銷列表:我為新證書創建了一個吊銷列表並將其安裝在 postgres 中。然後:
貓 root_old.crl >> root.crl
取消註釋該行:ssl_crl_file = /root.crl postgres restart ……並且一切正常。
我不知道為什麼它現在可以工作,我真的不敢相信它的主題順序……我猜我在第一次嘗試中犯了其他錯誤。但我不會試圖找出答案,它有效,就是這樣:-)
結論:
使 root.crt (CA) 和 server.crt 使用舊密鑰並儘可能相同。(檢查主題等)
合併證書、吊銷列表和密鑰,使舊證書位於文件底部
現在舊證書一直有效,直到它們過期,例如,您可以使用升級的 Tls 創建新證書(使用新 CA)。
關於 Tls 版本的一些附加資訊。當我將伺服器升級到 Ubuntu 2104 和 Postgres 13 時,證書不起作用。我發現在 /etc/ssl/openssl.conf 中添加這一行的提示
MinProtocol = TLSv1.0
我知道這不好,但暫時有所幫助。我找不到測試證書是否為 Tlsv1.0 或更高版本的方法。唯一測試其 TlsV1.2 是否使用 pgsql (13) 或 pgadmin4,兩者都不適用於 TlsV1.0
所以在我的證書創建配置文件中,我使用這個:
MinProtocol = TLSv1.2
psql (13) 和 pgadmin4 現在可以使用新證書。當所有舊的都過期時,我將 /etc/ssl/openssl.conf 再次更改為該值。
升級到下一個 Tls 版本已經失去了它的魅力:-)