2016-11-10 51 views
1

現在我上傳.pfx文件,同時在密碼和通話Azure的Web應用程序的新X509Certificate2()導致System.Security.Cryptography.CryptographicException:拒絕訪問

var cert = new X509Certificate2(fileData, password); 

和存儲的東西,如指紋等等。我不需要實際存儲它在服務器上,只是驗證它是一個有效的證書並存儲一些信息。在當地這工作(很明顯,我有我的密鑰存儲更好的訪問),但是當我把它在蔚藍我得到的錯誤:

System.Security.Cryptography.CryptographicException: Access denied.

有什麼辦法來獲取這些信息迴避這或使用該方法沒有獲得拒絕訪問?我對證書不太瞭解,所以如果您需要更多信息,請告訴我。謝謝。

回答

2

在Windows上打開PFX時,會將任何私鑰寫入磁盤。它們將在稍後被刪除(除非您指定了PersistKeySet),但它們仍然必須被寫入(ish)。

他們在哪寫的?

  • 如果您指定X509KeyStorageFlags.MachineKeySet:在機器密鑰庫中,您需要是管理員。
  • 如果指定X509KeyStorageFlags.UserKeySet:在用戶密鑰庫中,您的用戶配置文件可能需要存在/加載。
  • 如果沒有指定:
    • 如果PFX 本身已編碼的關鍵在機器按鍵所屬(需要管理員)然後機器密鑰庫。
    • 否則用戶密鑰庫(可能需要配置文件)。

鑑於「拒絕訪問」我猜你打在PFX本身指定的機器密鑰庫的情況下,要解決這個你你的電話改變

new X509Certificate2(fileData, password, X509KeyStorageFlags.UserKeySet)

和一切應該工作。如果您指定UserKeySet並仍然出現錯誤,則可能是配置文件加載問題。

There is加載PFX而不將私鑰寫入磁盤但在.NET Framework中不可用的選項(雖然它最近已添加到.NET Core中)。如果你真的需要它,你可以看看PFXImportCertStorePFXImportCertStorePKCS12_NO_PERSIST_KEY標誌,然後將產生的HCERTSTORE值傳遞到X509Store.ctor(IntPtr)並通過X509Store.Certificates屬性讀取您的證書。但是,請注意,大多數.NET Framework不會理解這些證書對象具有關聯的私鑰,因此它們可能僅表現爲公共證書對象。

+0

太簡單了!很好的解釋,謝謝! – naspinski

相關問題