Solución de problemas de PKI en Windows Vista

Se aplica a: Windows Server 2008,Windows Vista

Diagnóstico CAPI2 es una característica incluida en Windows Vista® y Windows Server® 2008. Esta característica permite a los administradores solucionar problemas de PKI (infraestructura de clave pública) mediante la recopilación de información detallada sobre la validación de cadenas de certificados, las operaciones de almacén de certificados y la comprobación de firmas. Diagnóstico CAPI2 facilita la identificación de las causas raíz de la mayoría de los problemas de PKI. Además, Diagnóstico CAPI2 permite reducir el tiempo necesario para diagnosticar problemas y mejorar la solución de problemas. En este documento se describe Diagnóstico CAPI2 y el modo de usarlo para solucionar problemas en algunos escenarios habituales de errores de PKI.

Descargue este documento.

En esta guía

Introducción a CAPI2

Una PKI es la combinación de criptografía, software, procesos y servicios que permite a una organización proteger sus comunicaciones y transacciones de negocio. Se pueden usar certificados X.509 para identificar usuarios, dispositivos u organizaciones, así como para habilitar aplicaciones más seguras como, por ejemplo, de correo electrónico firmado, firma de código y exploración segura de la Web.

CryptoAPI (CAPI) es la criptografía principal, compatible con el certificado X.509 en Windows. CAPI1 hace referencia a la compatibilidad de componentes criptográficos base, como cifrado, descifrado y funciones hash. CAPI2 se refiere a la compatibilidad con PKI y los certificados X.509, como la validación de cadenas de certificados, los almacenes de certificados y la comprobación de firmas. Interfaz de programación de aplicaciones (API) criptográficas de nueva generación (CNG), una nueva API de Windows Vista, se incorpora para sustituir el uso existente de CAPI1, aunque todavía se admite CAPI1. En este documento se describe de forma detallada la solución de errores de PKI mediante CAPI2, pero no se ofrece información acerca de CNG y CAPI1.

Las aplicaciones llaman a CAPI2 para realizar diversas tareas, como las siguientes:

  • Creación y comprobación de cadenas de certificados.

  • Administración de almacenes de certificados por usuario y por equipo.

  • Cifrado/descifrado, codificación/descodificación y firma/comprobación de mensajes.

Información general

Los problemas de PKI son difíciles de solucionar en muchas aplicaciones habilitadas para el uso de PKI, porque no muestran información detallada sobre los errores. Por ejemplo, en numerosos errores relacionados con la red, CAPI2 devuelve a la aplicación un error de "desconexión de revocación", que la aplicación muestra como mensaje de error. Aunque es posible identificar la naturaleza general del error, no se ofrece información al usuario sobre el modo de solucionar un problema de PKI. La firma de la API está diseñada para devolver un código de error y una cadena. Debido a que la API es pública, no es posible ampliar la función para que devuelva información más detallada sin vulnerar las aplicaciones existentes. Además, la detección de algunos errores resulta muy costosa en el transcurso de las operaciones habituales, por lo que conviene realizarla en los procesos posteriores.

Esto implica la necesidad de disponer de mejores capacidades de diagnóstico para la solución de problemas de PKI en CAPI2. La función Diagnóstico CAPI2 de Windows Vista proporciona un registro de información detallada sobre validación de certificados, recuperaciones de red, revocaciones y otros resultados y errores de nivel inferior de la API. Esta funcionalidad mejorada permite identificar la causa raíz de un problema de PKI.

En el caso de los errores habituales de PKI, existen patrones específicos de información en el registro. En este documento se ofrece una introducción a la función Diagnóstico CAPI2, se proporcionan instrucciones para la interpretación del registro y se identifican los patrones del registro que corresponden a escenarios de error. Esta información permite diagnosticar los problemas de PKI y habilita a los programadores para la generación de herramientas destinadas a la solución de los problemas más habituales de PKI.

Validación de rutas de certificados

El conocimiento del proceso de validación de rutas de certificados es un requisito fundamental para la solución de problemas en las aplicaciones habilitadas para el uso de PKI que usan CAPI2. Tomemos como ejemplo una cadena de certificados, como se muestra en la ilustración 1. La CA (entidad de certificación) raíz emite el certificado de la CA subordinada que, a su vez, emite el certificado de entidad final. La CA raíz y la CA subordinada emiten CRL (listas de revocación de certificados) por separado. Las CRL contienen los números de serie de todos los certificados revocados por la CA de firma.

Certificate Chain

El primer paso de la validación de rutas de certificados consiste en la detección de las rutas de certificados, que se refiere al proceso de localización de los certificados de las entidades de certificación emisoras para certificados de entidad final, así como a la creación de una ruta de certificado con acceso a un certificado raíz de confianza. Los certificados intermedios de la CA se incluyen como parte del protocolo de la aplicación o bien se seleccionan desde una directiva de grupo o mediante las direcciones URL especificadas en la extensión AIA (Acceso a la información de entidad). Una vez creada la ruta, se comprobará la validez de cada certificado de la ruta respecto a distintos parámetros como, por ejemplo, nombre, hora, firma, estado de revocación y otras restricciones.

Para obtener información detallada sobre la validación de rutas de certificados, consulte http://go.microsoft.com/fwlink/?LinkId=27081 (puede estar en inglés).

Diagnóstico CAPI2 en Windows Vista

Diagnóstico CAPI2 es una función de Windows Vista que usa el registro de eventos y el Visor de eventos para ofrecer mejores capacidades de registro y solución de problemas en las aplicaciones de PKI basadas en el conjunto de API de CAPI2. El sistema de informes de eventos y seguimiento de Windows Vista ofrece aplicaciones, componentes y controladores, la capacidad de publicación de eventos esquematizados y archivos de registro de consultas, así como la suscripción a eventos. Este sistema unifica el sistema de registro de eventos y el marco de seguimiento de eventos. El registro de eventos incluye la funcionalidad necesaria para la estructuración y clasificación de los eventos de las aplicaciones, con el fin de facilitar su organización y consulta por parte de los administradores. Los eventos se registran en formato XML y pueden consultarse mediante el Visor de eventos. El registro de la información sobre diagnósticos en XML facilita la creación de herramientas automatizadas para la solución de problemas. El Visor de eventos aporta la interfaz de usuario necesaria para la consulta de eventos, además de permitir el filtrado de eventos según diversos parámetros como, por ejemplo, origen, nivel y palabras clave.

Para obtener más información sobre el sistema de registro y seguimiento de eventos en Windows Vista, consulte http://go.microsoft.com/fwlink/?LinkId=82279 (puede estar en inglés).

CAPI2 Diagnostics in event viewer in Windows Vista

Introducción a Diagnóstico CAPI2

Los eventos de CAPI2 se registran a través del canal Microsoft-Windows-CAPI2 del registro de eventos. Los eventos se basan en la API criptográfica habitual, que forma parte del proceso de validación de rutas de certificados.

Habilitación y almacenamiento del registro de CAPI2

El procedimiento siguiente proporciona información sobre el modo de habilitar, guardar o borrar el registro, así como aumentar su tamaño. Los administradores deberán realizar el procedimiento siguiente.

Habilitación y almacenamiento del registro de CAPI2 desde la interfaz de usuario del Visor de eventos
  1. Abra el Visor de eventos. Para abrir el Visor de sucesos, haga clic en Inicio, Panel de control, haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Visor de sucesos.

  2. Si aparece el cuadro de diálogo Control de cuentas de usuario, confirme que la acción que muestra es la que desea y, a continuación, haga clic en Continuar.

  3. En el panel de la consola, expanda Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows y, por último, expanda CAPI2.

  4. A continuación, puede realizar las acciones siguientes

    1. Para habilitar el registro de CAPI2, haga clic con el botón secundario en Operativo y seleccione Habilitar registro.

    2. Para guardar el registro en un archivo, haga clic con el botón secundario en Operativo y seleccione Guardar eventos como. Puede guardar el archivo de registro en el formato .evtx (que se abrirá con el Visor de eventos) o en formato .xml.

    3. Para deshabilitar el registro de CAPI2, haga clic con el botón secundario en Operativo y seleccione Deshabilitar registro.

    4. Si existen datos en el registro antes de reproducir un problema, se recomienda borrar el registro. Esto permite recopilar del registro guardado únicamente los datos relevantes para el escenario del problema. Para borrar el registro, haga clic con el botón secundario en Operativo y seleccione la opción Vaciar registro.

    5. El tamaño predeterminado del registro de eventos es de 1 MB. En Diagnóstico CAPI2, el registro tiende a aumentar de tamaño con gran rapidez, por lo que se recomienda incrementar el tamaño de registro hasta 4 MB, como mínimo, con el fin de capturar los eventos relevantes. Para aumentar el tamaño del registro, haga clic con el botón secundario en Operativo y seleccione Propiedades. En las propiedades del registro, aumente el tamaño máximo del registro.

También puede habilitar y guardar el registro mediante la herramienta wevtutil.exe. Esta herramienta se encuentra disponible en Windows Vista.

Para habilitar y guardar el registro de CAPI2 mediante wevtutil.exe
  1. Abra un símbolo del sistema como administrador. Para ello, haga clic en el botón Inicio, a continuación haga clic en Todos los programas y, por último, en Accesorios.

  2. Haga clic con el botón secundario en Símbolo del sistema y haga clic en Ejecutar como administrador.

  3. Si aparece el cuadro de diálogo Control de cuentas de usuario, confirme que la acción que muestra es la que desea y, a continuación, haga clic en Continuar.

  4. En el símbolo del sistema, ejecute los siguientes comandos:

    1. Para habilitar el registro, wevtutil.exe sl Microsoft-Windows-CAPI2/Operational /e:true

    2. Para guardar el registro en un archivo, wevtutil.exe epl Microsoft-Windows-CAPI2/Operational filename.evtx

    3. Para deshabilitar el registro, wevtutil.exe sl Microsoft-Windows-CAPI2/Operational /e:false

    4. Para vaciar el registro, wevtutil.exe cl Microsoft-Windows-CAPI2/Operational

    5. Para aumentar el tamaño del registro, wevtutil sl Microsoft-Windows-CAPI2/Operational /ms:<tamaño de registro en bytes>

Ejecute wevtutil -? para obtener información acerca de todas las opciones disponibles mediante esta herramienta.

noteNota
Debido a que el registro de eventos puede afectar al rendimiento del sistema, solamente deberá habilitarlo para la solución de problemas.

Introducción a eventos

En Diagnóstico CAPI2, los eventos registrados corresponden a las tareas concretas que se realizan. Algunos eventos corresponden a las API concretas que se llaman para realizar la tarea. Los editores de aplicaciones automatizadas de solución de problemas y los desarrolladores con conocimientos pueden definir en el evento datos de referencias cruzadas con la documentación sobre la API y la estructura de datos en MSDN. Los eventos se organizan en eventos de nivel superior y en eventos secundarios anidados debajo de los eventos de nivel superior. Estos eventos secundarios corresponden a pasos internos y contienen información adicional acerca de las acciones realizadas y los objetos a los que se hace referencia como parte de los eventos de nivel superior.

Por ejemplo, la validación de rutas de certificados incluiría los eventos indicados en la tabla siguiente.

Eventos de validación de rutas de certificados

Evento Descripción

CertGetCertificateChain

Muestra los resultados de la creación de una cadena de certificados.

CertVerifyRevocation

Indica los resultados de la comprobación de revocaciones.

CryptRetrieveObjectByUrlWire

Registra información detallada sobre la recuperación de objetos, como CRL o respuestas de OCSP (Protocolo de estado de certificados en línea), a través de la red.

CertRejectedRevocationInfo

Contiene información detallada de errores, en los casos en que Windows obtiene información no válida sobre revocaciones.

X509Objects

Incluye los detalles correspondientes a todos los objetos procesados como parte de una validación de rutas de certificados.

Los eventos secundarios se organizan de esta manera porque representan pasos que pueden repetirse varias veces durante un evento de nivel superior. Por ejemplo, "CertVerifyRevocation" se puede llamar en varias ocasiones dentro del mismo evento "CertGetCertificateChain", con el fin de comprobar la revocación de diferentes certificados de la cadena.

La lista de los diferentes eventos registrados y sus descripciones se encuentra disponible en el Apéndice A.

Para obtener más información acerca de estas API, consulte http://go.microsoft.com/fwlink/?LinkId=82278 (puede estar en inglés).

CAPI2 registra información detallada sobre el evento en la sección UserData de los datos del evento. Estos datos pueden consultarse mediante la ficha Detalles del Visor de eventos. En las API que devuelven errores descriptivos ampliados, CAPI2 registra los códigos y las descripciones de los errores en un campo de resultados del evento, como parte de los datos del evento. CAPI2 también registra marcadores con un atributo de valor que hace referencia al valor DWORD y una lista de atributos booleanos que hacen referencia a los marcadores individuales definidos. Por ejemplo:

<ErrorStatus value="1000040" CERT_TRUST_REVOCATION_STATUS_UNKNOWN="true" CERT_TRUST_IS_OFFLINE_REVOCATION="true" />

Registro de objetos de PKI

Para la solución de problemas, es importante disponer de información detallada acerca de los objetos de PKI como, por ejemplo, certificados, CRL y respuestas de OCSP. CAPI2 registra en formato XML los datos más relevantes sobre certificados y otros objetos de PKI, dentro del evento X509Objects.

A continuación, se muestra un ejemplo de entrada de un certificado en el evento "X509Objects":

<Certificate fileRef="B18D64DA254B2E51F533193E36FF10E91A9198FC.cer" subjectName="ContosoRoot">
<Subject>
<CN>ContosoRoot</CN>
</Subject>
<SubjectKeyID computed="true" hash="24CD7CB5D99A6734139189D3828DD11069397CF6" />
<Issuer>
<CN>ContosoRoot</CN>
</Issuer>
<SerialNumber>49BAC183C61F688F4F237F306950C6A3</SerialNumber>
<NotBefore>2005-01-01T00:00:00Z</NotBefore>
<NotAfter>2008-12-31T00:00:00Z</NotAfter>
</Certificate>

El atributo fileRef contiene el nombre de archivo, formado por el hash SHA1 del objeto, seguido por la extensión pertinente (.cer, .crl o .bin).

A los objetos X.509 suele hacerse referencia en muchas ocasiones, incluso dentro de un único evento de nivel superior. Así, por ejemplo, al certificado de entidad final se hace referencia en los eventos "CertGetCertificateChain", "CertVerifyRevocation" y "CryptAIAUrlRetrievalWire". CAPI2 registra cada referencia de los objetos mediante el atributo fileRef, seguido del nombre, por ejemplo subjectName, en el caso de certificados, o issuerName en el caso de CRL y respuestas de OCSP.

<Certificate fileRef="" subjectName="">
<CertificateRevocationList fileRef="" subjectName="">
<OCSPResponse fileRef="" subjectName="">

En el ejemplo anterior, la referencia sería la siguiente:

<Certificate fileRef="B18D64DA254B2E51F533193E36FF10E91A9198FC.cer" subjectName="ContosoRoot">

Eventos correlacionados

La mayoría de los eventos incluyen una variante de inicio y detención. CAPI2 registra un evento de inicio vacío, solamente con los datos del sistema escritos en el registro de evento, con el fin de indicar el comienzo del evento. La información completa, incluidos los parámetros de entrada, resultados y otros datos de estado, se registra en el evento de detención. El agrupamiento de todos los datos con el evento de detención permite reducir el número de veces en que el usuario debe buscar otro evento.

Los eventos se caracterizan por su naturaleza jerárquica. Todos los eventos relacionados que corresponden a funciones internas que se llaman como partes de una API de nivel superior se anidan entre los eventos de inicio y detención correspondientes a la API de nivel superior. En el registro, todos estos eventos relacionados (por ejemplo, todos los eventos que forman parte de la misma secuencia de validación de rutas de certificados), se agrupan mediante un identificador de correlación de tareas habituales. Cada evento de la secuencia incluye un número asociado, que permite identificar el orden de eventos de la secuencia.

Tomemos como ejemplo una validación de rutas de certificados que incluye la comprobación del estado de revocación de todos los certificados de la cadena, excepto el del certificado raíz. Puede recuperarse información adicional sobre las revocaciones desde la red. Una de las comprobaciones de revocación genera un error. La secuencia anidada de eventos en el registro será la siguiente:

CertGetCertificateChainStart

  1. CertVerifyRevocationStart

    • CryptRetrieveObjectByUrlWireStart

    • CryptRetrieveObjectByUrlWire

  2. CertVerifyRevocation

  3. CertVerifyRevocationStart

    • CryptRetrieveObjectByUrlWireStart

    • CryptRetrieveObjectByUrlWire

    • CertRejectedRevocationInfo

  4. CertVerifyRevocation

CertGetCertificateChain

CertVerifyCertifcateChainPolicy

X509Objects

Cada evento tiene asignado el mismo identificador de correlación de tareas y el mismo orden incremental de números de secuencia. En este caso, el primer evento incluiría los campos siguientes:

<CorrelationAuxInfo TaskId="{B679BF8C-B26E-401A-A35F-342C7753B6BA}" SeqNumber="9" />

Modos de registro

Diagnóstico CAPI2 usa características del Visor de eventos, como el nivel de error y las palabras clave, para filtrar los datos del registro. Por ejemplo, si desea examinar errores relativos a la validación de rutas, puede usar como filtro un nivel de evento de error (nivel 2) y las palabras clave "creación de cadena", "validación de cadena" y "revocación". Los eventos se marcan con el nivel 2 cuando la API devuelve un error y con el nivel 4 si la API devuelve un resultado de fin correcto.

En el modo de registro predeterminado, solamente se registran los eventos de los niveles 2 y 4. También se incluyen los eventos de error y de proceso correcto correspondientes a los eventos de nivel superior, junto con todos los eventos de error secundarios. Para obtener registros más detallados con información adicional sobre eventos secundarios, habilite el modo de registro detallado. Mediante el modo detallado, estarán disponibles en el registro los eventos con el nivel detallado 5. Con el modo detallado, por ejemplo, estarán disponibles en el registro los vínculos a los objetos binarios X.509. Los objetos X.509 se almacenan en el archivo de la memoria caché del sistema, ubicado en %USERPROFILE%/AppData/LocalLow/Microsoft/X509Objects.

El registro se realiza del modo siguiente:

<X509Objects>
 <Base path="F:\Users\abby\AppData\LocalLow\Microsoft\X509Objects”/>

El modo detallado resulta de gran utilidad en operaciones que no suelen fallar, como las operaciones de almacén y de caché, y en determinadas ocasiones también es útil para aportar contexto a otros eventos. Si el resultado de la operación no es correcto, se registra un evento de error con el nivel 2, que estará disponible en el modo de registro predeterminado.

Para activar el modo detallado
  1. Haga clic en el botón Inicio, a continuación en Iniciar búsqueda, escriba Run y, por último, presione Entrar.

  2. En Ejecutar, escriba regedit y haga clic en Aceptar.

  3. Si aparece el cuadro de diálogo Control de cuentas de usuario, confirme que la acción que muestra es la que desea y, a continuación, haga clic en Continuar.

  4. Navegue hasta la siguiente clave del Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\crypt32.

  5. Agregue un valor DiagLevel de DWORD (32 bits), con el valor 0x00000005.

  6. Agregue un valor DiagMatchAnyMask de DWORD (64 bits), con el valor 0x00ffffff.

Privacidad

En esta sección se describe el modo en que Diagnóstico CAPI2 administra la PII (Información de identificación personal). La PII hace referencia a la información que puede usarse para identificar a un usuario o para ponerse en contacto con él. Los administradores deberán tener en cuenta el modo en que Diagnóstico CAPI2 administra la PII, para garantizar el cumplimiento de las instrucciones legales o corporativas sobre privacidad, según sea necesario.

Además de los datos de evento registrados mediante el Visor de eventos, la información reflejada en el registro de eventos de CAPI2 incluye datos sobre los certificados usados por el usuario, así como acerca del sistema y las aplicaciones. A continuación se indican los datos registrados con fines de diagnóstico, que pueden incluirse en la PII:

  • La información incluida en los certificados, incluido el nombre distintivo X.500 del sujeto y el emisor del certificado. Según la aplicación de que se trate, podrá contener los siguientes datos:

    • Direcciones de correo electrónico, al efectuar la comprobación de correo electrónico firmado.

    • Nombres de archivos, durante la comprobación de firmas en archivos.

    • Direcciones URL de los sitios web visitados, como parte de la validación de rutas de certificados en el protocolo SSL (Capa de sockets seguros).

  • Direcciones URL a las que se tiene acceso como parte de una validación de rutas de certificados, incluidas las ubicaciones de las listas de revocación de certificados y los certificados intermedios.

  • Direcciones IP, como las de los servidores proxy con los que se estableció contacto durante las descargas de red.

El registro en el canal Microsoft-Windows-CAPI2 no está habilitado de modo predeterminado. Solamente los administradores locales podrán habilitar, deshabilitar y consultar el registro. Un administrador puede guardar el registro en un archivo o enviarlo a un experto, por ejemplo de los Servicios de soporte técnico Premier, para su análisis.

Para obtener más información sobre la recopilación de PII mediante Diagnóstico CAPI2 y el Visor de eventos, consulte http://go.microsoft.com/fwlink/?LinkID=34493 (puede estar en inglés).

Solución de problemas habituales

Una vez habilitado el registro, reproducido el escenario y recopilados los datos de registro, el paso siguiente consiste en la interpretación de los datos del registro de eventos, con el fin de identificar la causa raíz del problema. En esta sección se describe el modo en que los eventos de Diagnóstico CAPI2 pueden resultar útiles para la solución de algunos problemas habituales de PKI. En el escenario de cada problema, se indican las condiciones que conforman el escenario y los eventos registrados en la ruta Microsoft-Windows-CAPI2\Operational del Visor de eventos. La información acerca del modo de solucionar un problema se obtiene del modo siguiente:

  • Identificación y correlación de los eventos relevantes.

  • Clasificación del error, basada en los eventos de error de nivel superior.

  • Uso de los eventos anidados para limitar la causa del error.

  • Determinación de la causa raíz del error, a partir de los datos detallados de los eventos.

CAPI2 registra la información en un formato XML estructurado, que se diseñó para habilitar la solución de problemas automatizada. El lenguaje XPATH, que permite el direccionamiento de partes de un documento XML, resulta muy útil para la consulta de información en el registro de eventos de Diagnóstico CAPI2. XPATH puede usarse para la coincidencia de nodos, es decir, para comprobar si existe coincidencia entre un nodo y un patrón concreto. En los datos del registro existe un patrón concreto que corresponde a escenarios específicos. Por ejemplo, la lista de proxies se registra cuando se produce una recuperación de red, a través de un proxy. XPATH puede usarse para comprobar si un nodo coincide con un patrón que indica la presencia de una lista de proxies. Estos patrones pueden describirse mediante expresiones XPATH que, cuando se evalúan, dan como resultado bien un conjunto de nodos coincidentes con la expresión, o bien un valor, por ejemplo una cadena, un número o un valor booleano.

Para obtener más información acerca de XPATH, consulte http://go.microsoft.com/fwlink/?LinkId=82280 (puede estar en inglés).

En esta sección se abordan los siguientes problemas:

Error de autenticación al establecer una sesión de HTTP mediante SSL

Escenario

Desea establecer la conexión a un sitio web mediante https, escribiendo la dirección del sitio web, por ejemplo https://www.contoso.com, en Internet Explorer. A continuación, Internet Explorer bloquea la navegación y muestra el mensaje de error "El certificado de seguridad de este sitio web no fue emitido por una entidad de certificación de confianza".

Navigation blocked due to certificate error

Si continúa hasta el sitio web, el error de certificado aparece indicado a la derecha de la barra de direcciones.

Certificate error indicated next to address bar

Como parte de la detección de rutas de certificados, deben localizarse los certificados emitidos por la CA, con el fin de crear la ruta de certificados. Estos certificados pueden obtenerse de la memoria caché o el almacén de certificados del equipo cliente. Los servidores pueden proporcionar información adicional al cliente. Un ejemplo de esta técnica es SSL. En el proceso de negociación SSL, el servidor proporciona al cliente su propio certificado, así como los certificados intermedios que el cliente puede usar para crear la ruta de certificados.

A continuación se indican las condiciones de este escenario:

  1. El certificado intermedio necesario para la creación de la ruta de certificados correspondiente al certificado del servidor no está incluido en la memoria caché ni en el almacén de certificados del equipo cliente.

  2. Como parte de la negociación SSL, al cliente solamente se le proporciona el certificado de servidor de entidad final. Puesto que en el servidor no existe un certificado intermedio válido en el almacén de certificados del equipo local, no se proporcionará como parte de la negociación SSL.

  3. Debido a que no existe en el equipo local un certificado intermedio disponible y la aplicación no lo proporciona, CAPI2 usa la extensión AIA en el certificado de entidad final para recuperar el certificado intermedio desde la red.

  4. El certificado no está incluido en la ubicación de red indicada en la extensión AIA. El resultado será un error de recuperación de red.

  5. No puede obtenerse el certificado intermedio, por lo que una ruta de certificados no puede crear una entidad de certificación raíz de confianza.

Diagnóstico

En la imagen siguiente se detallan los eventos que se registran en este escenario.

Events logged for partial chain error
  1. Para iniciar la solución del problema, examine el evento de error "CertGetCertificateChain", es decir, el evento con la categoría de tarea Compilar cadena. Normalmente, el error notificado por la API "CertGetCertificateChain" es el error que se envía a la aplicación. El nombre de proceso en los datos de evento permite limitar con facilidad el evento concreto del error. En este caso, ya sabe que se trata de la aplicación Internet Explorer, por lo que puede usar el nombre de proceso "iexplore.exe" correspondiente en la consulta de los eventos. Determine todos los eventos relacionados que tienen el mismo TaskId: "CorrelationAuxInfo". De este modo puede limitar los eventos que debe examinar para identificar la causa del error.

CertGetCertificateChain event - partialchain error
  1. Para clasificar el error, examine los marcadores de estado registrados en el evento "CertGetCertificateChain". A partir del estado de error, puede identificar el motivo del error de validación de rutas. Para detectar un error de cadena parcial, busque el marcador "CERT_TRUST_IS_PARTIAL_CHAIN". En el proceso de detección de rutas de certificados, los certificados de emisor se localizan en los almacenes de certificados y en los certificados proporcionados por la aplicación. El campo AdditionalStore en los datos de evento (ilustración 6), contiene certificados adicionales proporcionados por la aplicación.

  2. En este ejemplo, la aplicación solamente proporciona a CAPI2 el certificado de entidad final. CAPI2 intenta descargar el certificado de emisor, mediante la extensión AIA. Esta acción se representa con el evento "CertAIAUrlRetrievalWire" (ilustración 7) y se anida debajo de "CertGetCertificateChain". Si desea identificar un problema de recuperación de red o de certificados de emisor, consulte el evento "CertAIAUrlRetrievalWire" cuyo Resultado sea incorrecto (un valor distinto a cero).

  3. En la recuperación de red, el evento "CryptRetrieveObjectByUrlWire" (ilustración 8) se anida debajo de "CertAIAUrlRetrievalWire". En "HTTPResponseHeadersInfo", debajo de "AdditionalInfo", si aparece el error "404 No encontrado" significa que no se encontró el objeto en la ubicación. En este caso, el objeto no se encuentra en la ubicación especificada en la extensión AIA del certificado final. Esta información puede consultarse desde el atributo "httpStatusCode", en el elemento "AuxInfo" de este evento.

CertAIAUrlRetrievalWire event - partialchain error CryptRetrieveObjectByUrlWire event - partial chain

Del mismo modo, se puede usar la información de código de estado de HTTP para diagnosticar otros errores de HTTP. Estos escenarios se describen en la sección Errores de HTTP de este documento.

Error de inicio de sesión de tarjeta inteligente

Escenario

Intenta iniciar sesión en un equipo mediante una tarjeta inteligente, pero el inicio de sesión de tarjeta inteligente no se realiza correctamente. Se muestra el error siguiente.

Smartcard logon failure

En el inicio de sesión de tarjeta inteligente se realiza una autenticación mutua. El controlador de dominio autentica el cliente, mediante la comprobación del certificado en la tarjeta inteligente. El cliente autentica el controlador de dominio, mediante la creación y validación de una cadena para el certificado del controlador de dominio.

Las condiciones de este escenario son las siguientes:

  1. La CRL necesaria para comprobar la revocación del certificado del controlador de domino no se encuentra disponible en la memoria caché ni en el almacén del equipo cliente.

  2. La CRL no se encuentra en la ubicación indicada en el punto de distribución de CRL, en el certificado de entidad final del controlador de dominio.

  3. La comprobación de la revocación del certificado de entidad final es incorrecta. En consecuencia, se produce un error de validación de rutas de certificados correspondiente al certificado del controlador de dominio. Puesto que el inicio de sesión de tarjeta inteligente no funciona, la conexión deberá realizarse mediante la especificación del nombre y la contraseña de usuario.

El mensaje de error indica que el error está asociado al certificado del controlador de dominio. Esta validación de rutas de certificados se realiza en el cliente, de modo que, para diagnosticar el problema, debe habilitarse el registro de Diagnóstico CAPI2 en el equipo cliente, con el fin de reproducir el error.

Diagnóstico

En este escenario, el registro muestra un listado de los eventos siguientes.

Events logged for smartcard logon failure
  1. Examine el evento de error "CertGetCertificateChain" con el nombre de proceso lsass.exe e identifique todos los eventos correlacionados.

  2. Consulte los marcadores de estado de error correspondientes al evento de error "CertGetCertificateChain". Si no puede recuperarse información válida sobre revocaciones, se establecen los marcadores de estado "CERT_TRUST_IS_OFFLINE_REVOCATION" y "CERT_TRUST_REVOCATION_STATUS_UNKNOWN". Busque en los elementos de la cadena; la presencia de un marcador en un elemento indica un error de comprobación de revocación en dicho elemento de la cadena. También puede obtener más información acerca del elemento de la cadena en el que se produce el error como, por ejemplo, el nombre del sujeto y el hash del certificado correspondientes a la comprobación de revocaciones con error.

  3. En correspondencia con la comprobación de revocaciones, el evento "CertVerifyRevocation" se anida debajo de "CertGetCertificateChain". Si la comprobación de revocaciones es incorrecta, el evento "CertVerifyRevocation" mostrará un error. Para identificar la causa raíz de este error, examine los eventos anidados debajo de "CertVerifyRevocation".

  4. Durante la comprobación de revocaciones, siempre que se realiza una recuperación de red, el evento de error "CryptRetrieveObjectByUrlWire" se anida debajo de "CertVerifyRevocation". De forma similar que en el escenario anterior, use la información de código de estado de HTTP para detectar la causa raíz del error. El código de error de HTTP "404" indica que no se encontró el objeto.

CertGetCertificateChain error - sc logon failure CryptRetrieveObjectByUrlWire error - sc logon fail

Puede seguir pasos similares para la solución de otros problemas de red. Use los eventos de nivel superior para identificar el error de desconexión de revocación y el evento de error "CryptRetrieveObjectByUrlWire" para identificar la causa raíz del error.

Advertencia de certificado en Microsoft Outlook en la comprobación de correo electrónico firmado

Escenario

Abra en Microsoft Outlook 2007 un correo electrónico firmado. Una vez abierto el mensaje, si hace clic en el icono de firma digital, aparecerá la advertencia siguiente.

Warning when verifiying signed email in Outlook

Las condiciones de este escenario son las siguientes:

  1. La CRL necesaria para comprobar la revocación del certificado de firma no se encuentra disponible en la memoria caché ni en el almacén del equipo cliente.

  2. El equipo cliente está desconectado de la red y, por tanto, la CRL no puede descargarse desde la extensión CDP indicada en el certificado de firma.

  3. El error de descarga de la CRL genera un error de "desconexión de revocación" y el mensaje de la interfaz de usuario de Outlook indicará que la lista de revocación de certificados necesaria para comprobar el certificado de firma no se encuentra disponible o expiró.

Diagnóstico

En este escenario se registran los eventos siguientes.

Events logged for certificate warning in Outlook
  1. Busque el evento de error correspondiente a "Compilar cadena" e identifique todos los eventos correlacionados. Para limitar la búsqueda de eventos de error específicos, use el nombre de proceso (en este caso, "outlook.exe").

  2. La validación de rutas de certificados es incorrecta debido a un error de comprobación de revocación del certificado. De forma similar que en el escenario anterior, limite el error de comprobación de revocación, mediante la consulta de los marcadores incluidos en el evento "CertGetCertificateChain". Examine los eventos anidados debajo del evento de error "CertVerifyRevocation" correspondiente.

CertGetCertificateChain error - outlook warning
  1. Examine la acción registrada en el evento de error "CertRejectedRevocationInfo". En este escenario se registra una acción "Call_IsNetworkAlive". Este error significa que el equipo se encuentra desconectado de la red y no puede recuperar la información de revocación necesaria para realizar la comprobación del certificado.

El evento "CertRejectedRevocationInfo" puede resultar útil para el diagnóstico de diversos errores relativos a la validación de la información de revocación, bien de una CRL o de una respuesta de OCSP. En estos errores puede identificar la causa raíz del error, mediante la consulta del nombre de acción correspondiente en el evento de error "CertRejectedRevocationInfo". Existen otros pasos de diagnóstico similares. En la sección Escenarios de error de este documento se incluye información más detallada sobre los escenarios de este tipo de errores y su solución.

CertRejectedRevocationInfo - outlook warning

En estos ejemplos se muestra el modo en que Diagnóstico CAPI2 permite diagnosticar distintos errores de aplicación y proporciona información para identificar la causa raíz del error.

Si desea consultar eventos concretos del registro de eventos, puede filtrar manualmente el registro mediante el Visor de eventos. En el Apéndice D se muestran algunos ejemplos de filtrado mediante el Visor de eventos. Si guarda el registro en un archivo XML, puede escribir consultas XPATH en código para la consulta de datos del registro. El Apéndice B incluye consultas de ejemplo. En el Apéndice C se muestra un ejemplo de código C#, que explica el uso de las consultas XPATH para identificar la causa raíz de un error.

Escenarios de error

En esta sección se describen otros escenarios de error y se identifican los pasos para la solución de estos errores, según la información registrada en el registro de eventos de Diagnóstico CAPI2.

Errores de validación de ruta

CAPI2 registra los errores de validación de rutas de certificados en el evento de error "CertGetCertificateChain". Puede diagnosticar estos errores mediante la consulta del marcador ErrorStatus en el elemento "CertificateChain" del evento de error "CertGetCertificateChain". En la tabla siguiente se muestran algunos errores habituales de validación de rutas de certificados.

Errores de validación de rutas

Marcador ErrorStatus Descripción

CERT_TRUST_IS_NOT_TIME_VALID

Expiró el certificado de entidad final o uno de los certificados de la cadena de certificados. Puede obtenerse más información sobre el certificado y sus fechas de validez en el evento "X509Objects".

CERT_TRUST_IS_NOT_SIGNATURE_VALID

No puede comprobarse la firma del certificado de entidad final o uno de los certificados de la cadena.

CERT_TRUST_IS_REVOKED

Se revocó el certificado de entidad final o uno de los certificados de la cadena de certificados. El motivo de la revocación se indica en los datos del evento.

CERT_TRUST_IS_NOT_VALID_FOR_USAGE

El certificado se usa con una finalidad diferente de su EKU (Uso de clave extendida). El EKU y la información de uso de la aplicación pueden obtenerse del evento de error "CertGetCertificateChain".

CERT_TRUST_IS_UNTRUSTED_ROOT

Se creó una cadena de certificados para una CA raíz, pero el certificado de la CA raíz no está incluido en el almacén de entidades de certificación raíz de confianza del equipo.

CERT_TRUST_IS_CYCLIC

La cadena de certificados es cíclica, es decir, uno de los certificados de la cadena se emitió por una CA ya certificada mediante el certificado original.

CERT_TRUST_IS_REVOCATION_UNKNOWN

Se desconoce el estado de revocación del certificado de entidad final o uno de los certificados de la cadena. Para obtener más información sobre los errores de comprobación de revocaciones, consulte la sección Errores de comprobación de revocaciones, en este documento.

CERT_TRUST_IS_OFFLINE_REVOCATION

El estado de revocación del certificado de entidad final o uno de los certificados de la cadena se encuentra sin conexión o sin actualizar. Este error suele deberse a un problema de red. Para obtener más información sobre los errores de comprobación de revocaciones, consulte la sección Errores de comprobación de revocaciones, en este documento.

CERT_TRUST_IS_PARTIAL_CHAIN

La cadena de certificados está incompleta. El error de detección de la ruta de certificados genera un certificado incompleto. Para obtener más información, consulte la sección Errores de detección de rutas de certificados, en este documento.

Determinados errores de validación de rutas, como un error de cadena parcial o de comprobación de revocación, pueden tener su origen en distintos problemas, incluidos los errores de red, la existencia de objetos no válidos o la definición de configuraciones incorrectas. En las secciones siguientes se describen estos escenarios de error que, en muchos casos, constituyen la causa raíz de otros problemas.

Errores de recuperación de red

Muchos problemas de PKI pueden deberse a un error de red. Los errores de recuperación de red pueden producirse, por ejemplo, en la recuperación de objetos de tipos diferentes, como CRL o respuestas de OCSP y cuando los certificados de emisor usan la extensión AIA. Los errores de descarga de red, por lo tanto, pueden ocasionar errores de comprobación de revocaciones o de detección de rutas de certificados. A continuación se muestra una clasificación más detallada de los escenarios de errores de red:

Errores de HTTP

En esta sección se indican y describen algunos de los errores HTTP que pueden producirse:

Objeto no encontrado

La descarga de la CRL será incorrecta si no se incluye en la ubicación especificada en la extensión CDP del certificado. De modo similar, se producirá un error de descarga del certificado del emisor si el certificado no está incluido en la ubicación de la extensión AIA. Si no se encuentra el objeto, se devuelve el código de estado "404" de HTTP. El error puede identificarse desde el campo httpStatusCode, en el evento "CryptRetrieveObjectByUrlWire". También puede usarse httpStatusCode para diagnosticar escenarios similares de HTTP, algunos de los cuales se describen en las subsecciones siguientes.

Acceso denegado

Cuando se deniega el acceso al objeto en el servidor, el estado devuelto de respuesta de HTTP es "401". Para identificar este error, consulte la acción “HTTP_STATUS_DENIED” en el evento de error "CryptRetrieveObjectByUrlWire". La dirección URL del servidor ser registra en el mismo evento de error. Este error indica un problema de autenticación en el servidor.

Método no permitido por el servidor web

Si el método de HTTP usado para solicitar información del servidor no se admite en el servidor, el error se indica con el código de estado "405" de HTTP. Este error puede consultarse mediante la búsqueda de un campo httpStatusCode que incluya el valor "405" en el evento "CryptRetrieveObjectByUrlWire". Un ejemplo de este escenario se produce cuando CAPI2 efectúa una solicitud de respuesta de OCSP. En primer lugar, CAPI2 intenta el método GET y, si se produce un error con GET, se usará el método POST. Si el servidor no admite el método POST, devolverá el error "405" de HTTP.

Se requiere autenticación proxy

Otro caso que puede identificarse mediante los códigos de estado de HTTP es el escenario de error de autenticación de proxy. Este problema es similar al error "Acceso denegado". En este caso, la diferencia consiste en que el error de autenticación se produce en el servidor proxy usado para tener acceso al recurso web y el código de estado de HTTP devuelto por el servidor proxy es "407". Para identificar este error, consulte el nombre de acción “HTTP_STATUS_PROXY_AUTH_REQ” en el evento "CryptRetrieveObjectByUrlWire". Este escenario de error sólo tiene lugar en configuraciones específicas, como en los casos en que el proxy no admite la Autenticación integrada de Windows o en que el usuario o el equipo no disponen de permiso para tener acceso a Internet a través del proxy. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkId=82288 (puede estar en inglés).

Otros errores de HTTP

De modo similar, otros errores de HTTP pueden identificarse mediante la revisión del código de estado de HTTP en el evento "CryptRetrieveObjectByUrlWire". Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkId=82289 (puede estar en inglés).

Errores de tiempo de espera

Siempre que se realiza una solicitud al servidor web para recuperar un objeto, existe un tiempo de espera asociado al proceso de recuperación de red. El tiempo de espera predeterminado es de 15 segundos, pero este valor puede configurarse mediante directivas de grupo o especificarse por la aplicación. Si el objeto no se recupera en el período de tiempo de espera, se registra la acción “NetworkRetrievalTimeout” en el evento "CryptRetrieveObjectByUrlWire".

El objeto es demasiado grande

Un posible escenario de error de tiempo de espera se produce cuando el objeto descargado es de gran tamaño y la descarga no puede realizarse en el período de tiempo de espera. CAPI2 inicia de manera automática un subproceso en segundo plano para la recuperación de objetos. Si la recuperación no se completa en el período de tiempo de espera, el subproceso original en primer plano finaliza con el error "NetworkRetrievalTimeout", pero la descarga se completa en el subproceso en segundo plano. Una vez finalizada la descarga, se registra un evento "CryptRetrieveObjectByUrlWire" con la acción “PendingNetworkRetrievalComplete”. Este evento también registra el objeto recuperado.

Tomemos como ejemplo un escenario de inicio de sesión de tarjeta inteligente. Se produce un error de inicio de sesión, debido a que se agotó el tiempo de espera de la descarga de la CRL. Si vuelve a establecer la conexión posteriormente, el inicio de sesión será correcto, ya que la descarga de la CRL se habrá completado en segundo plano.

Para diagnosticar este error desde el registro de eventos:

  1. Busque el evento de error "CryptRetrieveObjectByUrlWire" en el que se registre la acción "NetworkRetrievalTimeout".

  2. Identifique la dirección URL en la que la descarga agotó el tiempo de espera, a partir del elemento de la dirección URL incluido en este evento de error.

  3. Busque en el registro otro evento "CryptRetrieveObjectByUrlWire" con el mismo valor de elemento de dirección URL que tenga registrada la acción "PendingNetworkRetrievalComplete". Esta acción corresponde al subproceso en segundo plano e incluye un TaskId independiente de "CorrelationAuxInfo", a partir del subproceso en primer plano que realiza la validación de rutas.

  4. El valor del resultado "0" significa que el subproceso en segundo plano se completó correctamente.

noteNota
Si el proceso de llamada finaliza antes de que el subproceso en segundo plano completa la descarga, no se registrará el evento de error con "PendingNetworkRetrievalComplete".

El tiempo de espera de la solicitud se agotó

Una solicitud efectuada al servidor para recuperar un objeto puede agotar el tiempo de espera en diferentes escenarios como, por ejemplo, los siguientes:

  • El servidor no está en línea y no responde a la solicitud.

  • El tiempo de espera del servidor DNS se agotó.

  • El proxy no responde.

  • La detección automática del proxy es lenta y el tiempo de espera se agotó.

En estos escenarios, se registra la acción "NetworkRetrievalTimeout" del evento de error "CryptRetrieveObjectByUrlWire", para indicar que se excedió el período de tiempo de espera. Sin embargo, el subproceso en segundo plano tampoco consigue recuperar el objeto. El evento con la acción “PendingNetworkRetrievalComplete” registra el error según se indica en el componente de red subyacente. Por ejemplo, si no puede establecerse una conexión al servidor HTTP, se registra una acción "Call_WinHttpSendRequest" con el valor de error "2EFD", que corresponde al valor hexadecimal de la constante de mensaje de error "ERROR_WINHTTP_CANNOT_CONNECT".

Para diagnosticar este error, deben seguirse unos pasos de diagnóstico similares a los indicados en la sección El objeto es demasiado grande. En este caso, la diferencia consiste en que el evento de error con "PendingNetworkRetrievalComplete" tiene un valor distinto de cero en el elemento de resultado. Para identificar la causa raíz del problema, consulte la acción que hace referencia al error de la API subyacente, como el caso de "Call_WinHttpSendRequest" en el ejemplo anterior. Asimismo, tenga en cuenta que cuando se registra una acción con el prefijo “Call_”, se refiere a la llamada a una API subyacente que generó un error. Por ejemplo, "Call_WinHttpSendRequest" indica un error en la llamada a "WinHttpSendRequest" y también se registra el código de error devuelto por esta API.

Aumento de tiempo de espera

Si existe un problema de tiempo de espera, seguido por una recuperación correcta en el proceso en segundo plano, significará que se trata de un objeto de gran tamaño o que una conexión de red lenta es la causante del error de tiempo de espera. Para resolverlo, puede aumentar el período de tiempo de espera predeterminado de recuperación de red. Si conoce el tamaño del objeto y el ancho de banda de red, podrá calcular el tiempo necesario para realizar la descarga. El tamaño del objeto se indica en el campo de encabezado "Content-Length" del elemento "HTTPResponseHeadersInfo", en los datos del evento "CryptRetrieveObjectByUrlWire".

En el procedimiento siguiente se indican los pasos detallados para aumentar el tiempo de espera de recuperación.

Para aumentar el tiempo de espera de recuperación
  1. Haga clic en Inicio y en Iniciar búsqueda, escriba mmc y, a continuación, presione Entrar.

  2. Si aparece el cuadro de diálogo Control de cuentas de usuario, confirme que la acción que muestra es la que desea y, a continuación, haga clic en Continuar.

  3. En el menú Archivo, haga clic en Agregar o quitar complementos.

  4. En Agregar o quitar complementos:

    1. Si está editando el objeto de directiva de grupo para el equipo local, haga clic en Editor de directivas de grupo local, a continuación en Agregar y, por último, en Finalizar.

    2. Si está editando el objeto de directiva de grupo para el equipo local, haga clic en Consola de administración de directivas de grupo, a continuación en Agregar y, por último, en Finalizar. En el árbol de consola, haga doble clic en Objetos de directivas de grupo en el bosque y dominio que contiene el objeto de directiva de grupo (GPO) de la Directiva predeterminada de dominio que desea editar. Haga clic con el botón secundario en el GPO de la Directiva predeterminada de dominio y, a continuación, haga clic en Editar.

    3. Si no tiene más complementos que agregar a la consola, haga clic en Aceptar.

  5. En el árbol de consola, expanda Directiva de seguridad local o Directiva predeterminada de dominio, según la selección efectuada en el paso anterior. En Configuración del equipo, expanda Configuración de Windows y Configuración de seguridad, haga clic en Directivas de clave pública y, a continuación, seleccione Configuración de validación de rutas de certificados.

  6. Seleccione la ficha Recuperación de red.

  7. Seleccione la opción Tiempo predeterminado de espera para recuperar direcciones URL (en segundos), en la sección Configuración de tiempos predeterminados de espera para recuperación.

  8. Especifique el valor deseado de tiempo de espera.

  9. Haga clic en Aplicar para aplicar la nueva configuración.

Error de conexión a través de un servidor proxy

Para establecer la conexión a la red mediante un servidor proxy, debe configurarse correctamente el servidor proxy correspondiente. Si no se indica correctamente el servidor proxy, se producirá un error de recuperación de la información de revocación a través de la red. Este escenario puede identificarse mediante la revisión de los datos registrados en el evento "CryptRetrieveObjectByUrlWire". Si se usa un proxy, incluirá una acción “ProxyListAndBypass” seguida por la lista de proxies. Si no se configuró un proxy de forma local, incluirá la acción “NoProxy”.

Si el servidor proxy no es correcto, se registra una acción “BadProxy” en los datos del evento "CryptRetrieveObjectByUrlWire". A continuación se mostrará el mensaje explicativo del error del sistema. Por ejemplo, si DNS informa sobre un error porque no puede resolverse el nombre del servidor proxy, se registra una acción "Call_WinHttpSendRequest" con el código de error "2EE7", que corresponde al valor hexadecimal de la constante de error "ERROR_WINHTTP_NAME_NOT_RESOLVED". Si no puede establecerse la conexión al servidor proxy, se registra una acción "Call_WinHttpSendRequest" con el código de error "2EFD", que corresponde al valor hexadecimal de la constante de error "ERROR_WINHTTP_CANNOT_CONNECT".

Siempre que se establece la conexión a la red a través de un servidor proxy, se incluye la lista de servidores y sitios omitidos en el registro. Esta información se registra en el evento "CryptRetrieveObjectByUrlWire" del elemento de la acción “ProxyListAndBypassList”. El parámetro de atributo de este elemento de acción muestra una lista de los servidores proxy y los sitios omitidos. La indicación "BadProxy" suele referirse a un problema en el primer proxy de la lista de proxies.

Errores de LDAP

En el caso de la recuperación de objetos mediante LDAP (Protocolo ligero de acceso a directorios), algunos errores son similares a los de otros escenarios de recuperación de red. Sin embargo, existen determinados errores adicionales específicos de LDAP.

Siempre que se detecta una dirección URL de LDAP, en primer lugar CAPI2 analiza la dirección URL para identificar diversos componentes. Si se produce un error de análisis, se registra “CrackLdapUrl” en el evento de error "CryptRetrieveObjectByUrl".

Los errores pueden producirse en diferentes etapas del proceso de conexión LDAP. CAPI2 llama a diferentes API de LDAP para establecer la conexión y descargar el objeto. Según sea la API en la que se produce el error, se registrará un evento de error con un nombre de acción que incluirá el nombre de la API con el prefijo "Call_". También se registra el código de error devuelto por la API de LDAP, que permite identificar la causa raíz del problema. Según la API de LDAP errónea de que se trate, el registro puede incluir las acciones "Call_ldap_connect", "Call_ldap_bind" o "Call_ldap_search".

Otros errores de recuperación de red

En esta sección se ofrece información detallada sobre otros errores de recuperación de red, incluidos los siguientes:

Error de recuperación de contenido de objeto

Cuando se recupera un objeto de la red, se llama a la función CryptQueryObject, con el fin de recuperar la información sobre el contenido del objeto. Si se produce un error de llamada, CAPI2 registra un evento de error "CryptRetrieveObjectByUrlWire" con la acción “Call_CryptQueryObject" e información ampliada sobre el problema que causó el error. Este error se registra, por ejemplo, si la CRL está dañada y no se puede descodificar. Tenga en cuenta que la descodificación de respuestas de OCSP se realiza de forma separada, a partir de este paso. Para obtener más información, consulte la sección Error de descodificación de respuesta de OCSP, en este documento.

Error de conexión al servidor

Este escenario de error hace referencia a un error de conexión al servidor, que puede producirse por motivos como los siguientes:

  • El servidor no está en línea.

  • La dirección URL indicada es incorrecta.

  • La dirección URL apunta a una dirección IP incorrecta.

La API "CryptRetrieveObjectByUrl" llama a la API WinHttpSendRequest para enviar al servidor HTTP una solicitud para la CRL. En este escenario, si no puede establecerse la conexión al servidor, WinHttpSendRequest genera el error "ERROR_WINHTTP_CANNOT_CONNECT". Este error se registra en el evento "CryptRetrieveObjectByUrlWire" como un elemento de acción denominado "Call_WinHttpSendRequest" con el valor de error "2EFD", que corresponde al valor hexadecimal de la constante de mensaje de error "ERROR_WINHTTP_CANNOT_CONNECT".

Protocolo incompatible

Al recuperar un objeto, si no se admite el protocolo especificado en la dirección URL, se registra el error "El sistema no puede encontrar el archivo especificado" en el evento "CryptRetrieveObjectByUrlWire". Este dato puede consultarse mediante la búsqueda del valor de resultado 2 en el evento de error "CryptRetrieveObjectByUrlWire". CryptoAPI, por ejemplo, no admite el protocolo FTP (Protocolo de transferencia de archivos) en la recuperación de red. Si la CDP o la extensión AIA incluyen una dirección URL de FTP, se producirá un error de recuperación de red.

Errores de repetición de recuperación de red

CAPI2 evita el acceso frecuente al servidor para obtener respuestas repetidas sin conexión. Si la solicitud tiene lugar antes de la primera fecha siguiente, la conexión se realizará mediante una interrupción progresiva y, a continuación, se desactivará la repetición de recuperación de red. En este escenario se registra el evento de error "CertRejectedRevocationInfo" con una acción “CanRetrieveFromNetwork”. La primera fecha siguiente de conexión al servidor se indica bajo el parámetro "EarliestOnlineTime".

En resumen, para solucionar errores de red, debe corregirse el componente subyacente (como la red, la configuración del servidor proxy, el servidor web o el LDAP) que origina el error.

Errores de comprobación de revocaciones

En esta sección se ofrece información sobre el modo de diagnosticar errores de comprobación de revocaciones. Un error de comprobación de revocaciones puede producirse por distintos motivos. Principalmente, puede deberse a un problema de recuperación de la información válida sobre revocaciones o a que no existe información disponible sobre revocaciones, ya que el certificado no incluye las extensiones AIA de CDP y OCSP. El evento "CertGetCertificateChain" contiene un marcador "CERT_TRUST_REVOCATION_STATUS_UNKNOWN" de "ErrorStatus", que indica un error de comprobación de revocación.

La mayoría de los errores de comprobación de revocaciones se deben a un problema al recuperar la información válida de revocación. En este caso, se establece el marcador "ErrorStatus" adicional "CERT_TRUST_IS_OFFLINE_REVOCATION", para indicar que el estado de revocación de uno de los certificados de la cadena se encuentra sin conexión o no está actualizado. Esto puede deberse a la imposibilidad de recuperar información de revocaciones o a que los datos recuperados no son válidos.

Los resultados de la comprobación de revocaciones se registran en el evento "CertVerifyRevocation". Para localizar la causa raíz, deberá examinar los eventos "CertRejectedRevocationInfo" y "CryptRetrieveObjectByUrlWire", que se anidan en el evento "CertVerifyRevocation".

Error de recuperación de información de revocaciones

Los errores de recuperación de red pueden deberse a muchos motivos, que se indican en la sección Errores de recuperación de red de este documento.

La información sobre revocaciones no es válida

La CRL expiró

Si la fecha actual es posterior a la fecha del campo nextUpdate en la CRL, significa que la CRL expiró. Este escenario se indica mediante la acción “CheckTimeValidity” en el evento "CertRejectedRevocationInfo". Este evento contiene detalles sobre la información de revocaciones rechazadas, como la CRL o la respuesta de OCSP, así como el certificado con el error de comprobación de revocación. Este evento también registra la acción que generó el error y que causó el rechazo de los datos de revocación.

La fecha indicada en el campo nextUpdate de la CRL puede identificarse desde el registro de eventos. En el evento correspondiente "X509Objects", busque el elemento "CertificateRevocationList" con la misma fileref que la registrada en el evento correspondiente "CertRejectedRevocationInfo". Este elemento contiene información acerca del período de validez de la CRL, según se indica en los campos thisUpdate y nextUpdate. Para corregir este error, publique en el servidor una CRL con un período valido.

Tal y como se menciona en la sección Errores de repetición de recuperación de red, CAPI2 evita el acceso frecuente al servidor, mediante el uso de la interrupción progresiva. Si el servidor responde reiteradamente con una CRL de período no válida y la siguiente solicitud se produce antes de la primera fecha siguiente de conexión al servidor mediante la interrupción progresiva, se registra la acción “CanCheckServerForUpdatedCrl”. La primera fecha siguiente de conexión al servidor se indica bajo el parámetro "EarliestOnlineTime".

La firma de la CRL no es válida

Si no puede comprobarse la firma de la CRL, se registra un evento de error "CertRejectedRevocationInfo" con el nombre de acción “IsCrlSignatureValid”. También se registra el código de error correspondiente al error producido, así como la ubicación de la CRL. Para corregir este problema, la CRL de este servidor deberá reemplazarse por una CRL con una firma válida.

No puede validarse la respuesta de OCSP

Como parte de la validación de la respuesta de OCSP, se comprueba la firma de la respuesta de OCSP. Sin embargo, si se produce un error de comprobación de firma, también se producirá un error de comprobación de revocación. En este caso, se registra la acción “IsResponseSignatureValid” en el evento de error "CertRejectedRevocationInfo". Además, CAPI2 no puede validar una respuesta de OCSP si no se trata de una respuesta básica con firma. Si la respuesta no contiene un identificador de objeto (también denominado OID), se registra un evento de error "CertRejectedRevocationInfo" con un elemento de acción “IsMissingResponseOID”. Si la respuesta contiene un identificador de objeto distinto al identificador de objeto correspondiente a una respuesta de OCSP básica con firma, se registra una acción “IsUnsupportedResponseOID”.

Firmante de OCSP no autorizado

Una respuesta de OCSP debe firmarse y el certificado del firmante de OCSP deberá contener el EKU de firma de OCSP. Si no se incluye el EKU, se produce un error. Este error se indica mediante la acción “GetOCSPSignerCertificate” en el evento "CertRejectedRevocationInfo". La misma acción también se registra cuando se producen otros errores en el contexto de un certificado de firmante de OCSP. Entre ellos se incluyen:

  • Un certificado de período no válido.

  • Un certificado que tiene una extensión CDP o una dirección URL de OCSP, pero no tiene la extensión "Revocation_No_Check".

Cuando se producen estos errores, CAPI2 también registra la información de certificado del firmante de OCSP.

Error de descodificación de respuesta de OCSP

Una respuesta de OCSP está formada por estructuras de datos que deben descodificarse de forma recursiva, con el fin de obtener la información necesaria. Si se produce un error de descodificación de la respuesta de OCSP, CAPI2 registra un evento de error "CertRejectedRevocationInfo". Según sea el paso en que se haya producido el error de descodificación, CAPI2 registra este evento con la acción "Call_CryptDecodeObject_OCSP_RESPONSE", "Call_CryptDecodeObject_OCSP_BASIC_SIGNED_RESPONSE" o "Call_CryptDecodeObject_OCSP_BASIC_RESPONSE".

La respuesta de CRL u OCSP incluye una extensión crítica no admitida

CAPI2 genera un error de comprobación de revocaciones, si la respuesta de CRL u OCSP contiene una extensión crítica que no se admite. En este caso, CAPI2 registra la información siguiente:

  • Un evento de error "CertRejectedRevocationInfo" con la acción “IsCrlCriticalExtensionSupported", si el error afecta a una CRL.

  • Una acción “IsResponseCriticalExtensionSupported”, si la respuesta de OCSP contiene una extensión crítica no admitida.

Estado incorrecto de respuesta de OCSP

Una respuesta de OCSP incluye un campo "responseStatus", que indica el estado de procesamiento de la solicitud anterior. Si el procesamiento se realiza correctamente, se indica mediante un estado de respuesta correcta.

Si existe un error, el campo "responseStatus" de OCSP puede incluir uno de los valores siguientes:

  • MalformedRequest

  • InternalError

  • TryLater

  • SigRequired

  • Unauthorized

Si el valor de "responseStatus" no es correcto, se registra un evento "CertRejectedRevocationInfo" con el nombre de acción “CheckResponseStatus”. Para consultar el estado de la respuesta de OCSP, examine el evento "X509Objects" correspondiente. El elemento de estado de "OCSPResponse" contiene el estado de la respuesta.

Para obtener más detalles sobre los valores de estado y los escenarios en que se pueden establecer, consulte la referencia RFC 2560 en el sitio web del Grupo de trabajo de ingeniería de Internet.

Otros errores

El certificado no contiene información de revocación

La presencia de una CDP resulta necesaria en cualquier certificado, excepto en los certificados de entidades de certificación raíz, debido a que la CDP proporciona un puntero para localizar la información de revocación. Si no se incluye la CDP, la ubicación de descarga de OCSP deberá estar disponible en la extensión AIA. La ausencia de estos dos punteros significa que CAPI2 no tiene pruebas concluyentes para determinar si la entidad de certificación publicó realmente información sobre revocaciones. Esta situación origina un error de comprobación de revocación y un estado de error de revocación desconocida. En este caso, CAPI2 registra un evento de error "CertRejectedRevocationInfo" con la acción “GetCrlOrOcspUrls” y el mensaje ampliado "No se puede encontrar el objeto o la propiedad".

Para solucionar este problema, compruebe el certificado que causa el error en el registro de eventos. Salvo que se trate de un certificado de entidad de certificación raíz, deberán volverse a configurar las entidades de certificación raíz correspondientes y los certificados pertinentes deberán volverse a emitir incluyendo la CDP correcta. Si se trata de un certificado de entidad de certificación raíz, la solicitud de comprobación de revocación en el certificado de entidad de certificación raíz por parte de una aplicación no será un procedimiento recomendado.

CAPI2 no admite la partición de las CRL por algún motivo. Si la CDP en el certificado hace referencia a una partición de CRL por algún motivo, CAPI2 omitirá esa ubicación específica de CDP durante el proceso. Si no existe otra CDP disponible, se producirá el mismo escenario de error, debido a que el certificado no contiene información de CDP.

Para obtener información sobre los procedimientos recomendados, consulte http://go.microsoft.com/fwlink/?LinkId=25612 (puede estar en inglés).

La IDP en la CRL no es válida para el certificado de sujeto

Si la CRL contiene una extensión IDP (Emisión de puntos de distribución), CAPI2 comprueba que la IDP es válida para el certificado de sujeto cuya revocación se comprueba. Si se produce un error de comprobación y la IDP no es válida para el certificado de sujeto, CAPI2 registra un evento de error "CertRejectedRevocationInfo" con la acción "Call_CertIsValidCRLForCertificate". Este error se registra, por ejemplo, si la IDP en la CRL no coincide con la CDP del certificado de sujeto.

Errores de detección de rutas de certificados

Error de configuración del servidor de recuperación de certificados de emisor

Como parte de la detección de rutas de certificados, los certificados intermedios pueden seleccionarse bien desde el almacén de certificados o la memoria caché del equipo cliente, o bien se obtienen desde el protocolo de la aplicación. Por ejemplo, en el caso de SSL, junto con el certificado de autenticación de servidor, también se envían al equipo cliente los certificados intermedios, dentro del proceso de autenticación por desafío mutuo. Si el certificado de emisor no se encuentra disponible de forma local o no se indicó en el protocolo de la aplicación, se usará la extensión AIA en el certificado de entidad final, con el fin de recuperar el certificado de emisor desde la red. CAPI2 registra en el evento "CertAIAUrlRetrievalWire" la descarga del certificado de emisor. Debido a que la recuperación de red afecta al rendimiento del sistema, deberá evitarse el uso de esta recuperación AIA.

En el caso de SSL, si el evento "CertAIAUrlRetrievalWire" aparece en el registro de eventos, significará que el servidor no se configuró de modo correcto. También puede realizar una minería de los datos del registro, con el fin de identificar certificados que omitidos o expirados. Un administrador podrá implementar, mediante directivas de grupo, los certificados intermedios de la CA en los equipos cliente aunque, normalmente, los certificados intermedios de la CA no se instalan de forma local en los clientes. Para evitar la recuperación de red, todos los servidores deberán configurarse correctamente, con los correspondientes certificados intermedios de la CA. Los certificados intermedios válidos que forman parte de la cadena de certificados para el certificado de servidor deberán agregarse al almacén de CA intermedios del equipo local del servidor. Una vez agregado el certificado intermedio válido, restablezca el enlace del certificado del servidor. De este modo se garantiza que los certificados intermedios se transmiten como parte del proceso de autenticación por desafío mutuo.

Para obtener más información, consulte el artículo 834438 en http://go.microsoft.com/fwlink/?LinkId=82290 (puede estar en inglés).

Error de recuperación de certificados de emisor

Si no pueden recuperarse los certificados del emisor, no se podrá crear una cadena desde el certificado de entidad final hasta el certificado raíz de confianza. Esta situación origina un error de cadena parcial, es decir, la imposibilidad de crear la cadena de certificados para una autoridad raíz de confianza. Cuando se produce un error de cadena parcial, se establece el marcador de estado "CERT_TRUST_IS_PARTIAL_CHAIN".

Los errores de recuperación de certificados de emisor pueden producirse por distintos motivos. Los errores de recuperación de red de certificados de emisor pueden deberse a muchos motivos, que se indican en la sección Errores de recuperación de red de este documento.

Asimismo, existe un límite del número máximo de direcciones URL que pueden intentarse como parte de una recuperación de certificados de emisor. También puede limitarse el número de certificados recuperados a través de AIA. La incorporación de estos límites permite restringir el tiempo empleado en la recuperación de certificados de emisor. Si se superan estos límites, puede producirse un error de cadena parcial. Si el certificado de emisor puede recuperarse pero no puede descodificarse correctamente, también puede producirse un error de cadena parcial.

Consideraciones generales para la solución de problemas automatizada

En los procesos siguientes se describen los pasos para la minería de datos en el registro y la identificación de la causa raíz del error.

Paso 1: identifique los eventos correlacionados y agrúpelos.

  1. Localice y registre cada TaskId exclusivo "CorrelationAuxInfo" del registro.

  2. Identifique los eventos de cada TaskId que tengan el mismo TaskId y agrúpelos en un conjunto.

Realice los siguientes pasos en cada conjunto de eventos correlacionados.

Paso 2: clasifique el error.

En este paso, clasifique el escenario de error, según el evento de error de nivel superior.

  1. Busque el evento "CertGetCertificateChain" que incluye un error. Si existe un evento de error "CertGetCertificateChain", use los marcadores "ErrorStatus" para identificar el escenario del error.

    • Si se establece el marcador "CERT_TRUST_REVOCATION_STATUS_UNKNOWN", indicará un error de validación de rutas debido a un problema de comprobación de revocaciones. Los errores de comprobación de revocaciones suelen deberse a errores de recuperación y se indican mediante el establecimiento de un marcador adicional. Si este marcador se establece sin intervención del usuario, podrá hacer referencia a errores de comprobación de revocación debido a otros motivos como, por ejemplo, si la CDP incluye un campo Motivos no admitido.

    • Si también se establece el marcador "CERT_TRUST_IS_REVOCATION_OFFLINE", el error de validación de rutas se deberá a un problema de recuperación durante una comprobación de revocación, bien porque no puede recuperarse la información de revocación o porque la información recuperada no es válida.

    • Si se establece el marcador "CERT_TRUST_IS_UNTRUSTED_ROOT", indica que la cadena de certificados se creó para una CA raíz, pero el certificado de la CA raíz no está incluido en el almacén de entidades de certificación raíz de confianza.

    • Si se establece el marcador "CERT_TRUST_IS_PARTIAL_CHAIN", significará que no se pudo crear una cadena de certificados completa para una raíz de confianza. Este caso puede ocurrir si no se pueden encontrar certificados de emisor y se produce un error de recuperación de certificados de emisor mediante AIA.

    • La aparición de otros marcadores indicará (según el marcador de que se trate) un error concreto de validación de rutas. Consulte la sección Errores de validación de rutas en este documento, donde se describen escenarios habituales de errores de validación de rutas y los marcadores "ErrorStatus" correspondientes.

  2. Busque el evento "CryptAcquireCertificatePrivateKey" que incluye un error. Este evento indica los errores relativos a la obtención de claves privadas de certificados.

  3. Busque el evento "CertOpenStore" que incluye un error. Este evento indica errores relacionados con operaciones de almacén de certificados.

  4. Busque otros errores.

Los marcadores de estados de error en el evento "CertGetCertificateChain" permiten identificar los síntomas, así como limitar la búsqueda de la causa raíz del error. Para detectar la causa raíz del error, revise otras API llamadas como parte de la validación de rutas. En determinadas instancias, sin embargo, puede llamarse directamente a estas API y puede que no exista un evento "CertGetCertificateChain" en el conjunto de eventos correlacionado. En este caso, busque directamente la causa de los errores, mediante el evento basado en estas API. Estos eventos de error podrían coincidir con cualquiera de los eventos descritos en la sección Escenarios de error de este documento.

Paso 3: identifique la causa raíz del error.

En el paso 2 se identificaron los síntomas que limitan el número de errores con causas raíz que deben buscarse en cada escenario concreto. En el paso 3 se realiza la identificación de esta causa raíz. Para ello, puede realizarse una revisión de las acciones específicas o códigos de estado del registro de eventos. Las acciones y códigos de estado de distintos escenarios se describen en la sección Escenarios de error. Según el tipo de errores de que se trate, estos nombres de acciones y códigos de estado deberán examinarse en eventos específicos. Por ejemplo, en los errores de revocación, examine los eventos de error "CertRejectedRevocationInfo", mientras que en los errores de recuperación de red, deberá examinar los eventos de error "CryptRetrieveObjectByUrlWire".

En la siguiente ilustración se muestra un diagrama de flujo correspondiente a este algoritmo.

Steps to mine data from event log

Con el fin de automatizar el proceso de solución de problemas, es posible escribir código para la consulta del registro, según los pasos descritos anteriormente. Revise el ejemplo de código recogido en el Apéndice C, en el cual se describe el modo de aplicar este proceso para diagnosticar errores. En el Apéndice B se incluyen algunas consultas XPATH para diferentes escenarios de error, similares a las consultas usadas en el ejemplo de código.

Resumen

Diagnóstico CAPI2 permite recopilar información detallada sobre las distintas operaciones asociadas a certificados, como la validación de rutas de certificados y la comprobación de firmas. Esta información resulta de gran utilidad para la solución de problemas de PKI en las aplicaciones habilitadas para PKI. Puede usar la información acerca de los escenarios y consultas incluidas en este documento con el fin de interpretar los datos del registro, buscar en el registro de evento patrones concretos, así como identificar la causa raíz de un problema. Diagnóstico CAPI2 proporciona un modo de mejorar la solución de problemas de PKI y permite reducir el tiempo dedicado a la solución de problemas habituales.

Comentarios

Puede incluir cualquier pregunta o comentario acerca de Diagnóstico CAPI2 en el grupo de noticias microsoft.public.security.crypto.

Apéndices

En esta sección se incluyen los apéndices siguientes:

Apéndice A: eventos en el registro de eventos de diagnóstico de CAPI2

En la tabla siguiente se detallan los eventos de nivel superior que se registran en el registro de Diagnóstico CAPI2.

Diagnóstico CAPI2: eventos de nivel superior

Nombre de evento Tarea Descripción

CertGetCertificateChain

Compilación de cadena

Muestra los resultados de una validación de rutas de certificados.

CertVerifyRevocation

Comprobación de revocación

Muestra los resultados de una comprobación de revocación en uno o varios certificados. En la mayoría de los casos se anida debajo de "CertGetCertificateChain" y solamente se desencadena como evento de nivel superior cuando una aplicación llama directamente a la API "CertVerifyRevocation".

CertVerifyCertificateChainPolicy

Comprobación de directiva de cadena

Muestra los resultados de una aplicación que evalúa una cadena de certificados, conforme a directivas predefinidas en Windows.

CertOpenStore

Apertura de almacén

Muestra los resultados de la apertura de almacenes de certificados.

CryptRetrieveObjectByUrlWire

Recuperación de objetos de la red

Muestra los resultados de una descarga de red.

CryptRetrieveObjectByUrlCache

Recuperación de objetos de la memoria caché

Muestra los resultados de la recuperación de un objeto desde la memoria caché del disco.

CryptAcquireCertificatePrivateKey

Adquisición de clave privada de certificado

Muestra los resultados del intento de obtención de una clave privada para un certificado.

WinVerifyTrust

Comprobación de la confianza

Muestra los resultados de la comprobación de firma mediante "WinVerifyTrust," así como de la validación de la cadena de certificados. Contiene información acerca de las causas de error de validación del código firmado.

CryptCATAdminEnumCatalogFromHash

Búsqueda de catálogo de seguridad para el archivo

Contiene información acerca de búsquedas en el catálogo. Como parte de la comprobación de firma, se obtiene el hash del archivo, se busca en el catálogo y, posteriormente, se comprueba la firma incluida en el catálogo. Este evento registra el hash del archivo, la ruta de archivo del catálogo y la ruta destino del archivo. El hash de archivo puede usarse como vínculo entre este evento y el evento "WinVerifyTrust" correspondiente.

A continuación se indican los eventos de nivel inferior que se anidan debajo de los eventos de nivel superior en el registro de Diagnóstico CAPI2.

Registro de Diagnóstico CAPI2: eventos de nivel inferior

Nombre de evento Tarea Descripción

CertAIAUrlRetrievalWire

Recuperación de certificado de emisor de la red

Muestra los resultados de recuperación del certificado del emisor de la red.

CertAIAUrlRetrievalCache

Recuperación de certificado de emisor de la memoria caché

Muestra los resultados de la recuperación del certificado de emisor de la memoria caché.

CertAutoRootUrlRetrievalWire

Recuperación de certificado raíz de terceros de la red

Muestra los resultados de la descarga de un certificado raíz de terceros, como parte de la actualización raíz automática.

CertAutoRootUrlRetrievalCache

Recuperación de certificado raíz de terceros de la memoria caché

Muestra los resultados de la recuperación del certificado raíz de terceros de la memoria caché.

CertCrossCertUrlRetrievalWire

Recuperación de certificado cruzado de la red

Muestra los resultados de la descarga del certificado cruzado.

CertCrossCertUrlRetrievalCache

Recuperación de certificado cruzado de la memoria caché

Muestra los resultados de la recuperación del certificado cruzado de la memoria caché.

CertRejectAIAUrlRetrieval

Desactivación de la recuperación de certificado de emisor

Contiene información acerca del motivo de la desactivación de la recuperación de certificado del usuario. La causa puede deberse a motivos similares a la superación del recuento máximo de direcciones URL.

CertRejectedRevocationInfo

Rechazo de información de revocación

Contiene información acerca del motivo del rechazo de una CRL o una respuesta de OCSP concretas. El evento indicará si la CRL o la OCSP se recuperó de la memoria caché, del almacén o de la red. Este evento se anida debajo del evento "CertVerifyRevocation".

X509Objects

Objetos X509

Contiene detalles acerca de los objetos de certificado usados en la actividad. La información de los objetos X.509 como, por ejemplo, los certificados, las CRL y las respuestas de OCSP, se registran como parte de este evento.

Apéndice B: ejemplo de consultas XPATH

Las XPATH pueden usarse para la consulta de información en el registro de eventos, con el fin de solucionar problemas. Si guarda los datos del registro de eventos en un archivo XML, podrá usar las siguientes XPATH para identificar información específica del registro.

En la tabla siguiente se indican las tareas detalladas en la sección Solución de problemas habituales de este documento y sus expresiones XPATH correspondientes.

Consultas XPATH: sección de solución de problemas habituales

Tarea Expresión XPATH

Búsqueda del evento de error Compilar cadena

//Event[System/Level=2]//CertGetCertificateChain

Búsqueda del evento de error Compilar cadena asociado a una aplicación concreta, por ejemplo Internet Explorer.

//Event[System/Level=2]//CertGetCertificateChain[EventAuxInfo[@ProcessName='iexplore.exe']]

Localización de todos los eventos que incluyan una tarea concreta

//CorrelationAuxInfo[@TaskId='" + taskid + "']/parent::*

Consulta de los marcadores de estados de error en los elementos de la cadena

//CertGetCertificateChain[ChainElement[TrustStatus[ErrorStatus[@CERT_TRUST_IS_OFFLINE_REVOCATION]]]]

En la tabla siguiente se indican los errores detallados en la sección Errores de validación de rutas de este documento y sus expresiones XPATH correspondientes.

Consultas XPATH: sección de errores de validación de rutas

Error Expresión XPATH

Expiró el certificado o uno de los certificados de la cadena de certificados.

//CertGetCertificateChain/CertificateChain[TrustStatus[ErrorStatus[@CERT_TRUST_IS_NOT_TIME_VALID]]

En otros errores de validación de rutas, reemplace el marcador ErrorStatus correspondiente, en la expresión indicada.

En la tabla siguiente se indican los errores detallados en la sección Errores de recuperación de red de este documento y sus expresiones XPATH correspondientes.

Consultas XPATH: Sección de errores de recuperación de red

Error Expresión XPATH

Error HTTP 404

//CryptRetrieveObjectByUrlWire[AuxInfo[@httpStatusCode='404']]

Busque otros errores HTTP, reemplazando 404 por el código de estado correspondiente.

Error de tiempo de espera

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='NetworkRetrievalTimeout']]]

Si se trata de un objeto de gran tamaño, examine los eventos del subproceso en segundo plano.

objecturl=//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='NetworkRetrievalTimeout']]]/URL

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='PendingNetworkRetrievalComplete']] and URL=’{objecturl}’ and Result[@value=’0’]]

Si el servidor no se encuentra disponible, se producirá un error de llamada a WinHttpSendRequest.

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_WinHttpSendRequest']]]

Error de conexión a través de un proxy

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='BadProxy']]]

Para identificar el proxy incorrecto:

//CryptRetrieveObjectByUrlWire/AdditionalInfo/Action[@name='BadProxy']/@parameter1

Error de LDAP

Consulta de errores en llamadas a las API de LDAP

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_connect']]]

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_bind']]]

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_search']]]

Error

Expresión XPATH

Error HTTP 404

//CryptRetrieveObjectByUrlWire[AuxInfo[@httpStatusCode='404']]

Busque otros errores HTTP, reemplazando "404" por el código de estado correspondiente.

Error de tiempo de espera

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='NetworkRetrievalTimeout']]]

Si se trata de un objeto de gran tamaño, examine los eventos del subproceso en segundo plano.

objecturl=//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='NetworkRetrievalTimeout']]]/URL

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='PendingNetworkRetrievalComplete']] and URL=’{objecturl}’ and Result[@value=’0’]]

Si el servidor no se encuentra disponible, se producirá un error de llamada a WinHttpSendRequest.

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_WinHttpSendRequest']]]

Error de conexión a través de un proxy

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='BadProxy']]]

Para identificar el proxy incorrecto:

//CryptRetrieveObjectByUrlWire/AdditionalInfo/Action[@name='BadProxy']/@parameter1

Error de LDAP

Consulta de errores en llamadas a las API de LDAP

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_connect']]]

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_bind']]]

//CryptRetrieveObjectByUrlWire[AdditionalInfo[Action[@name='Call_ldap_search']]]

En la tabla siguiente se indican los errores detallados en la sección Errores de comprobación de revocaciones de este documento y sus expresiones XPATH correspondientes.

Consultas XPATH: Sección de errores de comprobación de revocaciones

Error Expresión XPATH

La CRL expiró

//CertRejectedRevocationInfo[Action[@name='CheckTimeValidity']]

No puede comprobarse la firma de la CRL

//CertRejectedRevocationInfo[Action[@name='IsCrlSignatureValid']]

No puede validarse la respuesta de OCSP

Si no puede validarse la firma de la respuesta OCSP:

//CertRejectedRevocationInfo[Action[@name='IsResponseSignatureValid']]

Si se produce un error de descodificación de la respuesta de OCSP:

//CertRejectedRevocationInfo[Action[@name='Call_CryptDecodeObject_OCSP_RESPONSE']]

Firmante de OCSP no autorizado

//CertRejectedRevocationInfo[Action[@name=’GetOCSPSignerCertificate']]

Error de descodificación de respuesta de OCSP

//CertRejectedRevocationInfo[Action[@name=’Call_CryptDecodeObject_OCSP_RESPONSE']]

La respuesta de CRL u OCSP incluye una extensión crítica no admitida

//CertRejectedRevocationInfo[Action[@name='IsCrlCriticalExtensionSupported’]]

//CertRejectedRevocationInfo[Action[@name='IsResponseCriticalExtensionSupported']]

Estado incorrecto de respuesta de OCSP

//CertRejectedRevocationInfo[Action[@name='CheckResponseStatus']]

Apéndice C: ejemplo de código para la identificación de patrones

Este ejemplo de código ilustra el modo de detectar la causa raíz de un error, en el caso del escenario descrito en la sección Error de inicio de sesión de tarjeta inteligente. El ejemplo muestra una implementación del proceso descrito en la sección Consideraciones generales para la solución de problemas automatizada. El ejemplo puede ampliarse para incluir más escenarios de error. Para ejecutar este ejemplo, guarde en un archivo XML los eventos del registro de eventos de Diagnóstico CAPI2. Al ejecutar el ejemplo, indique el nombre del archivo XML como un argumento de la línea de comandos.

Las funciones principales de este código de ejemplo son las siguientes:

  • IdentifyPattern: punto de partida para la identificación del patrón de error de una secuencia concreta de eventos correlacionados.

  • ClassifyError: clasificación de nivel superior del error de validación de rutas, según los marcadores "ErrorStatus" de "CertGetCertificateChain".

  • CheckHTTPErrorPattern: comprobación del tipo de errores de recuperación debido a problemas de HTTP; pueden incluirse funciones similares, como "CheckProxyErrorPattern" o "CheckTimeoutErrorPattern".

  • Funciones auxiliares: el resto de las funciones son funciones auxiliares destinadas a la consulta de información concreta del registro de eventos.

Using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Collections;
using System.Text;

namespace CAPIDiagPatternIdentifier
{
 class PatternIdentifier {
  // The top-level classification of error symptoms 
  const int OTHER_ERROR = 0;
  const int REVOCATION_FAILURE = 1;
  const int RETRIEVAL_ERROR = 2;
  const int SIGNATURE_INVALID = 3;
  const int UNTRUSTED_ROOT = 4;
  const int PARTIAL_CHAIN = 5;
  const int REVOKED = 6;    

  const string filePath = ".\\";
  //The log namespace
  const string logns = "http://schemas.microsoft.com/win/2004/08/events/event";    

  // Define error queries and message strings here
  // This can be used to look for specific patterns in the log

  const string err404qry = "//ns:CryptRetrieveObjectByUrlWire[ns:AuxInfo[@httpStatusCode='404']]";
  const string err404msg = "CRL could not be found at the CDP URL :";     

  private XmlDocument doc;
  private XPathNavigator xpath;
  private XmlNamespaceManager nsmanager;
  
  public PatternIdentifier(string[] args) {
   // Create the XmlDocument object
   doc = new XmlDocument();
   // Open the log specified by the command line
   FileStream fs = new FileStream(args[0], FileMode.Open);
   // Load the log into an XML DOM
   doc.Load(fs);
   xpath = doc.CreateNavigator();      
   nsmanager = new XmlNamespaceManager(xpath.NameTable);
   nsmanager.AddNamespace("ns", logns);   
  }

  public String GetTaskId(XmlNode eventNode) {
   String TaskId = null;
   XPathNavigator navigator = eventNode.CreateNavigator();
   XPathNodeIterator itr = navigator.Select("@TaskId");
   if (itr.MoveNext())  {
    TaskId = itr.Current.Value;
   }
   return TaskId;
  }

  private String GetProcessName(XPathNavigator currentNode)  {
   String processName = null;
   XPathNodeIterator itr = currentNode.Select("//@ProcessName");
   if (itr.MoveNext())   {
    processName = itr.Current.Value;
   }
   return processName ;
  }

  // A common function for checking all network errors
  private bool CheckNetworkRetrievalPattern(XPathNavigator currentNode, String evtQuery, String errString)  {
   XPathExpression evtqry = xpath.Compile(evtQuery);
   evtqry.SetContext(nsmanager);
   if (currentNode.Matches(evtqry) && (currentNode is IHasXmlNode))   {
    XmlNode node = ((IHasXmlNode)currentNode).GetNode();
    string URL = (node.SelectSingleNode("ns:URL", nsmanager)).InnerXml;
    System.Console.WriteLine("Network Retrieval failed. "+ errString + URL);
    return true;
   }
   return false;
  }

  // Check for HTTP Errors
  private bool CheckHTTPErrorPattern(XPathNavigator currentNode)  {
   if (CheckNetworkRetrievalPattern(currentNode, err404qry, err404msg)) return true;
   // Add other HTTP errors here
   return false;
  }

  private bool isInArray(ArrayList al, string val)  {
   for (int i = 0; i < al.Count; ++i)   {
    if (val == (string)al[i])    {
     return true;
    }
   }
   return false;
  }
     
  public void IdentifyPattern(XPathNodeIterator eventNodes, string TaskId)  {
   if (eventNodes.Count > 0)   {
    while (eventNodes.MoveNext())    {
     String fileRef = null;
     String subjectName = null;
     String processName = null ;
     int errorType = 0;
     // Need to look at which chain element has an error           
     XPathExpression errQuery = xpath.Compile("//ns:CertGetCertificateChain[ns:Result[@value!='0']]");
     errQuery.SetContext(nsmanager);
     if (eventNodes.Current.Matches(errQuery))     {
      // We know that a chain element has an error
      // Get more data about the element and the error
      errorType = ClassifyError(eventNodes, ref fileRef, ref subjectName, ref processName);
     }     
     // We now try to identify the cause of this error.
     switch (errorType)    {
      case RETRIEVAL_ERROR:
       {
        while (eventNodes.MoveNext())     {
         if (CheckHTTPErrorPattern(eventNodes.Current)) break;
         //Check for other network errors here
        }
        break;
       }
      //Add more cases per classification
      case OTHER_ERROR:
       {
        //Any other errors not covered by the cases above.        
        break;        
       }         
     }     
    }
    eventNodes = null;
   }
  }

//Top-level classification of error symptoms (step 2 of the algorithm)
//Find the chain element corresponding to the specific error symptom
  private int ClassifyError(XPathNodeIterator eventNodes, ref String fileRef, ref String subjectName, ref String processName)  {
   processName = GetProcessName(eventNodes.Current);
   System.Console.WriteLine("Application causing error: " + processName);
   XPathNodeIterator chainElement = eventNodes.Current.SelectDescendants("ChainElement", logns, false);
   while (chainElement.MoveNext())   {
    XPathExpression statusQuery1 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_REVOCATION_STATUS_UNKNOWN]]]");
    XPathExpression statusQuery2 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_IS_OFFLINE_REVOCATION]]]");
    XPathExpression statusQuery3 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_IS_NOT_SIGNATURE_VALID]]]");
    XPathExpression statusQuery4 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_IS_UNTRUSTED_ROOT]]]");
    XPathExpression statusQuery5 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_IS_PARTIAL_CHAIN]]]");
    XPathExpression statusQuery6 = xpath.Compile("//ns:ChainElement[ns:TrustStatus[ns:ErrorStatus[@CERT_TRUST_IS_REVOKED]]]");
    statusQuery1.SetContext(nsmanager);
    statusQuery2.SetContext(nsmanager);
    statusQuery3.SetContext(nsmanager);
    statusQuery4.SetContext(nsmanager);
    statusQuery5.SetContext(nsmanager);
    statusQuery6.SetContext(nsmanager);
    chainElement.Current.MoveToChild("Certificate", logns);
    fileRef = chainElement.Current.GetAttribute("fileRef", "");
    subjectName = chainElement.Current.GetAttribute("subjectName", "");
    chainElement.Current.MoveToParent();
    if (chainElement.Current.Matches(statusQuery5))     {
     System.Console.WriteLine("Path validation failed for the certificate of subjectName:" + subjectName + " (" + fileRef + ") because a complete chain could not be built");
     return PARTIAL_CHAIN;
    } 
    else if (chainElement.Current.Matches(statusQuery4))     {
     System.Console.WriteLine("Path validation failed for the certificate of subjectName:" + subjectName + " (" + fileRef + ") because it did not chain up to a trusted root");
     return UNTRUSTED_ROOT;
    }
    else if (chainElement.Current.Matches(statusQuery3))     {
     System.Console.WriteLine("Path validation failed for the certificate of subjectName:" + subjectName + " (" + fileRef + ") because its signature could not be verified.");
     return SIGNATURE_INVALID;
    }
    else if (chainElement.Current.Matches(statusQuery2))     {      
     System.Console.WriteLine("Revocation check failed for the certificate of subjectName:" + subjectName + " (" + fileRef + ") because revocation server was offline");
     return RETRIEVAL_ERROR;
    }
    else if (chainElement.Current.Matches(statusQuery1))     {
     System.Console.WriteLine("Revocation status for he certificate of subjectName:" + subjectName + " (" + fileRef + ") could not be determined");
     return REVOCATION_FAILURE;
    }     
    else if (chainElement.Current.Matches(statusQuery6))    {
     System.Console.WriteLine("Certificate is revoked");
     return REVOKED;
    }
   }
   return OTHER_ERROR;
  }
  
//The XML event log file is command line argument to the program
  static void Main(string[] args)  {
   PatternIdentifier mainProg = new PatternIdentifier(args);
   XmlNode root = mainProg.doc.DocumentElement;
//Identify the TaskId for all error events
   XmlNodeList errEvents = root.SelectNodes("//ns:Event[ns:System/ns:Level=2]//ns:CorrelationAuxInfo",mainProg.nsmanager);
   ArrayList tasks = new ArrayList(); 
   foreach (XmlNode errEvent in errEvents)   {
    string taskId = null;
    taskId = mainProg.GetTaskId(errEvent);
    if (!mainProg.isInArray(tasks, taskId))    {
     tasks.Add(taskId);
    }     
   }
//For each TaskId, correlate all events with same taskId and identify an error pattern in the correlated set of events.
   for (int i = 0; i < tasks.Count; ++i)   {
    string TaskId = (string)tasks[i];
    XPathExpression eventQuery = mainProg.xpath.Compile("//ns:CorrelationAuxInfo[@TaskId='" + TaskId + "']/parent::*");
    eventQuery.SetContext(mainProg.nsmanager);
    XPathNodeIterator eventNodes = mainProg.xpath.Select(eventQuery);
    mainProg.IdentifyPattern(eventNodes,TaskId);          
   }       
   System.Console.Read();
  }
 }
}

Apéndice D: filtrado mediante el Visor de eventos

Puede escribir consultas manuales en el filtro del Visor de eventos para ver eventos concretos.

Para escribir consultas manuales en el filtro del Visor de eventos
  1. Abra el Visor de eventos. Para abrir el Visor de sucesos, haga clic en Inicio, Panel de control, haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Visor de sucesos.

  2. Si aparece el cuadro de diálogo Control de cuentas de usuario, confirme que la acción que muestra es la que desea y, a continuación, haga clic en Continuar.

  3. En el panel de la consola, expanda Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows y, por último, expanda CAPI2.

  4. Haga clic con el botón secundario en Operativo y seleccione Filtrar registro actual.

  5. Seleccione la ficha XML y marque la casilla Editar consulta manualmente.

  6. Para filtrar el registro, escriba la consulta correspondiente en el cuadro de texto.

    1. Para buscar todos los eventos de error "CertGetCertificateChain" con el processname "iexplore.exe", escriba en el cuadro de texto la siguiente consulta:

      <QueryList> <Query Id="0" Path="Microsoft-Windows-CAPI2/Operational"> <Select Path="Microsoft-Windows-CAPI2/Operational">Event[System[(Level=2)] and UserData[CertGetCertificateChain[EventAuxInfo[@ProcessName='iexplore.exe']]]]</Select> </Query> </QueryList>
      
    2. Para identificar todos los eventos correlacionados correspondientes al evento de error específico "CertGetCertificateChain", puede usar la consulta siguiente en el filtro del visor de eventos (En este caso, {taskid} corresponde al identificador de tarea del evento de error "CertGetCertificateChain"):

      <QueryList> <Query Id="0" Path="Microsoft-Windows-CAPI2/Operational"> <Select Path="Microsoft-Windows-CAPI2/Operational">*[*[*[CorrelationAuxInfo[@TaskId='{taskid}']]]]</Select> </Query> </QueryList>
      

Apéndice E: herramientas de Windows relacionadas con certificados

Diagnóstico CAPI2 está disponible en Windows Vista. Existen herramientas de diagnóstico que puede usar para la solución de problemas en versiones anteriores de Windows. CAPIMON (Monitor CryptoAPI) es una herramienta que permite a los administradores controlar las llamadas CryptoAPI de la aplicación y sus resultados. CAPIMON se creó para solucionar los problemas de las aplicaciones existentes que no informan correctamente sobre los errores, mediante la captura de los datos de entrada y salida de API concretas, en lugar de usar los informes o registros de errores de la aplicación. CAPIMON constituye una opción óptima para la solución de problemas en versiones anteriores de Windows, en aquellas situaciones en que el informe de errores de la aplicación no indica la causa del problema. Para descargar CAPIMON, consulte http://go.microsoft.com/fwlink/?LinkId=82293 (puede estar en inglés).

Para la comprobación de certificados, pares de claves y cadenas de certificados, puede usar la utilidad de línea de comandos certutil.exe. Esta herramienta también resulta útil para configurar servicios de certificados y mostrar la información de configuración. Para obtener más información acerca de Certutil, consulte http://go.microsoft.com/fwlink/?LinkId=82294 (puede estar en inglés).

Más información

Para obtener más información, consulte los siguientes documentos:

  1. RFC: "Perfil de certificado de infraestructura de clave pública de Internet y de lista de revocación de certificados (CRL)" (puede estar en inglés).

  2. RFC: "Protocolo de estado de certificados en línea (OCSP) de la infraestructura de clave pública de Internet X.509" (puede estar en inglés).

  3. Solución de problemas de revocación de certificados y comprobación de estado (puede estar en inglés).

  4. Procedimientos recomendados para la implementación de una infraestructura de clave pública en Microsoft Windows Server 2003 (puede estar en inglés).

  5. Declaración de privacidad de Windows Vista (puede estar en inglés).

  6. Funciones de criptografía (puede estar en inglés).

  7. Reducción de los costos de soporte con Windows Vista (puede estar en inglés).

  8. Direccionamiento de Infosets con XPATH (puede estar en inglés).

Adiciones de comunidad

AGREGAR
Mostrar: