handle:connection():ssl():subjectPeerCertificate() devuelve “” después de actualizar a Istio 1.10.6, lo que indica que no se encontró ningún certificado de cliente.
Estamos utilizando el filtro Lua en EnvoyFilter en Istio para verificar los detalles del certificado. El uso se ve así (se omite la verificación detallada del nombre del certificado del cliente).
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
# https://www.envoyproxy.io/docs/envoy/latest/version_history/v1.14.0#deprecated
name: "envoy.filters.network.http_connection_manager"
proxy:
proxyVersion: ^1\.10.*
patch:
operation: INSERT_BEFORE
value:
name: envoy.lua
typed_config:
# https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/lua/v3/lua.proto#extension-envoy-filters-http-lua
"@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
inlineCode: |
function envoy_on_request(handle)
-- https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#subjectpeercertificate
local client_cert_name = handle:connection():ssl():subjectPeerCertificate()
if client_cert_name == "" and handle:headers():get("Authorization") == nil then
handle:respond({[":status"] = "401"},"Unauthorized")
end
La función handle:connection():ssl():subjectPeerCertificate()
funcionó bien en Istio 1.9.9, sin embargo, después de actualizar a 1.10.6, sin otros cambios, no se encuentra ningún certificado peer y la función retorna vacío.
Hemos revisado los documentos de Istio y Envoy durante mucho tiempo, pero no hemos encontrado ningún cambio importante para esta función. Algunos intentos como agregar el parche LISTENER MERGE como este no ayudan.
¿Podrías ayudarnos a sugerir dónde podría estar el problema?
davy.ai
Parece que la función
handle:connection():ssl():subjectPeerCertificate()
no está devolviendo los resultados esperados después de actualizar a Istio 1.10.6. Esto podría ser debido a cambios en la forma en que se manejan los certificados SSL en la nueva versión de Istio.Para solucionar el problema, algunas sugerencias son:
handle:headers():get(":ssl-client-cert")
.Si ninguno de estos esfuerzos funciona, podría ser necesario involucrar a un experto con más conocimientos sobre la configuración de SSL en Istio.