部署時,出現使用者程式碼未處理 System.Security.Cryptography.CryptographicException 錯誤解決方法

FrankYou發表於2016-04-05

轉載: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);

 

相關文章