התנועה ברשת שנוצרת על ידי Dialogflow עבור בקשות webhook נשלחת ברשת ציבורית. כדי להבטיח שהתעבורה מאובטחת ומהימנה בשני הכיוונים, Dialogflow תומך באופן אופציונלי באימות TLS בו-זמני (mTLS). במהלך לחיצת היד של TLS הרגילה של Dialogflow, שרת ה-webhook שלכם מציג אישור שאפשר לאמת באמצעות Dialogflow, על ידי מעקב אחר שרשרת רשות האישורים או על ידי השוואת האישור לאישור CA מותאם אישית. אם מפעילים mTLS בשרת ה-webhook, הוא יוכל לאמת את האישור של Google שמוצג על ידי Dialogflow לשרת ה-webhook לצורך אימות, וכך להשלים את יצירת האמון ההדדי.
בקשת mTLS
כדי לבקש mTLS:
- מכינים את שרת ה-HTTPS של ה-webhook לבקשת אישור הלקוח במהלך לחיצת היד של TLS.
- שרת ה-webhook צריך לאמת את אישור הלקוח כשהוא מתקבל.
- מתקינים שרשרת אישורים לשרת ה-webhook, שגם הלקוח וגם השרת יכולים לסמוך עליה. אפליקציות שמתחברות לשירותי Google צריכות לתת אמון בכל רשויות האישורים שמפורטות ב-Google Trust Services. אפשר להוריד אישורי בסיס מהכתובת:https://pki.goog/.
דוגמה לקריאה לשרת webhook באמצעות mTLS
בדוגמה הזו נעשה שימוש בסוכן שמוצג בהפעלה המהירה עם שרת webhook שפועל ב-openssl.
- הגדרה לדוגמה
- סוכן 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 Console או באמצעות קריאה ל-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 החיצוני לא יכול לאמת אותו. יכול להיות שהסיבה לכך היא ששרשרת אישורי ה-CA לא הותקנה בצורה נכונה ב-webhook החיצוני. צריך לסמוך על כל רשויות אישורי הבסיס של Google. |