Azure Websites のサイトが X509Certificate2 の処理に失敗する 質問する

Azure Websites のサイトが X509Certificate2 の処理に失敗する 質問する

Azure Websites (ホスト サービスではない) にサイトがあり、そこで秘密キーを使用して .pfx 証明書を処理する必要があります。

var x509Certificate2 = new X509Certificate2(certificate, password);

しかし、次のような例外に直面しました。

System.Security.Cryptography.CryptographicException: The system cannot find the file specified.

   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)

記事中http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/デフォルトでは、システムがユーザーのローカル ディレクトリを使用してキーを保存するため、この問題が発生することがわかりました。ただし、Azure Websites にはローカル ユーザー プロファイル ディレクトリがありません。同じ記事で、著者はX509KeyStorageFlags.MachineKeySetフラグの使用を提案しています。

var x509Certificate2 = new X509Certificate2(certificate, password, X509KeyStorageFlags.MachineKeySet);

しかし、今は別の例外があります:

System.Security.Cryptography.CryptographicException: Access denied.

   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags)

なぜこのようなことが起こるのか、またどうすれば修正できるのか、誰か教えてくれませんか?

ベストアンサー1

回避策を見つけたと思いますが、他の人もこれに苦労している場合は、別の SO の質問で答えを見つけました:

PKCS#12 バイト配列から X509Certificate2 を構築すると、CryptographicException("指定されたファイルが見つかりません。") がスローされるのはなぜですか?

魔法は、X509KeyStorageFlags ストレージ フラグを指定することです。例:

var myCertificae = new X509Certificate2(
    certificateData,
    securePasswordString,
    X509KeyStorageFlags.MachineKeySet | 
    X509KeyStorageFlags.PersistKeySet | 
    X509KeyStorageFlags.Exportable);

おすすめ記事