2017-08-07 93 views
0

我有嘗試使用X509Certificate2證書籤署XML文檔的一些代碼:CryptographicException「簽名密鑰未加載」

 byte[] bytes = Convert.FromBase64String(_loginDetails.CertificateAsString); 

     X509Certificate2 cert = new X509Certificate2(bytes, _loginDetails.CertKey, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); 
     Reference reference = new Reference("#MsgBody"); 

     XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); 
     reference.AddTransform(env); 

     SignedXml signedXml = new SignedXml(doc); 
     signedXml.AddReference(reference); 
     RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey; 
     signedXml.SigningKey = rsaKey; 
     signedXml.ComputeSignature(); 

     // Get the XML representation of the signature and add to the SOAP Header 
     XmlElement xmlDigitalSignature = signedXml.GetXml(); 
     ... 

這在8個不同的客戶機和我自己的機器上的代碼的工作,但我們有1個客戶是得到錯誤:

​​3210

我已經得到了從客戶證書和密碼的副本,它在我的開發機器上正確簽署沒有任何錯誤。

有沒有人有更深入的瞭解,爲什麼這可能會失敗?證書和密碼都是正確的,並且僅在客戶服務器上失敗。 我們使用.NET 4.5

+0

環境問題。棘手的調試,因爲我不能重現。尋找差異。 Windows版本/權限/根證書/等。 –

回答

0

「解決方案」是在機器上以管理員身份運行我們的付款附加組件。 由於代碼的其餘部分無需管理員權限就可以運行,因此並不理想,但我還沒有發現任何其他解決方案。