मुझे जिस त्रुटि का सामना करना पड़ रहा है उससे संबंधित कुछ भी नहीं मिल रहा है।

समस्या यह है कि मुझे नीचे store.Add पर क्रिप्टोग्राफ़िक अपवाद का सामना करना पड़ रहा है:

"अनुरोध समर्थित नहीं है।"

MSDN Documentation बहुत उपयोगी नहीं है , यह प्रकट करता है की:

प्रमाणपत्र को स्टोर में नहीं जोड़ा जा सका.

मैंने निम्नलिखित परिवर्तन के साथ एक गाइड के रूप में निम्न कोड का उपयोग किया है:

  • वे StoreName.My में जोड़ रहे हैं और मैं इसमें जोड़ना चाहता हूं StoreName.रूट
  • मैं उपयोगकर्ता का प्रतिरूपण करने के लिए एक आईडीस्पोजेबल क्लास का उपयोग करना चाहता हूं।

अवधारणा कोड का मेरा प्रमाण (संक्षिप्त/घटिया):

public class UserLogonImpersonator : IDisposable
{
    private WindowsImpersonationContext _impersonationContext = null;
    private const int LOGON_INTERACTIVE = 2;
    private const int PROVIDER_DEFAULT = 0;

    [DllImport("advapi32.dll", SetLastError=true)]
        private static extern int LogonUser(
        string lpszUserName,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        ref IntPtr phToken);

    public UserLogonImpersonator()
    {
        _impersonationContext = null;
        IntPtr userHandle = IntPtr.Zero;
        const string domain = "domain";
        const string user = "user";
        const string hcpw = "password";

        try
        {
            int logonResult = LogonUser(user, domain, hcpw, 
                LOGON_INTERACTIVE, PROVIDER_DEFAULT, ref userHandle);
            bool isLoggedOn = logonResult != 0;

            if (isLoggedOn)
            {
                _impersonationContext = 
                    WindowsIdentity.Impersonate(userHandle);
            }

        }
        catch(Exception e)
        {
            // Handle Exception
        }
    }

    public void Dispose()
    {
        // UndoImpersonation();
    }

    // Private methods ...
}

public class CertService
{
    public void AddCertToRootStore()
    {
        using(new UserLogonImpersonator())
        {
            X509Certificate2 rootCert = 
                new X509Certificate2(certData.CertFilePath);
            X509Store store = 
                new X509Store(StoreName.Root, StoreLocation.CurrentUser);
            store.Open(OpenFlags.MaxAllowed);
            store.Add(rootCert);
            store.Close();
        }
    }
}

मैं प्रतिरूपण को हटा सकता हूं और कोई अपवाद नहीं फेंका गया है, लेकिन यह सही उपयोगकर्ता का स्टोर नहीं है।

प्रतिरूपण के साथ, मैं बिना किसी अपवाद के प्रमाण पत्र को StoreName.AuthRoot में डाल सकता हूं। यह वह स्टोर नहीं है जिसमें मैं चाहता हूं कि प्रमाण पत्र जाए।

इनमें से कोई भी अपवाद-मुक्त समाधान काम नहीं करेगा। मुझे आवश्यकता है कि कार्यक्रम उन्नत विशेषाधिकारों के साथ चलाया जाए और किसी अन्य उपयोगकर्ता के स्टोर में जाए।

0
Brett 14 सितंबर 2017, 00:29
मैंने नीचे अपना समाधान जोड़ा। शायद कोई इस पर कुछ प्रकाश डाल सकता है कि भविष्य में ऐसा क्यों होता है।
 – 
Brett
20 सितंबर 2017, 00:21

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इसे मैन्युअल रूप से करके हल किया।

मैं इसे "टेस्ट चेन सर्टिफिकेट" को स्वचालित करने के लिए करना चाहता था। हमारे तृतीय पक्ष CA ने हमें .local डोमेन के लिए प्रमाणपत्रों का एक सेट दिया है।

हमारे वास्तविक जीवन के उपयोग के मामले में पहले से ही रूट और चेन प्रमाणपत्र स्थापित होगा।

0
Brett 20 सितंबर 2017, 00:20