Roumeg a écrit :
Bonjour Aurélie
As-tu réussi ?
Nous avons exactement le même besoin de chiffrement asymétrique RSA
(intégration de Jitsi système de visio)
et nous n'arrivons pas à obtenir les mêmes chiffrements que leur site de
test
base64header,base64data sont des chaînes
base64header = Encode(header,encodeBASE64URL)
base64data = Encode(payloaddata,encodeBASE64URL)
base64header = ChaîneSupprime(base64header,"==")
base64data = ChaîneSupprime(base64data,"==")
bufacrypter est une Buffer = base64header +"."+ base64data
signature est un Buffer=
CrypteAsymétriqueEnveloppé(bufacrypter,"D:\MesSites26\xxxxxxxx\xxxxxxx_WEB\FR\template\key\public.pub")
signature = HashChaîne(HA_SHA3_256,signature)
signature = Encode(signature,encodeBASE64URL)
signature = ChaîneSupprime(signature,"==")
jusqu'au buffer à crypter on est bon (base64header +"."+ base64data)
mais on obtient pas la même signature
(on a essayé sans le Enveloppé avant; mais pareil)
Merci de ta réponse
Bonjour,
Oui nous avons réussi avec l'aide de PC SOFT mais notre solution n'est pas du
100% WINDEV.
En effet, dans notre projet la signature est particulière : elle se porte sur
2 références : le document métier et une balise présente dans la partie
signature du flux.
Donc il a fallu que je créé mon document métier.
Puis que je lui ajoute le bloc signature.
Puis que je fasse appelle à une librairie en ligne de commande pour avoir un
flux signé.
Si dans ton projet la signature ne se porte que sur le document métier alors
voici ce qu'il faut faire :
- déjà ton document métier ne doit comporter aucun TAB ni RC
sCheminFichierCertificat est une chaîne = "*****.pfx" // chemin complet vers
ton fichier pfx
sMotDePasseCertificat est une chaîne = "" //mot de passe du fichier pfx s'il
y en a un
////******************** test du certificat
bufTestCertif est un buffer =
CertificatSigneChaîne("test",sCheminFichierCertificat,sMotDePasseCertificat,certSignatureSeule
+certSHA256)
SI ErreurDétectée ALORS
Erreur("Certificat non valide",ErreurInfo())
RETOUR
SINON
Trace("certificat OK")
FIN
//////******************** SignatureXml est un xmlSignature //Méthode de
standardisation C14N exclusive sans commentaire
SignatureXml..AlgorithmeNormalisation = atC14NExclu
//LIMITE ACTUELLE : HMAC SHA256 non disponible
//algorithme de cryptage RSA et algorithme de hachage de type SHA 256
SignatureXml..AlgorithmeSignature = asRSA_SHA_256 //certificat
SignatureXml..TypeFichierClé = tfcPKCS12 //Type du certificat
SignatureXml..Clé = sCheminFichierCertificat
SignatureXml..MotDePasseClé = sMotDePasseCertificat
//Ce qu'il faut signer
SignatureXml..Référence[1]..URI = "#" + sGUID //identifiant de la partie
à signer préfixée de #
//et de quel façon il faut signer
SignatureXml..Référence[1]..Transformation[1] = atEnveloppée
SignatureXml..Référence[1]..Transformation[2] = atC14NExclu
SignatureXml..Référence[1]..AlgorithmeHash = HA_SHA_256
//LIMITE ACTUELLE : une des 3 informations "AvecCertificat", "AvecEmetteur"
ou "AvecNomSujet" est obligatoire
x509 est un xmlSignatureInformationCléX509 x509..AvecCertificat = Faux
x509..AvecEmetteur = Faux
x509..AvecNomSujet = Faux
SignatureXml..InformationClé [1] = x509
//Signe le XML au niveau du noeud xmlDoc.Envelope.Body.ReponseIdb
SI PAS XMLSigne(SignatureXml,xmlDoc.Envelope.Body.ReponseIdb.Signature) ALORS
Erreur("Echec de la signature",ErreurInfo(errComplet))
SINON
//Contrôle visuel
SI EnModeTest() ALORS
Trace("************************ Contrôle visuel en mode test, XML APRES
signature")
Trace(xmlDoc.ConstruitChaîne(XMLMiseEnForme))
Trace("************************")
FIN
xmlDoc.Sauve(fRepDonnées()+"destination_signee.xml")
FIN
En espérant que cela puisse t'aider
Aurélie
Merci beaucoup de ton intervention car cela semble solutionner notre
problème.
En fait cela nous a orienté vers l'utilisation de openssl en ligne de
commande pour chiffrer la signature
et il semblerait que l'on retrouve bien les bonnes valeurs
Merci encore.
--
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus