Autentikasi TLS bersama

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:

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

  1. Contoh penyiapan
    1. Agen Dialogflow ES yang menyapa pengguna akhir dan mengajukan kueri pada 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) yang dipercaya secara publik dalam file bernama fullchain.pem.
  2. Jalankan program openssl s_server di komputer server.
    sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1
  3. Permintaan dikirim ke agen dari komputer klien. Untuk contoh ini, permintaannya adalah "Halo". Permintaan ini dapat dikirim menggunakan Konsol Dialogflow, 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 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.