簡體   English   中英

Azure Web應用程序新X509Certificate2()導致System.Security.Cryptography.CryptographicException:訪問被拒絕

[英]Azure Web Application new X509Certificate2() causing System.Security.Cryptography.CryptographicException: Access denied

現在我上傳一個.pfx文件,輸入密碼並打電話

var cert = new X509Certificate2(fileData, password);

並存儲指紋等內容。我不需要將其實際存儲在服務器上,只需驗證它是否是有效的證書並存儲一些信息。 在本地這個工作(顯然我有更好的訪問我的密鑰庫)但是當我把它放在天藍色時我得到錯誤:

System.Security.Cryptography.CryptographicException:拒絕訪問。

有沒有辦法讓這些信息回避這個或使用這種方法而不會被拒絕訪問? 我對證書不是很了解,所以如果您需要更多信息請告訴我。 謝謝。

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

他們在哪里寫的?

  • 如果指定X509KeyStorageFlags.MachineKeySet :在計算機密鑰庫中,您需要是管理員。
  • 如果指定X509KeyStorageFlags.UserKeySet :在用戶密鑰庫中,您的用戶配置文件可能需要存在/加載。
  • 如果您未指定:
    • 如果PFX 本身編碼了密鑰屬於機器密鑰集,那么機器密鑰庫(需要管理員)。
    • 否則用戶密鑰庫(可能需要配置文件)。

鑒於“拒絕訪問”,我猜你會遇到PFX本身指定機器密鑰庫的情況,為了解決這個問題你要改變你的呼叫

new X509Certificate2(fileData, password, X509KeyStorageFlags.UserKeySet)

一切都應該有效。 如果您指定UserKeySet並仍然收到錯誤,那可能是配置文件加載問題。

可以選擇在不將私鑰寫入磁盤的情況下加載PFX,但它在.NET Framework中不可用(盡管最近已添加到.NET Core中)。 如果您確實需要它,可以查看p /使用PKCS12_NO_PERSIST_KEY標志調用PFXImportCertStore ,然后將生成的HCERTSTORE值傳遞給X509Store.ctor(IntPtr)並通過X509Store.Certificates屬性讀取您的證書。 但請注意,大多數.NET Framework都不會理解這些證書對象具有關聯的私鑰,因此它們可能只會作為公共證書對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM