Frage

Wir haben eine vorhandenes Zertifikat ausstellt Anwendung (C #, ASP.NET, JavaScript), dass die Zertifikate ausstellt, um Windows XP-Benutzer mit Xenroll im Internet Explorer. Ich brauche diese zu verlängern, um Windows Vista und Windows 7 zu unterstützen, auch mit IE.

Für Vista und 7, ersetzt Microsoft das Xenroll ActiveX controll mit der neuen CertEnroll Kontrolle. Ich habe diese Arbeit in Vista SP2 bekam, aber in 7 ich diesen Fehler bei der Installation Schritt erhalten:

  

CertEnroll :: CX509Enrollment :: InstallResponse:   Eine Zertifikatskette verarbeitet, aber   in einem Wurzelzertifikat, das   wird nicht durch das Vertrauen Anbieter vertrauen.   0X800B0109 (-2146762487)

Hier ist ein Ausschnitt aus der entsprechenden HTML & 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>

Nun, es ist wahr, dass das Stammzertifikat nicht vertrauenswürdig ist, aber ich rufe InstallResponse mit dem ersten Parametersatz 4, die angeblich Installation zu ermöglichen, selbst wenn das Root-Zertifikat nicht vertrauenswürdig ist. Dies funktioniert wie in Vista beworben, aber scheint nicht in Windows 7.

I getestet und es funktioniert, wenn das Stammzertifikat vertrauenswürdig ist. Ich bin sicher, jemand wird es sagen, also werde ich es vorgreifen - mit den Kunden das Stammzertifikat vertrauen ist nicht wirklich eine Option für uns (wir wollen Client-Authentifizierungszertifikate an Kunden verteilen, als ein Teil davon zur Authentifizierung in unserem Netzwerk).

Bin ich denn hier etwas nicht in Ordnung? Hat jemand diese Arbeit in Windows 7 erhalten?

War es hilfreich?

Lösung

Die Lösung wurde installieren Hotfix KB 2078942 .

Beachten Sie, dass dieser Hotfix nicht behauptet, dieses Problem zu beheben, aber es funktioniert! Vielmehr annonying, oder ich würde über sie viel früher kommen können: - /

Ich glaube, dies ist eine Regression Fehler von Vista, da es eine war Hotfix für Vista das genaue Problem zu beheben, ich war zu erfahren.

Ein thankyou und upvote geht an Bruno out für die Zeit gestern zu verbringen, um Hilfe zu versuchen, mir dieses Problem zu beheben.

Andere Tipps

Ich schrieb dieses Skript vor einer Weile für eine Demo (in Verbindung mit Seite ). Es unterstützt <keygen/> und ersetzt sie mit XEnroll oder CertEnroll fordert Internet Explorer. Das Projekt hat sich ein wenig weiterentwickelt, da, aber ich habe gerade diesen Zweig mit IE8 getestet auf Windows 7 und es funktionierte. Das CA-Zertifikat war nicht auf dem Client-Rechner überhaupt. Ich musste die Sicherheitseinstellungen auf ‚niedrig‘ senke für den ActiveX zu laufen (sonst wäre es nicht einmal den Antrag stellen, so dass auch weniger um das Zertifikat in der Antwort installieren).

Wenn das hilft, tue ich dies:

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

Ich muß zugeben, ich habe nicht testen, welche diese beiden Fälle verwendet wurden (wie es die gleiche Alarmmeldung ist).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top