2010-01-20 54 views
7

我正嘗試在Rackspace Cloud內的ASP.NET Web服務中使用X509Certificate。我有一種感覺,雲節點上存儲的證書可能會導致問題。我也有與此相關的與異常的問題,我在SslStream.AuthenticateAsClient Exception when using iPhone Apple Push Notification Provider (apns-sharp) C#我可以在不使用證書存儲的情況下在ASP.NET中使用X509Certificate2嗎?

接收內APNS鋒利的項目,我用的是下面的代碼:

certificate = new X509Certificate2(p12File) 

但是我收到一個異常,更改代碼以下解決了X509Certificate2異常。新代碼如下:

certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet); 

我想知道我是否可以使用在ASP.NET中的X509Certificate2不使用證書存儲?存儲證書會導致Rackspace Cloud節點出現問題嗎?

更新#1 Rackspace告訴我,不允許訪問本地計算機證書存儲區。有沒有其他方法可以繞過使用證書存儲?也許使用第三方庫?

回答

4

第一個構造函數不起作用的原因是ASP.NET不加載用戶配置文件存儲區,如果您未使用X509KeyStorageFlags指定存儲位置,則該用戶配置文件存儲區是默認存儲區。但是,機器存儲始終由ASP.NET加載,這就是第二個構造函數工作的原因。

我假設你打算使用證書上的私鑰加密或創建數字簽名(哈希),在這種情況下,您無法避免使用證書存儲,因爲私鑰只能以編程方式從私鑰訪問導入的證書,而不是直接來自斑點或文件。

如果證書數據只包含公鑰,我不認爲使用證書存儲(因爲沒有敏感數據可以保護) - 我注意到,我只需要指定機器商店,當我打算處理包含私鑰的證書。

雖然我不能評論Rackspace的情況,但在部分信任環境中運行的代碼中導入證書可能存在問題,因爲加載私鑰容器需要特定的權限,而這些權限可能不會授予您的程序集。

+0

好的,謝謝。我假設該證書包含私鑰,因爲這用於Apple iPhone推送通知服務。您能否提供更多詳細信息:「在部分信任環境中運行的代碼中導入證書可能存在問題,因爲加載私鑰容器需要特定的權限,而這些權限可能不會授予您的程序集。」? – Luke 2010-01-20 06:17:17

+1

另外,我在我的開發人員服務器上運行代碼,使用Rackspace在http://cloudsites.rackspacecloud.com/index.php/Overview_of_modified_Medium_Trust底部使用的相同的修改後的介質信任文件,我沒有收到任何例外情況開發。服務器。 – Luke 2010-01-20 06:18:18

1

我已經從文件導入的X509Certificate2並同時具有使用此代碼私人提供和公鑰:

  X509Certificate2 cert = new X509Certificate2(); 
      // Key Location: the physical file location (C:\cert.pfx) 
      // Key Password: the password for the certificate 
      cert.Import(keyLocation, keyPassword, X509KeyStorageFlags.Exportable); 

我的經驗是,關鍵有它的工作是X509KeyStorageFlags.Exportable。沒有這個,我無法訪問私鑰。

相關問題