会話エージェント(Dialogflow CX)Webhook では、Google のデフォルトのトラストストアを使用して検証する際に有効な TLS 証明書を提示する HTTPS エンドポイントが必要となります。ただし、カスタム CA 証明書を使用する場合がありますが、これは Google のデフォルトのトラストストアで認識される認証局によって署名されません。たとえば、Google のプライベート VPC ネットワーク内にある Webhook サーバーには、この問題があります。この場合、Webhook の作成時にカスタム証明書を会話エージェント(Dialogflow CX)にアップロードすると、アップロードされた証明書が Google のデフォルトのトラストストアよりも優先されます。
カスタム CA 証明書として、自己署名の証明書またはカスタムのルート証明書を使用できます。証明書をローテーションしたい場合は、複数の証明書をアップロードできます。証明書は DER 形式にする必要があり、Webhook URL と一致するサブジェクト代替名で署名されている必要があります。 keyUsage 拡張機能が存在する場合、その値は digitalSignature
にする必要があります。
自己署名サーバーのデモ
デモサーバーの構成は次のとおりです。
- 自己署名証明書ファイルを準備します。サンプル ドメインとして www.example.com を使用します。
openssl genrsa -out server.key 2048 openssl req -nodes -new -sha256 -newkey rsa:2048 -key server.key -subj "/CN=www.example.com" -out server.csr openssl x509 -req -days 3650 -sha256 -in server.csr -signkey server.key -out server.crt -extfile <(printf "\nsubjectAltName='DNS:www.example.com'") openssl x509 -in server.crt -out server.der -outform DER
- 前の手順で作成したサーバー証明書(
server.crt
)と秘密鍵(server.key
)を使用して、HTTPS サーバーを起動します。サーバーがポート 443 でリッスンしていることを前提としています。 -
ローカルでサーバーに接続してテストします。
curl --cacert server.crt https://www.example.com --resolve www.example.com:443:127.0.0.1
カスタム証明書を使用した Webhook のデモ
カスタム証明書を使用してサーバーを設定したら、次の追加手順でWebhook リソースを作成し、カスタム証明書を使用できます。
- 証明書で署名されたドメイン(前のデモの
https://www.example.com
)に一致する URL を設定します。お客様自身が責任を持って、ドメインがサーバーの IP アドレスに正しく解決されるようにしてください。 - カスタム証明書を DER 形式でアップロードします。これは、前の自己署名デモの
server.der
ファイルまたはカスタムルート証明書です。 - Service Directory のプライベート ネットワーク アクセスと統合された Webhook の場合は、IP アドレスとポートを使用した Service Directory エンドポイントを設定し、Webhook の作成時に Service Directory サービスを指定します。