Traffic jaringan yang dimulai oleh Dialogflow untuk permintaan webhook dikirim di jaringan publik. Untuk memastikan traffic aman dan tepercaya di kedua arah, Dialogflow secara opsional mendukung Autentikasi TLS bersama (mTLS). Selama TLS handshake standar Dialogflow, server webhook Anda akan menampilkan sertifikat yang dapat divalidasi oleh Dialogflow, baik dengan mengikuti rantai Certificate Authority atau dengan membandingkan sertifikat ke Sertifikat CA kustom. Dengan mengaktifkan mTLS di server webhook, server tersebut akan dapat mengautentikasi sertifikat Google yang ditampilkan oleh Dialogflow ke server webhook Anda untuk validasi, sehingga menyelesaikan pembentukan kepercayaan timbal balik.
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 Certificate Authority yang tercantum oleh Layanan Kepercayaan Google. Anda dapat mendownload root certificate dari: https://pki.goog/.
Contoh panggilan ke server webhook menggunakan mTLS
Contoh ini menggunakan agen yang ditampilkan dalam panduan memulai dengan
server webhook
yang menjalankan
openssl
.
- Contoh penyiapan
- Agen Dialogflow CX yang menerima pesanan kemeja, dan mengirimkannya ke 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)
tepercaya secara publik dalam file bernama
fullchain.pem
.
-
Jalankan program
openssl s_server
di 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 "Saya ingin membeli kemeja merah besar". Permintaan ini dapat dikirim menggunakan Dialogflow Console, atau melalui panggilan API.
-
Output
openssl s_server
di 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: 0xEAEA:... Shared Elliptic groups: X25519:... CIPHER is TLS_AES_128_GCM_SHA256 Secure Renegotiation IS NOT supported POST /shirts-agent-webhook HTTP/1.1 authorization: Bearer ey... content-type: application/json Host: www.example.com Content-Length: 1595 Connection: keep-alive Accept: */* User-Agent: Google-Dialogflow Accept-Encoding: gzip, deflate, br { "detectIntentResponseId": "a7951ce2-2f00-4af5-a508-4c2cb45698b0", "intentInfo": { "lastMatchedIntent": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/intents/0adebb70-a727-4687-b8bc-fbbc2ac0b665", "parameters": { "color": { "originalValue": "red", "resolvedValue": "red" }, "size": { "originalValue": "large", "resolvedValue": "large" } }, "displayName": "order.new", "confidence": 0.9978873 }, "pageInfo": { "currentPage": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/flows/00000000-0000-0000-0000-000000000000/pages/06e6fc4d-c2f2-4830-ab57-7a318f20fd90", "displayName": "Order Confirmation" }, "sessionInfo": { "session": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/sessions/session-test-001", "parameters": { "color": "red", "size": "large" } }, "fulfillmentInfo": { "tag": "confirm" }, "messages": [{ "text": { "text": ["Ok, let\u0027s start a new order."], "redactedText": ["Ok, let\u0027s start a new order."] }, "responseType": "ENTRY_PROMPT", "source": "VIRTUAL_AGENT" }, { "text": { "text": ["You have selected a large, red shirt."], "redactedText": ["You have selected a large, red shirt."] }, "responseType": "HANDLER_PROMPT", "source": "VIRTUAL_AGENT" }], "text": "I want to buy a large red shirt", "languageCode": "en" }ERROR shutting down SSL CONNECTION CLOSED
Sertifikat Klien Kustom
Sertifikat klien kustom dapat dikonfigurasi di tingkat agen untuk digunakan oleh semua webhook. Pada saat pemanggilan webhook, sertifikat yang dikonfigurasi akan ditampilkan selama handshake.
Kunci pribadi dan frasa sandi dikonfigurasi sebagai resource Secret Manager. Agen layanan Dialogflow harus diberi izin Secret Manager Secret Accessor ke secret.
Sertifikat klien harus ditandatangani oleh Certificate Authority agar handshake berhasil.
Praktik Terbaik
Untuk memastikan bahwa permintaan webhook dimulai dari agen Dialogflow Anda sendiri, Anda harus memverifikasi Bearer token identitas layanan 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 dihentikan.
Pesan error umum:
Pesan error | Penjelasan |
---|---|
Gagal memverifikasi sertifikat klien: x509: sertifikat ditandatangani oleh otoritas yang tidak dikenal | Dialogflow mengirim sertifikat kliennya ke webhook eksternal, tetapi webhook eksternal tidak dapat memverifikasinya. Hal ini mungkin karena webhook eksternal tidak menginstal rantai CA dengan benar. Semua root CA dari Google harus tepercaya. |