Я использую PackageDigitalSignatureManager для подписания Zip-файла и его содержимого. Мой код работает отлично, пока я не обновлен до .Net 4.6.2 вдруг я получаю следующее expection:RSACryptoServiceProvider «Ключ не существует» на .Net 4.6.2
System.Security.Cryptography.CryptographicException: Key does not exist
bei System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
bei System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
bei System.Security.Cryptography.RSACryptoServiceProvider.SignHash(Byte[] rgbHash, Int32 calgHash)
bei System.Security.Cryptography.RSAPKCS1SignatureFormatter.CreateSignature(Byte[] rgbHash)
bei System.Security.Cryptography.AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm hash)
bei System.Security.Cryptography.Xml.SignedXml.ComputeSignature()
bei MS.Internal.IO.Packaging.XmlDigitalSignatureProcessor.Sign(IEnumerable`1 parts, IEnumerable`1 relationshipSelectors, X509Certificate2 signer, String signatureId, Boolean embedCertificate, IEnumerable`1 signatureObjects, IEnumerable`1 objectReferences)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors, String signatureId, IEnumerable`1 signatureObjects, IEnumerable`1 objectReferences)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors, String signatureId)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors)
Сертификат и секретный ключ я использую, а также подписи кода я использую не изменился в все в последние месяцы. Единственное изменение - это переход на .Net 4.6.2.
Я не был уверен, что произошло до тех пор, пока я не нашел эту статью: https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/ Они упоминают изменение сертификата и код подписи, но я не уверен, что именно сломалось.
Есть ли у кого-нибудь идеи, как я могу это исправить? Может ли быть способ запуска моего приложения обратно совместимым способом?
Я не думаю, что у вас есть минимальный репро? Это обновление должно исключать исключения, а не добавлять их ... – bartonjs
Это то, о чем думает, но это не похоже на то, по крайней мере, в моем случае использования. В настоящее время код полностью поддерживается с другим кодом, который я не могу дать, я попытаюсь отделить его больше в ближайшие дни. – Bluuu