Windows 2008 Server + ASP.NETでp12ファイルを読みこむとエラー
Windows 2008 Serverで、APS.NETのWebアプリよりp12ファイルを、下記のコードで読み込む。
.NET Frameworkのバージョンは4.0。
X509Certificate certificate = new X509Certificate2(System.IO.File.ReadAllBytes("p12証明書ファイルパス"), "パスワード");
すると、下記のようなエラーが発生。。
System.Security.Cryptography.CryptographicException: 内部エラーが発生しました。 場所 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) 場所 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) 場所 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) 場所 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password) ・ ・
えっと、、内部エラーっていわれても全然わからないんですけど。。
同じコードで開発環境のWindows7や、Windows 2003 Serverではこれで動いていたんだけどなー。
いろいろ調べてみると、ASP.NETのプロセスが、ユーザのキーストアにアクセスできないことが原因の模様。
下記のサイトが参考になりました。ありがとうございます!
C#: ERROR CREATING X509CERTIFICATE2 FROM A PFX OR P12 FILE IN PRODUCTION
こちらのサイトを参考に、コードを下記のように修正しました。
ユーザのキーストアではなく、ローカルコンピュータのキーストアを使用するように、X509Certificate2()の引数を追加。
X509Certificate certificate = new X509Certificate2(System.IO.File.ReadAllBytes("p12証明書ファイルパス"), "パスワード", X509KeyStorageFlags.MachineKeySet);
この修正で、無事動作するようになりました♪
だれかの参考になれば!