[SA HW3] database:client-cert連線憑證問題

85 views
Skip to first unread message

陳季磊

unread,
Dec 24, 2025, 12:25:16 AM12/24/25
to NYCU NASA 課程討論區
助教好,我在本地測試用:psql "host=postgres.111550053.cs.nycu user=judge dbname=uurl sslmode=require sslcert=judge.crt sslkey=judge.key sslrootcert=sarootca.crt"或是把以上三個檔案放到~/.postgres/然後直接跑都會成功,其中judge是從sa.crt簽的,但OJ上卻一開始就: [FAIL] Failed to connect to PostgreSQL database 'uurl' as user 'judge' with client certificate authentication.,想請問OJ檢查的方式跟我的測試方式之間是有甚麼區別嗎(前面tls的測資有通過)
螢幕擷取畫面 2025-12-24 131735.png

陳季磊

unread,
Dec 24, 2025, 12:30:03 AM12/24/25
to NYCU NASA 課程討論區
阿補充前面的,因為我在測試是不是sslmode的問題,所以我前面最後使用的sslmode只有require,但就算改成verify-full或是verify-ca都一樣能正常連線

陳季磊 在 2025年12月24日 星期三下午1:25:16 [UTC+8] 的信中寫道:

bogay.cs12

unread,
Dec 24, 2025, 11:27:09 AM12/24/25
to NYCU NASA 課程討論區
同學你好,
請問你 postgersql server 端憑證是如何產生的?我在想可能是因為這方面設定有問題,導致 judge 連線時驗證 CA 失敗了。

TA bogay

ericer...@gmail.com 在 2025年12月24日 星期三下午1:30:03 [UTC+8] 的信中寫道:

陳季磊

unread,
Dec 24, 2025, 12:08:30 PM12/24/25
to bogay.cs12, NYCU NASA 課程討論區
我是直接手動產生有很多個SAN,藉由sa.crt簽發的簽證,然後SAN中有包含到postgres,是應該要用acme去生只有唯一CN的版本嗎?還是是憑證的時間不能超過30分鐘?
這讓我想到我http3也是不知為何無法通過(curl --http3-only能過),可能也是相同原因?

--
這是 Google 網路論壇針對「NYCU NASA 課程討論區」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 nctunasa+u...@googlegroups.com
如要查看這個討論,請前往 https://groups.google.com/d/msgid/nctunasa/0137ac87-60de-4c0e-9620-fad0c9b9208fn%40googlegroups.com

陳季磊

unread,
Dec 24, 2025, 9:57:52 PM12/24/25
to NYCU NASA 課程討論區
我回去嘗試了一下,改成用跟acme申請到的憑證也一樣會失敗(我自己測可行但OJ不行),不管是http3還是pg

陳季磊 在 2025年12月25日 星期四凌晨1:08:30 [UTC+8] 的信中寫道:

bogay.cs12

unread,
Dec 25, 2025, 5:18:52 AM (14 days ago) 12/25/25
to NYCU NASA 課程討論區
同學你好,
能否請你提供一下 pg 所使用的設定檔內容以及相關的憑證及金鑰(包含 server 跟 client 的)?這樣我比較有機會找出可能的問題。
回應前面的問題,server 端的憑證可以有很多個 SAN 也沒關係,只要確保建立連線的時候 client 端可以拿到合法的憑證就好,期限超過 30 分鐘也 OK。
至於 HTTP/3 的問題,想確認一下你的 reverse proxy 在重開之後有可能需要一陣子才可以正常連線嗎?我推測有機會是腳本太快嘗試連線了。

TA bogay


ericer...@gmail.com 在 2025年12月25日 星期四上午10:57:52 [UTC+8] 的信中寫道:

陳季磊

unread,
Dec 25, 2025, 7:06:02 AM (14 days ago) 12/25/25
to NYCU NASA 課程討論區
使用postgres:17 image下去改,然後透過環境變數設置了user password db,之後就是改了:
1. pg_hba多一行: hostssl all*3 cert clientcert=verify-full
2. postgresql.conf(被註解掉的版本是我手動簽發的很多SAN的憑證跟key(web.*是sa.key簽的,chain.*是cat web.* sa.* 而來的),現在使用的from_caddy是從web服務中/root/.local/share/caddy/certificates/acme-8080-acme-acme-directory/postgres.111550053.cs.nycu透過volumes同步過來的資料夾)
ssl = on
ssl_ca_file = 'certs/sarootca.crt'
ssl_cert_file = 'certs/from_caddy/postgres.111550053.cs.nycu.crt'
#ssl_cert_file = 'certs/chain.crt'
ssl_key_file = 'certs/from_caddy/postgres.111550053.cs.nycu.key'
#ssl_key_file = 'certs/web.key
3. client端的crt跟key,我有發現我原本測試用的judge.crt誤用sarootca.key直接簽,所以我剛剛重新測試並生成了新的,改成用sa簽發並cat judge.crt sa.crt成post_chain.key來連線還是能成功
key跟csr生成是這樣,之後的驗證見附圖:
:~/hw3$ openssl genrsa -out judge.key 2048
:~/hw3$ openssl req -new -key judge.key -out judge.csr -subj "/CN=judge"

關於http3的部分,誠如助教所說,確實如果用腳本連續只針對web跑down -> up或是restart後立刻接curl 會失敗,不管是用哪種憑證,但如果一次重啟所有container就會其他人在卡時間所以我測了down up跟 restart各4次是都成功,所以應該不是這個原因?
bogay.cs12 在 2025年12月25日 星期四下午6:18:52 [UTC+8] 的信中寫道:
螢幕擷取畫面 2025-12-25 193452.png

bogay.cs12

unread,
Dec 25, 2025, 7:33:45 AM (14 days ago) 12/25/25
to NYCU NASA 課程討論區
同學你好,
請試試看在 ssl_ca_file 中把 intermediate cert 也包進去,我推測應該是這原因導致的,judge 中我簽出來 client cert 後就直接拿它來進行連線了。

TA bogay

ericer...@gmail.com 在 2025年12月25日 星期四晚上8:06:02 [UTC+8] 的信中寫道:

陳季磊

unread,
Dec 25, 2025, 8:23:59 AM (14 days ago) 12/25/25
to NYCU NASA 課程討論區
已解決,感謝助教,http3的延遲我等其他弄完再想想看怎麼解決
順帶一提,所以一般來說帶有intermediate cert是server要做的而不是client的?還是其實是我應該在pg中只放sa.crt不該把root ca丟出去?
bogay.cs12 在 2025年12月25日 星期四晚上8:33:45 [UTC+8] 的信中寫道:
Reply all
Reply to author
Forward
0 new messages