Autentikasi TLS bersama

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:

  1. Siapkan server HTTPS webhook Anda untuk meminta sertifikat klien selama TLS handshake.
  2. Server webhook Anda harus memverifikasi sertifikat klien setelah menerimanya.
  3. 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.

  1. Contoh penyiapan
    1. Agen Dialogflow ES yang menyapa pengguna akhir dan membuat kueri webhook yang mengarah ke server web mandiri.
    2. Kunci pribadi untuk komunikasi TLS dalam file bernama key.pem.
    3. Rantai sertifikat yang ditandatangani oleh CA (Certificate Authority) tepercaya secara publik dalam file bernama fullchain.pem.
  2. Jalankan program openssl s_server di mesin server.
    sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1
  3. Permintaan dikirim ke agen dari mesin klien. Untuk contoh ini, permintaannya adalah "Halo". Permintaan ini dapat dikirim menggunakan Dialogflow Console, atau melalui panggilan API.
  4. 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 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.