Nous avons écrit un système de gestion de documents et souhaiterions signer numériquement des documents à l'aide du client Web. Notre application client Java est déjà capable d'appliquer et de vérifier la signature numérique, mais nous souhaitons faire de la signature même avec notre client Web. Ceci est écrit dans GWT et donc, lorsque vous exécutez le côté client, il s'agit d'une application JavaScript. P>
Nous ne voulons pas créer d'applet Java et nous la téléchargez sur le client et l'exécuter. Nous souhaitons utiliser le périphérique de sécurité du navigateur ou l'API du navigateur afin de signer un document. Nous aimerions également conserver le côté du serveur de documents complet et passer au client uniquement le documentaire hachage. P>
Nous estimons que cela devrait être possible en utilisant Avez-vous des indices? P>
5 Réponses :
Après plus d'autres googling, j'ai trouvé la réponse. Mozilla exporte une partie de son module NSS via objet.crypto objet. Une manière plus standard de faire une telle opération est probablement via Domcrypt , qui est actuellement Discutez dans W3C . Google Chrome Developer attendra W3C de normaliser DomCrypt, tandis que Microsoft nécessite l'utilisation d'un objet ActiveX Comme expliqué ici (cela fonctionne même avec Firefox / chrome / opéra sous Windows). P>
Decrypt Link n'est pas ce qu'il est censé être.
Merci @ares, le DNS DomCrypt.org semble être affecté à un propriétaire différent maintenant. J'ai changé le lien vers une autre page avec un contenu très similaire.
Window.Crypto n'était pas Supprimé après Firefox 33?
La meilleure façon de réaliser aujourd'hui est d'utiliser une extension de navigateur pouvant accéder à la certification locale. Signer.Digital Chrome Extension est une telle extension gratuite fournie par mon entreprise.
Dans Win / Ie, vous pouvez toujours utiliser CAPICOM http://fr.wikipedia.org/wiki/ CAPICOM sans aucune tierce partie ActiveX ou Bibliothèques externes.
Cela fonctionne n'importe où IE est installé.
Ceci est en cours de retraite.
ci-dessous est ce que j'utilise pour vous connecter. J'appelle ceci avec par exemple: var Signature = SignDigest (StringTobesigned); Code> P>
byte[] decbuff = Convert.FromBase64String(signature);
//CAPICOM USES 16 BIT ENCODING
Encoding utf16Enc = Encoding.GetEncoding("UTF-16LE");
byte[] utf16Data = utf16Enc.GetBytes(getContent);
ContentInfo content = new ContentInfo(utf16Data);
System.Security.Cryptography.Pkcs.SignedCms cms = new System.Security.Cryptography.Pkcs.SignedCms(content,true);
cms.Decode(decbuff);
int length = decbuff.Length;
X509Certificate2 cert = cms.SignerInfos[0].Certificate;
X509Chain chain = new X509Chain();
bool theVal = chain.Build(cert);
cms.CheckHash();
cms.CheckSignature(false);
J'utilise également Capicom pour signer XML avec X509Certificate2 signe. Lorsque je choisis un certificat du magasin, cela ne me demande pas après cela pour saisir le nom d'utilisateur et le mot de passe pour ce certificat. Est-ce la même situation et avec votre code ci-dessus?
Parfois, parfois si elle est «gâchée» - je ferme le navigateur, ouverte et demande des informations d'identification. Je reçois de temps en temps un point où il cesse de demander, mais de recharger le navigateur semble toujours résoudre ce problème.
Vous pouvez maintenant faire cela. Application Web basée sur les cartes à puce ou les jetons N ° 11 de PKCS # 11 peut être mise en œuvre à l'aide de la version Silverlight de NCRYPTOKI. Voir http://www.ncryptoki.com p>
Vous avez deux châtres: p>
1) Utilisation de la version Silverlight de NCryptoki et développez votre propre commande d'utilisateur Silverlight qui implémente votre logique, une signature numérique dans votre cas, à l'aide des fonctions PKCS # 11 fournies par la carte à puce p>
2) Utilisation du plug-in JQuery basé sur la version ci-dessus Silverlight et implémentez votre application en JavaScript en appelant les fonctions PKCS n ° 11 dans JavaScript P>
En outre, vous pouvez utiliser la version Silverlight de NDigitsign (voir à nouveau http://www.ncryptoki.com ) Cela fait tout ce dont vous avez besoin et peut être mis en œuvre dans n'importe quel navigateur Web. P>
Merci de pointer sur cette solution. Je n'étais pas au courant du projet NCryptoki, mais comme il est basé sur Silverlight, il est toujours nécessaire d'installer le logiciel sur la machine client (comme pour l'applet Java) et, plus important, il ne fonctionnerait probablement que sur les machines Windows. Enfin, cela nécessiterait d'écrire une application qui utilise directement PKCS n ° 11 et j'aimerais vraiment éviter ce programme.
Actuellement (mai 2016), il n'est pas possible. p>
Chrome a abandonné le support Java. 'Windows Edge' n'aura pas. Le support IE11 est mauvais et Oracle a décidé d'interrompre le plugin Java. Il ne serait possible que avec Firefox, des versions plus anciennes d'IE et du plugin Java. P>
La nouvelle norme WebCryptographyAPI fournit un support de signature numérique pour les navigateurs, mais il ne dispose pas de PCKS # 11 Support P>
Une vraie solution e-gouvernance pour résoudre ce problème: 1) Installez une application Java locale sur le PC de l'utilisateur. L'application écoute sur un port comme par exemple 5678 2) Dans votre page, JavaScript détecte s'il existe une prise en charge des applets 3) S'il n'y a pas de support, connectez-vous à l'application dans le formulaire http: //127.0.01: 5678 / signe < / a> et envoie les données à signer. 4) L'application est locale et n'a aucun problème à l'aide du système de clés de système d'exploitation, qui comprend des pilotes PKCS # 11. Faites de la signature numérique et prépare le résultat 5) Page JavaScript interroge périodiquement le résultat et la récupère lorsque vous êtes prêt p>
Les applets Java peuvent être lancés via Java Web Start. Cela fonctionne dans tous les navigateurs de bureau, bien que certains efforts supplémentaires soient nécessaires.
Il existe une solution en Espagne dans le gouvernement électronique pour résoudre ce problème. Je vais le documenter dans la réponse
Un projet que j'ai participé à cela avec le chrome et la messagerie natale: p>
https://github.com/cacbridge/chromecac P>
Cela nécessite l'installation du plugin chrome, mais cela fonctionne autrement bien. Idéal pour par exemple Les environnements intranet / groupe où vous savez que vous aurez besoin de le faire à l'avance. P>
Utilisez des extensions de navigateur pour les navigateurs modernes. Veuillez vous reporter Stackoverflow.com/a/55676351/9659885 et Stackoverflow.com/a/55692742/9659885