Traffic jaringan yang dimulai oleh Dialogflow untuk permintaan webhook dikirim di jaringan publik. Untuk memastikan bahwa traffic aman dan tepercaya di kedua arah, Dialogflow secara opsional mendukung Autentikasi TLS Timbal Balik (mTLS). Selama TLS handshake standar Dialogflow, server webhook Anda menampilkan sertifikat yang dapat divalidasi oleh Dialogflow, baik dengan mengikuti rantai Certificate Authority atau dengan membandingkan sertifikat dengan sertifikat CA Kustom. Dengan mengaktifkan mTLS di server webhook, server tersebut akan dapat mengautentikasi sertifikat Google yang diberikan oleh Dialogflow ke server webhook Anda untuk divalidasi, sehingga menyelesaikan pembentukan kepercayaan bersama.
Meminta mTLS
Untuk meminta mTLS:
- Siapkan server HTTPS webhook Anda untuk meminta sertifikat klien selama TLS handshake.
- Server webhook Anda harus memverifikasi sertifikat klien setelah menerimanya.
- Instal rantai sertifikat untuk server webhook Anda, yang dapat dipercaya secara timbal balik oleh klien dan server. Aplikasi yang terhubung ke layanan Google harus memercayai semua Otoritas Sertifikat yang tercantum oleh Google Trust Services. Anda dapat mendownload sertifikat root dari: https://pki.goog/.
Contoh panggilan ke server webhook menggunakan mTLS
Contoh ini menggunakan agen yang ditampilkan dalam panduan memulai dengan server
webhook yang
berjalan
openssl.
- Contoh penyiapan
- Agen Dialogflow ES yang menyapa pengguna akhir dan mengkueri webhook yang mengarah ke server web mandiri.
- Kunci pribadi untuk komunikasi TLS dalam file bernama
key.pem. - Rantai sertifikat yang ditandatangani oleh
CA (Certificate Authority) yang tepercaya secara publik dalam file bernama
fullchain.pem.
-
Jalankan program
openssl s_serverdi mesin server.sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1 - Permintaan dikirim ke agen dari mesin klien. Untuk contoh ini, permintaannya adalah "Hai". Permintaan ini dapat dikirim menggunakan Konsol Dialogflow, atau melalui panggilan API.
-
Output
openssl s_serverdi mesin 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
Praktik Terbaik
Untuk memastikan bahwa permintaan webhook dimulai dari agen Dialogflow Anda sendiri, Anda harus memverifikasi token identitas layanan Bearer dari header Otorisasi permintaan. Atau, Anda dapat memverifikasi parameter sesi yang diberikan sebelumnya oleh server autentikasi di sisi Anda.
Error
Jika validasi sertifikat klien gagal (misalnya, server webhook tidak memercayai sertifikat klien), TLS handshake akan gagal dan sesi akan berakhir.
Pesan error umum:
| Pesan error | Penjelasan |
|---|---|
| Gagal memverifikasi sertifikat klien: x509: certificate signed by unknown authority | Dialogflow mengirimkan sertifikat kliennya ke webhook eksternal, tetapi webhook eksternal tidak dapat memverifikasinya. Hal ini mungkin terjadi karena webhook eksternal tidak menginstal rangkaian CA dengan benar. Semua CA root dari Google harus dipercaya. |