Dialogflow 為 Webhook 要求啟動的網路流量會透過公用網路傳送。為確保流量在雙向傳輸時都安全且可信任,Dialogflow 可選擇支援雙向傳輸層安全標準 (mTLS) 驗證。在 Dialogflow 的標準 TLS 握手期間,您的 webhook 伺服器會提供可由 Dialogflow 驗證的憑證,方法是遵循憑證授權單位鏈結或將憑證與自訂 CA 憑證進行比較。在 webhook 伺服器上啟用 mTLS 後,該伺服器就能驗證 Dialogflow 提供給 webhook 伺服器的 Google 憑證,完成建立互信。
要求使用 mTLS
如要要求使用 mTLS:
- 準備 webhook HTTPS 伺服器,在 TLS 握手期間要求用戶端憑證。
- 您的 webhook 伺服器應在收到用戶端憑證時驗證該憑證。
- 為 webhook 伺服器安裝憑證鏈,讓用戶端和伺服器都能相互信任。連線至 Google 服務的應用程式應信任 Google Trust Services 列出的所有憑證授權單位。您可以前往 https://pki.goog/ 下載根憑證。
使用 mTLS 呼叫 Webhook 伺服器的範例
本範例會使用快速入門導覽課程中顯示的代理程式,搭配執行 webhook 伺服器的 openssl
。
- 設定範例
- Dialogflow ES 代理程式會向使用者問候,並查詢指向獨立網頁伺服器的 webhook。
- 用於 TLS 通訊的私密金鑰,位於名為
key.pem
的檔案中。 - 在名為
fullchain.pem
的檔案中,由公認信任的 CA (憑證授權單位) 簽署的憑證鏈。
-
在伺服器機器中執行
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 代理程啟動,請從要求的 Authorization 標頭驗證 Bearer 服務身分權杖。或者,您也可以驗證先前由您端驗證伺服器提供的會話參數。
錯誤
如果用戶端憑證驗證失敗 (例如 webhook 伺服器不信任用戶端憑證),TLS 握手就會失敗,且工作階段會終止。
常見錯誤訊息:
錯誤訊息 | 說明 |
---|---|
無法驗證用戶端憑證:x509:憑證由不明授權單位簽署 | Dialogflow 會將用戶端憑證傳送至外部 Webhook,但外部 Webhook 無法驗證。這可能是因為外部 webhook 未正確安裝 CA 鏈結。應信任 Google 的所有根 CA。 |