轉載:http://www.cnblogs.com/jys509/p/4499978.html
在呼叫RSA加密的.pfx金鑰時,在本地除錯沒有問題,可以佈署到伺服器,就會報以下的錯誤:
使用者程式碼未處理 System.Security.Cryptography.CryptographicException
HResult=-2146893792
Message=出現了內部錯誤。
Source=mscorlib
StackTrace:
在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
在 xxxxx.API.Tools.RSA.Sign(String data, String keyPath, String keyPasswd)
在 xxxxx.API.Tools.Encrypt.signANDencrypt(MsgBean req_bean)
在 xxxxx.API.xxxxx.GetBankCardInfo(String orderId, String cardNo)
在 xxxxx.GetBankCardInfo(GetBankCardInfoReq request) 位置 d:\app_service\WHTR_SOA\WHTR.SOA.Services\OnlinePay\Yilian\OnlinePayService.cs:行號 108
在 Castle.Proxies.Invocations.xxxxx.InvokeMethodOnTarget()
在 Castle.DynamicProxy.AbstractInvocation.Proceed()
在 xxxxx.CastleMethodInvocation.Proceed() 位置 d:\xxxxx.cs:行號 80
在 xxxxx.Intercept(IMethodInvocation invocation) 位置 d:\xxxxx.cs:行號 56
InnerException:
處理方法:
IIS 應用程式池--選中你網站的所配置的應用程式池--右鍵 選擇 “高階配置” --將“載入使用者配置檔案” 設定為True 。問題解決
3.如果以上兩個方案都不能解決問題,就有可能是載入證書時沒有給定證書儲存標識
解決方法:在載入證書方法時使用以下方法,請注意第三個引數
X509Certificate2 cer = new X509Certificate2(cerPath, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
req.ClientCertificates.Add(cer);