2009-09-23 4 views
0

Reposant de http://www.mentalis.org/forum/thread.qpx/971 parce que j'ai besoin d'une réponse. J'espère que vous pourrez m'aider.CryptographicException: Impossible d'acquérir le contexte du fournisseur de services de cryptage

Le composant en question est Org.Mentalis.SecurityServices.dll.


Salut à tous. J'ai des problèmes.

CryptographicException: Impossible d'acquérir le contexte du fournisseur de services de chiffrement.

StackTrace:

at Org.Mentalis.SecurityServices.Cryptography.CryptoHandle.CreateInternalHandle(IntPtr handle, String container) 
at ORG.Mentalis.SecurityServices.Cryptography.CryptoHandle.get_Handle() 
at Org.Mentalis.SecurityServices.Cryptography.RC4CryptoServiceProvider.ctor() 
at <place in my app where I try to create the RC4 CryptoServiceProvider> 

je devais copier cette trace d'exception à la main, à partir d'une capture d'écran qui m'a été envoyé par un client. Essentiellement, j'ai créé une application .NET 3.5 WinForms pour XP qui utilise RC4CryptoServiceProvider pour charger les détails d'utilisateur cryptés à partir d'un fichier .ini au démarrage. Ça a bien fonctionné pendant des mois.

Il ya environ une semaine, j'ai reçu ce message d'exception sur mon ordinateur. J'ai fait de la chasse en ligne, mais je n'ai pas trouvé grand-chose - tout ce que j'ai trouvé était lié à des sites Web.

J'ai finalement trébuché sur une solution de contournement qui a fait fonctionner les choses sur mon ordinateur. Quand je supprimé les fichiers des trois dossiers suivants:

C: \ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys \

C: \ Documents and Settings \ All Users \ application Data \ Microsoft \ Crypto \ RSA \ jeton \

C: \ Documents and Settings \ my_username \ application Data \ Microsoft \ Crypto \ RSA \ jeton \

Le problème a disparu. Les dossiers ont été remplis avec de nouvelles informations la prochaine fois que j'ai exécuté l'application. Je pensais que c'était juste quelque chose d'unique à mon propre environnement de développement - que j'avais téléchargé quelque chose d'étrange qui corrompait mes fichiers et dossiers cryptographiques. Ce n'est pas un domaine dans lequel je suis un expert - j'utilise simplement le composant, et ça fonctionne. Eh bien ... Jusqu'à maintenant. Le problème est que l'un des clients de mon entreprise a récemment commencé à rencontrer la même erreur, et je ne suis pas à l'aise de leur demander de vider leurs fichiers Crypto sans pouvoir justifier pourquoi. En outre, il semblerait que ce n'était pas dû à quelque chose d'étrange que j'ai téléchargé, comme cette exception se pose sur une série de serveurs Terminal Server commerciaux.

J'ai cherché du soutien sur ce problème, mais je n'ai pas beaucoup de chance. Je vais continuer à regarder autour de moi. Quelqu'un peut-il faire la lumière sur la situation?

Merci pour votre temps.

+1

L'endroit idéal pour commencer est l'endroit où vous avez trouvé la solution de contournement. Y avait-il une explication? –

+0

Je n'ai pas trouvé cette solution de contournement nulle part. J'ai d'abord utilisé procmon et DLLTool pour rechercher ce que l'application faisait. J'ai remarqué qu'il y avait une référence allant à C: \ Documents and Settings \ mon_nom_utilisateur \ Application Data \ Microsoft \ Crypto \ RSA \ token \ nom_fichier - à ce moment, je me suis contenté de supprimer ce fichier et les fichiers équivalents dans le dossier Tous les utilisateurs. Après cela, le problème est parti. Je n'ai jamais rien trouvé en ligne recommandant cela - je l'ai juste essayé et cela a fonctionné. Merci pour l'édition, btw. –

Répondre

0

Savez-vous si vos clients ont installé les CSP sur leur ordinateur? Les anciennes versions de Windows n'auront pas certains CSP installés. Il est également possible qu'ils exécutent une version étrangère de Windows qui ne supporte pas la cryptographie forte (je pense que la version française pourrait ne pas être autorisée à tous les avoir.)

Une autre possibilité pourrait être des autorisations.Peut-être que le processus exécutant le code ne s'exécute plus avec l'autorité administrative ou que l'autorité associée à votre compte a été modifiée.

0

La bibliothèque Mentalis doit réellement définir l'indicateur CRYPT_VERIFYCONTEXT lors de l'appel de CryptAcquireContext. Comme ils ne le sont pas, chaque instance de RC4CryptoServiceProvider crée un handle vers le conteneur de clé persistante par défaut (qui est stocké dans le fichier que vous avez localisé avec procmon).

Créez-vous des clés dans plusieurs threads (ou à partir de plusieurs processus)? Une conjecture sauvage serait que vous avez quelques problèmes avec le verrouillage du fichier.

Questions connexes