1

IEでXenRollを使用してWindowsXPユーザーに証明書を発行する既存の証明書発行アプリケーション(C#、ASP.NET、JavaScript)があります。これを拡張して、WindowsVistaおよびWindows7ユーザーをサポートし、IEも使用する必要があります。

Vistaおよび7の場合、MicrosoftはXenRollActiveXコントロールを新しいCertEnrollコントロールに置き換えました。これはVistaSP2で機能しますが、7ではインストール手順で次のエラーが発生します。

CertEnroll :: CX509Enrollment :: InstallResponse:証明書チェーンは処理されましたが、信頼プロバイダーによって信頼されていないルート証明書で終了しました。0x800b0109(-2146762487)

関連する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>

これで、ルート証明書が信頼されていないのは事実ですが、最初のパラメーターを4に設定してInstallResponseを呼び出しています。これにより、ルート証明書が信頼されていない場合でもインストールが可能になります。これはVistaで宣伝されているように機能しますが、Windows7では機能しないようです。

テストしましたが、ルート証明書が信頼されている場合は機能します。誰かがそれを言うと確信しているので、私はそれを先取りします-クライアントにルート証明書を信頼させることは私たちにとって実際にはオプションではありません(私たちは顧客を認証する一環として、クライアント認証証明書を顧客に配布したいと思っています私たちのネットワーク上)。

私はここで何か間違ったことをしていますか?他の誰かがこれをWindows7で動作させましたか?

4

2 に答える 2

2

解決策は、修正プログラム KB 2078942をインストールすることでした。

このホットフィックスは、この問題を修正するとは主張していませんが、修正していることに注意してください。むしろ迷惑です、または私はもっと早くそれに出くわしたでしょう:-/

私が経験していた正確な問題を修正するための Vista 用のホットフィックスがあったため、これは Vista からのリグレッション バグだと思います。

昨日、私がこれを解決するのを手伝ってくれて時間を割いてくれたブルーノに感謝と賛成票を投じます。

于 2010-09-03T14:31:06.027 に答える
1

このスクリプトは、少し前にデモ用に書きました (このページと合わせて)。Internet ExplorerでのXEnrollまたはCertEnroll呼び出しをサポートし<keygen/>、置き換えます。それ以来、プロジェクトは少し進化しましたが、Windows 7 上の IE8 でこのブランチをテストしたところ、うまくいきました。CA 証明書がクライアント マシンにまったくありませんでした。ActiveX を実行するには、セキュリティ設定を「低」に下げる必要がありました (そうしないと、要求を送信することすらできないため、応答で証明書をインストールすることはさらに少なくなります)。

それが役立つ場合、私はこれを行います:

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

これら 2 つのケースのどちらが使用されたかをテストしていないことを認めなければなりません (同じ警告メッセージであるため)。

于 2010-09-02T16:25:06.587 に答える