Question

Nous avons une demande de délivrance de certificat existant (C #, ASP.NET, JavaScript) délivre les certificats aux utilisateurs de Windows XP à l'aide XEnroll dans IE. Je dois étendre à Windows Vista et Windows 7 utilisateurs, en utilisant également IE.

Pour Vista et 7, Microsoft a remplacé le controll XEnroll ActiveX avec le nouveau contrôle de CertEnroll. J'ai ce travail dans Vista SP2, mais 7 je reçois cette erreur à l'étape d'installation:

  

CertEnroll :: CX509Enrollment :: InstallResponse:   Une chaîne de certificats traité, mais   terminé dans un certificat racine qui   n'est pas approuvé par le fournisseur de confiance.   0x800b0109 (-2146762487)

Voici un extrait du code HTML et JavaScript correspondant:

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

Maintenant, il est vrai que le certificat racine est pas digne de confiance, mais je vous appelle InstallResponse avec le premier jeu de paramètres à 4, qui est censé permettre l'installation même si le certificat racine n'est pas digne de confiance. Cela fonctionne comme annoncé dans Vista, mais ne semble pas dans Windows 7.

J'ai testé, et il fonctionne si le certificat racine est digne de confiance. Je suis sûr que quelqu'un va dire, donc je vais préempter - avoir les clients font confiance au certificat racine est pas vraiment une option pour nous (nous voulons distribuer des certificats d'authentification client aux clients, comme une partie d'entre eux l'authentification sur notre réseau).

Ai-je fait quelque chose de mal ici? Est-ce que quelqu'un d'autre a obtenu ce travail dans Windows 7?

Était-ce utile?

La solution

La solution a consisté à installer correctif KB 2078942 .

Notez que ce correctif ne prétend pas résoudre ce problème, mais il le fait! Plutôt annonying, ou je suis tombé beaucoup plus tôt: - /

Je crois que c'est un bug de régression de Vista, car il y avait un correctif pour Vista pour résoudre le problème exact que je ressentais.

A et upvote thankyou va à Bruno pour passer hier temps à essayer de me aider à résoudre cela.

Autres conseils

J'ai écrit ce script il y a quelques temps pour une démonstration (en collaboration avec cette page ). Il prend en charge <keygen/> et le remplace par XEnroll ou CertEnroll sur les appels Internet Explorer. Le projet a évolué un peu depuis, mais je viens de tester cette branche avec IE8 sur Windows 7 et cela a fonctionné. Le certificat de CA n'a pas été sur la machine cliente du tout. Je devais réduire les paramètres de sécurité à « faible » pour l'exécuter l'ActiveX (sinon, il ne serait pas même soumettre la demande, donc encore moins installer le certificat dans la réponse).

Si cela aide, je fais ceci:

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

Je dois admettre que je n'ai pas testé lequel de ces deux cas a été utilisé (comme il est le même message d'alerte).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top