Domanda

Abbiamo un programma certificato di emissione esistente (C #, ASP.NET, JavaScript) che emette i certificati per gli utenti di Windows XP utilizzando Xenroll in IE. Ho bisogno di estendere questo per supportare Windows Vista e Windows 7 gli utenti, anche utilizzando IE.

Per Vista e 7, Microsoft ha sostituito il controll Xenroll ActiveX con il nuovo controllo CertEnroll. Ho questo lavoro in Vista SP2, ma in 7 ottengo questo errore nella fase di installazione:

  

CertEnroll :: :: CX509Enrollment InstallResponse:   Una catena certificati elaborata, ma   terminata in un certificato radice che   non è affidabile dal provider di fiducia.   0x800B0109 (-2.146,762487 millions)

Ecco un frammento del relativo codice HTML e JavaScript:

<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>

Ora, è vero che il certificato principale non è attendibile, ma sto chiamando InstallResponse con il primo set di parametri a 4, che dovrebbe consentire l'installazione anche se il certificato di origine non è attendibile. Questo funziona come pubblicizzato in Vista, ma non sembra in Windows 7.

ho provato e funziona se il certificato di origine è attendibile. Sono sicuro che qualcuno dirà che, quindi mi anticipare che - viste le clienti si fidano del certificato principale non è realmente un'opzione per noi (noi vogliamo distribuire i certificati di autenticazione del client per i clienti, come una parte della loro autenticazione sulla nostra rete).

sto facendo qualcosa di sbagliato qui? Qualcun altro ha ottenuto questo lavoro in Windows 7?

È stato utile?

Soluzione

La soluzione era quella di installare hotfix KB 2.078.942 .

Si noti che questa correzione non pretende di risolvere il problema, ma lo fa! Piuttosto annonying, o avrei incontrato molto prima: - /

Credo che questo sia un bug di regressione da Vista, come c'era un hotfix per Vista per risolvere il problema esatto che stavo vivendo.

Un ringraziamento e upvote va a Bruno per passare il tempo di ieri cercando di aiuto a risolvere questo.

Altri suggerimenti

questo script qualche tempo fa per una demo (in combinazione con questa pagina ). Supporta <keygen/> e lo sostituisce con XEnroll o CertEnroll chiamate su Internet Explorer. Il progetto si è evoluto un po 'perché, ma ho appena testato questo ramo con IE8 su Windows 7 e ha funzionato. Il certificato CA non era sulla macchina client a tutti. Ho dovuto abbassare le impostazioni di sicurezza a 'basso' per l'esecuzione ActiveX (in caso contrario, non sarebbe nemmeno inviare la richiesta, quindi, anche meno installare il certificato nella risposta).

Se questo aiuta, faccio questo:

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.");
    }
}

Devo ammettere che non ho prova di quale di questi due casi è stato utilizzato (come è lo stesso messaggio di avviso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top