iT邦幫忙

1

CockroachDB 安全憑證問題(Python)

  • 分享至 

  • xImage

請問各位前輩,為何我透過SSH連到CockroachDB會需要憑證及帳密,但我的Python程式可以直接連不需要指定憑證,只需要帳密就可以直接存取,原理為何?

補充:
DB version: CockroachDB CCL v21.2.14 (x86_64-unknown-linux-gnu)
python version: 3.9.13
python package: sqlalchemy-cockroachdb==1.4.4
Python機器地端自建,CentOS7
CockroachDB機器地端自建,CentOS7
DB connection code:

@classmethod
def get_report_db_cr_report_db_conn(cls):
  source_db_host = f"cockroachdb+psycopg2://{cls.SOURCE_DB_CR_REPORT_DB['username']}:{cls.SOURCE_DB_CR_REPORT_DB['passwd']}@{cls.SOURCE_DB_CR_REPORT_DB['host']}/{cls.SOURCE_DB_CR_REPORT_DB['database']}"
  engine = create_engine(source_db_host)
  conn = engine.connect()
  return conn

DBGate Config:
https://ithelp.ithome.com.tw/upload/images/20230109/20114492e7Cb3wQXTp.png
DBGate Error:
https://ithelp.ithome.com.tw/upload/images/20230109/20114492rwQnI4RvSY.png

error: node is running secure mode, SSL connection required
Error JSON: {
  "length": 116,
  "name": "error",
  "severity": "ERROR",
  "code": "08P01",
  "file": "server.go",
  "line": "1027",
  "routine": "maybeUpgradeToSecureConn"
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
Ray
iT邦大神 1 級 ‧ 2023-01-06 08:43:44

你是用 ssh 連上 CockroachDB 資料庫的 Port (23257)?
還是用 ssh 連進安裝了 CockroachDB 資料庫的主機 OS (Port 22)?

順便講一下: 這台 CockroachDB 主機是怎麼架設的? 用甚麼 OS?

看更多先前的回應...收起先前的回應...
Peter iT邦新手 4 級 ‧ 2023-01-06 09:36:41 檢舉

感謝raytracy大神的回覆,

CockroachDB主機是地端自建機器,用CentOS7。

我是用SSH連進資料庫實例,具體一點的話其實是用DBGate client (SSH tunnel)連,這時候是會需要憑證與帳密,然後Python又是在另一台也是地端自建的機器CentOS7。

Peter iT邦新手 4 級 ‧ 2023-01-06 09:40:46 檢舉

另外再補充一點是,我的Python APP只要IP是在白名單內,我放在任何機器上去對CockroachDB存取,都不需憑證只需要帳密,這讓我有點疑惑

re.Zero iT邦研究生 5 級 ‧ 2023-01-07 16:18:50 檢舉

從你因 raytracy 大提醒而補充的資訊:

  1. 就我在 這裡 看到的 Connect to multiple databases, directly or through SSH tunnel這句,我猜是因為你用 SSH tunnel 這功能才需要憑證(or SSH-Key)。

  2. 你補充 python package: sqlalchemy-cockroachdb 卻沒提到程式碼,所以後續我用猜的。從:

    這兩項資訊,我猜你在 Python 程式碼內沒啟用加密連線。

Ray iT邦大神 1 級 ‧ 2023-01-07 16:45:38 檢舉

樓上分析正確; 請把 DBGate 連線設定參數貼上來才知道....

文件上說 directly or through SSH tunnel 兩者皆可, 所以你應該試試看:
在 DBGate 的連線設定裡面, 取消 SSH Tunnel 的選項, 讓她直連...

Peter iT邦新手 4 級 ‧ 2023-01-09 12:01:14 檢舉

感謝兩位大神的回覆,很抱歉一開始給的資訊不足,我對這方面的專業知識還非常欠缺,並且我仔細看才發現DBGate要求的是SSL的CA憑證。

回覆Zero大:
也正如您所說的,我的Python沒有針對SSL參數做設定,只有單純的create-engine就連了,但是DBGate如果沒有指定CA憑證的話,出現的Error:node is running secure mode,是否就代表著DB是有規定需要走SSL憑證這條?

回覆raytracy大:
我把DBGate的SSL的設定拿掉後,就會出現Error:node is running secure mode,就沒法直接連了。
經過詢問後得知,當時在建這台CRDB時,是有設定要走安全模式的,因此DB有自動產生出一個CA憑證,也就是我提交後才能正常連線的那個CA憑證,所以我就會認為Python也應該要按照DB的設定走SSL才對,為何他就可以不受DB的規則去連呢?

Ray iT邦大神 1 級 ‧ 2023-01-09 19:35:40 檢舉

DBGate 是跑在你自己的電腦上?
Python 是跑在另外架的 CentOS?

如果以上都對的話, 請問那台跑 Python 的 CentOS 是你架的嗎?

Peter iT邦新手 4 級 ‧ 2023-01-11 12:49:08 檢舉

對,DBGate是我用notebook開的,Python與CRDB的機器是DevOps架的,並且兩台是不同的機器

re.Zero iT邦研究生 5 級 ‧ 2023-01-17 02:58:30 檢舉

抱歉,因為 iT邦幫忙 沒跳通知(一般討論內沒被標記的人不會被通知~),我都忘了這篇的存在;找舊文時關注一下才注意到這裡有進一步的討論。

@Peter:

但是DBGate如果沒有指定CA憑證的話,出現的Error:node is running secure mode,是否就代表著DB是有規定需要走SSL憑證這條?

這要看伺服端與客戶端在協定上是如何運作的。
也就是說,如果有這樣的設計時:伺服端被設定可以不使用 SSL 而連線時,DBGate 能採用伺服端能接受的其他方式。
這樣 DBGate 就不必採用 SSL 連線了。(我沒去翻文件,所以這只是假說~)

另,關於 sqlalchemy-cockroachdb 能以密碼驗證連線 CockroachDB 而無須 SSL,可能原因很多(例如相容性上的設計),我懶得翻源碼、文件(我有翻下源碼,然而看了一下就懶了~),
但我覺得你可以參考 Authenticating to CockroachDB Self-Hosted Clusters (亦可關注一下該文件內的 Password authentication without TLS 部分) 去驗證你的環境。

P.s. 你在 StackOverflow 也有發文的樣子,提醒你有空回去關注一下(雖說沒看到能參考的回應就是了~)。

re.Zero iT邦研究生 5 級 ‧ 2023-01-17 19:40:04 檢舉

補,node is running secure mode, SSL connection required 是 CockroachDB 程式碼的字串,所以狀況應該是 CockroachDB 回絕 DBGate 非安全性的連線。

我要發表回答

立即登入回答