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 (mTLS). Selama handshake TLS standar Dialogflow, server webhook Anda akan menyajikan sertifikat yang dapat divalidasi oleh Dialogflow, baik dengan mengikuti rantai Certificate Authority atau dengan membandingkan sertifikat tersebut dengan Sertifikat CA Kustom. Dengan mengaktifkan mTLS di server webhook, mTLS akan dapat mengautentikasi sertifikat Google yang disajikan oleh Dialogflow ke server webhook untuk divalidasi, sehingga menyelesaikan pembentukan kepercayaan bersama.
Meminta mTLS
Untuk meminta mTLS:
- Siapkan server HTTPS webhook untuk meminta sertifikat klien selama handshake TLS.
- Server webhook Anda harus memverifikasi sertifikat klien setelah menerimanya.
Instal rantai sertifikat untuk server webhook Anda, yang dapat dipercaya bersama 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 cert dari: https://pki.goog/.
Contoh panggilan ke server webhook menggunakan mTLS
Contoh ini menggunakan agen yang ditampilkan di panduan memulai dengan server webhook yang menjalankan openssl
.
- Contoh penyiapan
- Agen Dialogflow ES yang menyapa pengguna akhir dan mengajukan kueri pada 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 dipercaya secara publik dalam file bernama
fullchain.pem
.
-
Jalankan program
openssl s_server
di komputer server.sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1
- Permintaan dikirim ke agen dari komputer klien. Untuk contoh ini, permintaannya adalah "Halo". Permintaan ini dapat dikirim menggunakan Konsol Dialogflow, 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: 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 permintaan webhook dimulai dari agen Dialogflow Anda sendiri, Anda harus memverifikasi token identitas layanan Pembawa dari header Otorisasi permintaan. Atau, Anda dapat memverifikasi parameter sesi yang disediakan sebelumnya oleh server autentikasi di pihak Anda.
Error
Jika validasi sertifikat klien gagal (misalnya, server webhook tidak memercayai sertifikat klien), handshake TLS 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 mengirimkan sertifikat kliennya ke webhook eksternal, tetapi webhook eksternal tidak dapat memverifikasinya. Penyebabnya mungkin karena webhook eksternal tidak menginstal rantai CA dengan benar. Semua root CA dari Google harus dipercaya. |