c # - Begivenhed, når smartkortet i X509Certificate2-objektet fjernes

Indlæg af Hanne Mølgaard Plasc

Problem



Vi har en funktion, hvor vi bruger Windows 'personlig certifikat butik til at godkende brug af certifikater, efter at brugeren har valgt et gyldigt certifikat. Det tegner simpelthen en udfordring med følgende:


public static byte[] SignDataSHA512RSA(X509Certificate2 certificate, byte[] data)
        {
            using (var rsa = certificate.PrivateKey as RSACryptoServiceProvider)
            {
                if (rsa == null)
                {
                    return null;
                }

                return rsa.SignData(data, CryptoConfig.MapNameToOID("SHA512"));
            }
        }


Det fungerer ret godt ved hjælp af klassen RSACryptoServiceProvider. Funktionen tillader både almindelige certifikater og smartcard-certifikater. Hvis der er et smartkort, og det kræver PIN-kode, beder Windows en dialog for det og alle.


Nu er der et ekstra sikkerhedskrav i denne funktion, hvor hvis et smartcard bruges til denne operation (som vi kan finde ud af rsa.CspKeyContainerInfo.Removable og HardwareDevice, hvis du vil håndhæve hardware), vil vi sørg for, at den er tilgængelig hele tiden under sessionen. Med andre ord, vi har brug for en begivenhed, når smartkortet fjernes, så vi kan logge ud automatisk.


En rå måde ville have et timerjob, som kontrollerer certificate.PrivateKey, er tilgængeligt hvert minut eller deromkring, men det kaster ikke, før brugeren bliver bedt om at indsætte smartkortet og brugeren presser Cancel.


Funktionen understøtter også Windows 7, så det er ikke en mulighed at bruge UWP-biblioteker. Enhver måde at opnå dette på?

Bedste reference


Du kan bruge PC/SC til at kontrollere, om kortet fjernes. I Windows implementeres det i WinSCard bibliotek. Se dette så svar.


Der er også en C # implementering pcscarp. [8]