سؤال

كيف يمكنني التأكد من أنني قمت بتسمية الشهادات من بطاقة SmartCard الخاصة بي وعدم تشكيل مخزن شهاداتك الشخصية في C #؟ وكيف يمكنني جعل بلدي rsacryptoprovider للاستفادة من مفتاح شهادة بطاقة الذكية الخاصة بي؟

شكرا

والي

هل كانت مفيدة؟

المحلول

في بعض الأحيان، خاصة إذا كنت لا تستخدم اسم الحاوية المفتاح الافتراضي على البطاقة الذكية (التي أوصت بها Microsoft)، فلن يتم نسخ الشهادات إلى مخزن الشهادات المحلية. الحل هو استخدام API Crypto للوصول إلى المفتاح مع KP_CERTIFICATE، وشهادة بناء من البيانات المستردة، وتعيينه جهاز RSICryptoserviceProvider جديد تم إنشاؤه باستخدام اسم الحاوية المفتاح الخاص بك.

يتبع رمز C # Pseudo C #

int reti = CryptoApi.CryptGetUserKey(_hprovider, keytype, ref userKey);

if (reti)
{
    reti =CryptoApi.CryptGetKeyParam(_userKey, KP_CERTIFICATE, ref  pbdata, ref pwddatalen, 0);
}

if (reti || pwddatalen>0)
{
    byte[] data = new byte[pwddatalen];
    ret  = CryptoApi.CryptGetKeyParam(_userKey, KP_CERTIFICATE, data, ref pwddatalen, 0);
    if (ret) 
    {
        X509Certificate2 c = new X509Certificate2(data);
        X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly);
        X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindByThumbprint, c.Thumbprint, validonly);
        store.Close();

        if (col.Count != 1) 
        {
            //not found in store - CSP didn't copy it
            c.PrivateKey = PrivateKey(keytype);
            return c;
        }
        else
        {
            return col[0];
        }
    }
}


private RSACryptoServiceProvider PrivateKey (KeyType keytype)
{
    CspParameters csparms = new CspParameters();
    csparms.KeyContainerName = _containerName;
    csparms.ProviderName = _provider;
    csparms.ProviderType = 1;
    csparms.Flags = CspProviderFlags.UseMachineKeyStore | CspProviderFlags.UseExistingKey;
    csparms.KeyNumber = (int)keytype;

    return new RSACryptoServiceProvider(csparms);
}

نصائح أخرى

ستحتاج إلى الذهاب من خلال مزود خدمة التشفير الخاص بك (CSP) ل SmartCard الخاص بك. على Windows (2000، XP، و Vista) في أي وقت تقوم بإدخال البطاقة الذكية الخاصة بك في قارئ البطاقة الذكية، يتم تقديم جميع الشهادات الموجودة على مخزن الشهادات الشخصية الخاصة بك. يبقى المفتاح الخاص بك على بطاقتك الذكية. ما يعنيه ذلك هو إذا كنت تستخدم شهادتك (على سبيل المثال لتوقيع بريدا إلكترونيا رقميا)، فمن المطالبة بإدراج بطاقتك الذكية. إذا كانت بطاقتك الذكية تتطلب دبوس، فسيطلب منك إدخاله. السبب في ذلك هو أن هناك موقع واحد للتطبيقات للبحث عن شهادات المستخدم، ومتجر الشهادات الشخصية الخاصة بك، لذلك لا يجب إعادة كتابة التطبيقات فقط لمعالجة الشهادات على البطاقات الذكية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top