Pregunta

Hemos una solicitud de emisión de certificados existentes (C #, ASP.NET, JavaScript) que emiten certificados a los usuarios de Windows XP utilizando Xenroll en IE. Necesito extender esta compatible con Windows Vista y Windows 7 usuarios, utilizando también el IE.

Para Vista y 7, Microsoft reemplazó el controll Xenroll ActiveX con el nuevo control CertEnroll. Tengo este trabajo en Vista SP2, pero en 7 me sale este error en el paso de la instalación:

  

CertEnroll :: :: CX509Enrollment InstallResponse:   Una cadena de certificados procesado, pero   terminado en un certificado raíz que   no es de confianza por el proveedor de confianza.   0x800b0109 (-2146762487)

He aquí un fragmento del código HTML y JavaScript relevante:

<object id="classFactoryObj" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object>

<script type="text/javascript">
    function InstallCert() 
    {  
        try
        {
            var classFactory = document.getElementById("classFactoryObj");
            var objEnroll = classFactory.CreateObject("X509Enrollment.CX509Enrollment");

            var signedCert = '-----BEGIN CERTIFICATE-----' + 
                'REMOVED FOR BREVITY' + 
                '-----END CERTIFICATE-----';

            objEnroll.Initialize(1); // User context
            objEnroll.InstallResponse(4, signedCert, 6, ""); // AllowUntrustedRoot = 4

            alert('Certificate installed');
        }
        catch (ex)
        {
            alert('Unable to install certificate: ' + ex.description);
        }
     }

    InstallCert();
</script>

Ahora, es cierto que el certificado raíz no es de confianza, pero yo estoy llamando InstallResponse con el primer conjunto de parámetros a 4, que se supone para permitir la instalación incluso si el certificado raíz no es de confianza. Este funciona como se anuncia en Vista, pero no parece que en Windows 7.

He probado, y funciona si se confía en el certificado raíz. Estoy seguro de que alguien va a decir que, así que voy a adelantarse a él - los clientes confían en tener el certificado raíz no es realmente una opción para nosotros (queremos distribuir certificados de autenticación de cliente a los clientes, como parte de la autenticación de ellas en nuestra red).

¿Estoy haciendo algo mal aquí? Alguien más ha conseguido este trabajo en Windows 7?

¿Fue útil?

Solución

La solución fue instalar revisión KB 2078942 .

Tenga en cuenta que esta revisión no pretende solucionar este problema, pero lo hace! En lugar annonying, o me he encontrado mucho antes: - /

Creo que esto es un error de regresión de Vista, ya que había un revisión para Vista para solucionar el problema exacto que estaba experimentando.

Un gracias y upvote sale a Bruno para pasar tiempo de ayer tratando de ayudar a resolver esto.

Otros consejos

este script hace un tiempo para una demostración (en conjunción con esta página ). Es compatible con <keygen/> y lo sustituye por XEnroll o CertEnroll llamadas en Internet Explorer. El proyecto ha evolucionado un poco desde entonces, pero acabo de probado esta rama con IE8 en Windows 7 y funcionó. El certificado de CA no estaba en la máquina cliente en absoluto. Tenía que bajar la configuración de seguridad a 'bajo' para que se ejecute el ActiveX (de lo contrario, no sería incluso enviar la solicitud, por lo menos instalar el certificado en la respuesta).

Si eso ayuda, hago esto:

try {
    enrollObj.InstallResponse(4, xmlHttpRequest.responseText,
            0, "");
    window.alert("A certificate has been installed.");
} catch (e1) {
    try {
        enrollObj.InstallResponse(0,
                xmlHttpRequest.responseText, 0, "");
        window.alert("A certificate has been installed.");
    } catch (e2) {
        window
                .alert("You're probably using Vista without SP1 or above, in which case you need to add the certificate of this authority as a trusted root certificate.");
    }
}

He de reconocer que no lo hice prueba de cuál de estos dos casos se utilizó (ya que es el mismo mensaje de alerta).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top