Dialogflow 啟動的網路流量會透過公用網路傳送,以發出 Webhook 要求。為確保雙向流量安全無虞,Dialogflow 可選擇性支援相互傳輸層安全標準 (mTLS) 驗證。在 Dialogflow 的標準 TLS 握手期間,您的 Webhook 伺服器會提供可供 Dialogflow 驗證的憑證,驗證方式包括追蹤憑證授權單位鏈結,或將憑證與自訂 CA 憑證進行比較。在 Webhook 伺服器上啟用 mTLS 後,Webhook 伺服器就能驗證 Dialogflow 提供的 Google 憑證,完成相互信任的建立程序。
要求 mTLS
如要要求 mTLS,請按照下列步驟操作:
- 準備 Webhook HTTPS 伺服器,在 TLS 握手期間要求用戶端憑證。
- Webhook 伺服器應在收到用戶端憑證時進行驗證。
- 為 Webhook 伺服器安裝憑證鏈,讓用戶端和伺服器都能相互信任。連線至 Google 服務的應用程式應信任 Google Trust Services 列出的所有憑證授權單位。您可以從 https://pki.goog/ 下載根憑證。
使用 mTLS 呼叫 Webhook 伺服器的範例
這個範例會使用快速入門導覽課程中顯示的代理程式,以及執行 openssl 的 Webhook 伺服器。
- 設定範例
- Dialogflow ES 代理程式,會向使用者問候,並查詢指向獨立網路伺服器的 Webhook。
- 用於 TLS 通訊的私密金鑰,位於名為
key.pem的檔案中。 - 由公開信任的憑證授權單位 (CA) 簽署的憑證鏈,位於名為
fullchain.pem的檔案中。
-
在伺服器電腦中執行
openssl s_server程式。sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1 - 要求會從用戶端電腦傳送至代理程式。在本例中,要求為「Hi」。您可以使用 Dialogflow 控制台或透過 API 呼叫傳送這項要求。
-
伺服器電腦中「
openssl s_server」的輸出內容。verify depth is 1 Using default temp DH parameters ACCEPT depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1 verify return:1 depth=1 C = US, O = Google Trust Services LLC, CN = GTS CA 1D4 verify return:1 depth=0 CN = *.dialogflow.com verify return:1 -----BEGIN SSL SESSION PARAMETERS----- MII... -----END SSL SESSION PARAMETERS----- Client certificate -----BEGIN CERTIFICATE----- MII... -----END CERTIFICATE----- subject=CN = *.dialogflow.com issuer=C = US, O = Google Trust Services LLC, CN = GTS CA 1D4 Shared ciphers:TLS_AES_128_GCM_SHA256:... Signature Algorithms: ECDSA+SHA256:... Shared Signature Algorithms: ECDSA+SHA256:... Peer signing digest: SHA256 Peer signature type: RSA-PSS Supported Elliptic Groups: 0x6A6A:... Shared Elliptic groups: X25519:... CIPHER is TLS_AES_128_GCM_SHA256 Secure Renegotiation IS NOT supported POST /dialogflowFulfillment HTTP/1.1 authorization: Bearer ey... content-type: application/json Host: www.example.com Content-Length: 1011 Connection: keep-alive Accept: */* User-Agent: Google-Dialogflow Accept-Encoding: gzip, deflate, br { "responseId": "96c0029a-149d-4f5d-b225-0b0bb0f0c8d9-afbcf665", "queryResult": { "queryText": "Hi", "action": "input.welcome", "parameters": { }, "allRequiredParamsPresent": true, "outputContexts": [{ "name": "projects/PROJECT-ID/agent/sessions/58ab33f3-b57a-aae9-fb23-8306242d4871/contexts/__system_counters__", "parameters": { "no-input": 0.0, "no-match": 0.0 } }], "intent": { "name": "projects/PROJECT-ID/agent/intents/399277d6-2ed7-4329-840d-8baa0f60480e", "displayName": "Default Welcome Intent" }, "intentDetectionConfidence": 1.0, "languageCode": "en", "sentimentAnalysisResult": { "queryTextSentiment": { "score": 0.2, "magnitude": 0.2 } } }, "originalDetectIntentRequest": { "source": "DIALOGFLOW_CONSOLE", "payload": { } }, "session": "projects/PROJECT-ID/agent/sessions/58ab33f3-b57a-aae9-fb23-8306242d4871" }ERROR shutting down SSL CONNECTION CLOSED
最佳做法
為確保 Webhook 要求是由您自己的 Dialogflow 代理程式發起,請驗證要求授權標頭中的 Bearer 服務身分識別權杖。或者,您也可以驗證先前由您端的驗證伺服器提供的會期參數。
錯誤
如果用戶端憑證驗證失敗 (例如,Webhook 伺服器不信任用戶端憑證),TLS 握手就會失敗,工作階段也會終止。
常見錯誤訊息:
| 錯誤訊息 | 說明 |
|---|---|
| 無法驗證用戶端憑證:x509:憑證由不明授權單位簽署 | Dialogflow 會將用戶端憑證傳送至外部 Webhook,但外部 Webhook 無法驗證該憑證。這可能是因為外部 Webhook 未正確安裝 CA 鏈結。應信任 Google 的所有根 CA。 |