Je suis en mesure d'identifier avec succès les certificats clients dans une application .NET client lourd, et l'utilisateur est en mesure d'en sélectionner un avec succès.X509Certificate2 demande PIN
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
var fcollection = store.Certificates.Find(X509FindType.FindByApplicationPolicy, "1.3.6.1.5.5.7.3.2", true);
// other stuff where user selects one of them
Maintenant, comment puis-je demander à l'utilisateur de répondre au défi (par exemple le code PIN dans ce cas)?
I see Il existe une classe SignedXML.ComputeSignature(), mais elle nécessite un flux d'octets, et je ne sais pas d'où elle vient (peut-être dans certificate.RawData []?).
Je ne suis pas vraiment intéressé par l'obtention de la broche réelle car je suis celle de la carte/broche.
EDIT:
J'ai essayé d'utiliser la clé privée de la carte à puce (et même crypté de celui-ci), mais je ne suis pas demandé mon NIP.
RSACryptoServiceProvider rsacsp = (RSACryptoServiceProvider)certificate.PrivateKey;
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
var encryptedData = RSAEncrypt(dataToEncrypt, rsacsp.ExportParameters(false), false);
Ne semble pas fonctionner. J'ai ajouté le code affiché ci-dessus dans l'édition où la clé privée est utilisée pour crypter du texte arbitraire, mais on ne me demande pas le code PIN. – micahhoover
Il ne semble pas que la clé privée/le certificat soit protégé par une broche, si cela a vraiment été le cas. – vcsjones
peut-être pas ... quand je fais cela à partir de MVC lorsque SslFlags = "SslNotationCertificate" il sollicite mon code PIN et il ne fonctionnera pas sauf si c'est le bon code PIN. Donc, il semble que cela devrait aussi être faisable à partir d'une application client lourd. – micahhoover