1

我們有一個現有的證書頒發應用程序(C#,ASP.NET,JavaScript),它向在IE中使用XenRoll的Windows XP用戶頒發證書。我需要擴展它以支持Windows Vista和Windows 7用戶,也使用IE。無法使用CertEnroll在Windows 7上安裝證書

對於Vista和7,Microsoft使用新的CertEnroll控件替換了XenRoll ActiveX控件1。我有在Vista SP2這個工作,但在我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> 

現在,它是真實的根證書不被信任,但我打電話InstallResponse與第一參數設置爲4,即使根證書不受信任也應允許安裝。這在Vista中廣告,但在Windows 7似乎並沒有。

我測試過,如果根證書是可信的,它確實有效。我確信有人會這樣說,所以我會搶先一步 - 讓客戶信任根證書對我們來說不是一個真正的選擇(我們想要將客戶端身份驗證證書分發給客戶,作爲驗證它們的一部分在我們的網絡上)。

我在這裏做錯了什麼?其他人有沒有在Windows 7中工作?

回答

2

解決方案是安裝hotfix KB 2078942

請注意,此修補程序不聲稱修復此問題,但它確實!相當annonying,或者我會碰到它早得多: -/

我相信這是從Vista的迴歸bug,因爲有一個hotfix爲Vista來解決我遇到的確切問題。

感謝和upvote出去布魯諾花時間昨天試圖幫助我解決這個問題。

1

前一段時間我寫了this script進行演示(連同this page)。它支持<keygen/>並將其替換爲XEnrollCertEnroll Internet Explorer上的調用。該項目已經發展了一段時間,但是我剛剛在Windows 7上測試了帶有IE8的this branch並且它工作正常。 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."); 
    } 
} 

我必須承認,我沒有測試它的這兩種情況下使用(因爲它是相同的警報消息)。

+0

我對ActiveX設置沒有問題 - 如果您通過HTTPS運行CertEnroll,您將無法獲得該設置。 – Cocowalla 2010-09-02 16:32:20

+0

的確,我今天只是在一個簡單的HTTP測試服務器上運行它。 – Bruno 2010-09-02 16:36:34

+0

我剛剛檢查過,它是第一個爲我工作的'enrollObj.InstallResponse(4,xmlHttpRequest.responseText,0,「」);'也許在初始化的其餘部分有其他內容。 (對不起,我現在不記得所有的細節。) – Bruno 2010-09-02 16:40:29