Utilisation de VS 2008 avec .NET Framework 3.5 sur le serveur Windows 2003.
Nous avons mis en œuvre SSO avec SAML pour la sécurité. Nous travaillons à la fin du fournisseur de services où nous validons le jeton XML SAML SAML SAML signé généré à partir du système du client.
Dès maintenant les documents signés que nous avons rencontrés utilisaient l'algorithme de signature "RSA-SHA1", mais nous avons maintenant un nouveau client qui envoie un fichier avec l'algorithme de signature comme "RSA-SHA256" et voici le problème démarré. P > maintenant, lorsque j'essaie le même code pour ce nouveau client (avec algorithme de signature RSA-SHA256H) - cela ne fonctionne pas et je reçois l'erreur "SignatureDescription n'a pas pu être créée pour L'algorithme de signature fournie. " P> passer par de nombreux blogs et articles au cours des 2-3 derniers jours, je suis venu savoir que SignatureXML ne prend pas en charge SHA256. Amende. Mais quoi ensuite. Quelque part, il a été mentionné que l'utilisation du WIF, j'ai également vérifié et essayé . P> J'essaie également d'utiliser la méthode VerifYSignature de RSAPKCS1Signaturée. Mais pas vraiment sûr quels sont les deux paramètres à transmettre. P> p>
4 Réponses :
Ceci se qualifie pour "Simple" mais peut-être pas "solution" :) Pour les quelques clients que nous avons rencontrés, nous leur avons demandé de changer de PDI pour signer à l'aide de SHA-1. Ils sont capables de le changer et quand ils le font ça marche. p>
Pas une solution technique, mais cela a travaillé "sur le terrain" alors je pensais que je le mentionnerais. P>
J'ai eu des clients refusés de faire ce changement, soupir.
pour .NET 4 et plus tôt, J'ai constaté que les travaux suivants une fois que vous avez ajouté le Security.Cryptography de http://clrsecurity.codeplex.com/
(Remarque X509CertificateFinder est le mien, recherche le certificat de signature dans le magasin de certificats par empreinte) p>
Notez qu'à partir de .NET 4.5, vous n'avez pas besoin d'installer des bibliothèques tierces de 3e parties, contrairement à .NET 4.0 et antérieure. Vous pouvez simplement ajouter une référence à System.Deploiement et appelez System.security.Cryptography.cryptoconfig.addalgorithme (RSAPKCS1Sha256SignaturéesDescription), RSASHA256NAMESPACE); CODE> Une fois dans votre processus, après quoi le code dans le code. Question originale fonctionnera avec SHA256 HASHES. Voir aussi blogs.msdn. COM / B / WINSDK / Archive / 2015/11/15 / ...
`const string rsha256namespace =" w3.org/2001/04/xmldsig- plus # RSA-SHA256 ";`
dotnet 4.6.2+ a le plus récent Ensuite, vous devez activer ces descriptions de SIG en appelant le code comme celui-ci. Il vous suffit de l'appeler une fois, vous pouvez donc l'appeler à partir d'un constructeur statique si vous le souhaitez. P> SHA code> HASHES intégré. Pour DotNet 4 +, pour accéder à RSA-SHA512, RSA-SHA384 et RSA-SHA256, vous devez inclure ce code. quelque part.
CryptoConfig.AddAlgorithm(typeof(RsaPkCs1Sha512SignatureDescription),
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512");
CryptoConfig.AddAlgorithm(typeof(RsaPkCs1Sha384SignatureDescription),
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha384");
CryptoConfig.AddAlgorithm(typeof(RsaPkCs1Sha256SignatureDescription),
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
.... et ..... Framework 4.6.2 prend en charge ce problème sans avoir besoin de code supplémentaire.
@Olliejones - Vous savez-vous si votre code se cassera ultérieurement et ultérieur à la cible 4.6.2?
@Stephang j'ai fait le déménagement à 4.6.1 sans problèmes. Je comprends que ce code n'est plus nécessaire en 4.6.2, car ils ont ajouté les nouveaux hachages. Voir la section X509 de blogs.msdn.microsoft.com/dotnet/2016/08/02/... . Je n'ai pas vérifié ce fait.
Il suffit de le mettre à jour sur .NET Framework 4.6.01590 ou supérieur et il prend en charge la SHA-512 sans aucun changement de code. P>
J'avais l'impression que l'algorithme de cryptage était soutenu car il prend en charge l'objet X509Certificate2. La méthode Sig.CheckSignature (...) a une surcharge qui prend 2 paramètres, le X509Certificate2 et Bool. Avez-vous essayé de l'utiliser et de passer dans le cert et le vrai?