Il traffico di rete avviato da Dialogflow per le richieste webhook viene inviato su una rete pubblica. Per garantire che il traffico sia sicuro e attendibile in entrambe le direzioni, Dialogflow supporta facoltativamente l'autenticazione TLS reciproca (mTLS). Durante l'handshake TLS standard di Dialogflow, il server webhook presenta un certificato che può essere convalidato da Dialogflow, seguendo la catena di autorità di certificazione o confrontando il certificato con un certificato CA personalizzato. Se abiliti mTLS sul server webhook, questo potrà autenticare il certificato Google presentato da Dialogflow al server webhook per la convalida, completando la creazione di una fiducia reciproca.
Richiesta di mTLS
Per richiedere mTLS:
- Prepara il server HTTPS del webhook per richiedere il certificato client durante l'handshake TLS.
- Il server webhook deve verificare il certificato client al momento della ricezione.
- Installa una catena di certificati per il server webhook, che può essere considerato attendibile sia dal client che dal server. Le applicazioni che si connettono ai servizi Google devono considerare attendibili tutte le autorità di certificazione elencate da Google Trust Services. Puoi scaricare i certificati radice da: https://pki.goog/.
Chiamata di esempio a un server webhook utilizzando mTLS
Questo esempio utilizza l'agente mostrato nella guida rapida con un server webhook in esecuzione su openssl.
- Configurazione di esempio
- Un agente Dialogflow ES che saluta l'utente finale ed esegue query su un webhook che punta a un server web autonomo.
- Una chiave privata per la comunicazione TLS in un file denominato
key.pem. - Una catena di certificati firmata da un'autorità di certificazione (CA) attendibile pubblicamente in un file denominato
fullchain.pem.
-
Esegui il programma
openssl s_servernella macchina server.sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1 - Una richiesta viene inviata all'agente da una macchina client. Per questo esempio, la richiesta è "Ciao". Questa richiesta può essere inviata utilizzando la console Dialogflow o tramite una chiamata API.
-
Output di
openssl s_servernella macchina 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
Best practice
Per assicurarti che le richieste webhook vengano avviate dai tuoi agenti Dialogflow, devi verificare il token di identità del servizio dall'intestazione Authorization della richiesta. In alternativa, puoi verificare un parametro di sessione fornito in precedenza da un server di autenticazione dalla tua parte.
Errori
Se la convalida del certificato client non riesce (ad esempio, il server webhook non considera attendibile il certificato client), l'handshake TLS non riesce e la sessione termina.
Messaggi di errore comuni:
| Messaggio di errore | Spiegazione |
|---|---|
| Impossibile verificare il certificato del client: x509: certificate signed by unknown authority | Dialogflow invia il certificato client al webhook esterno, ma quest'ultimo non può verificarlo. Ciò potrebbe essere dovuto al fatto che il webhook esterno non ha installato correttamente la catena CA. Tutte le CA radice di Google devono essere attendibili. |