c# X509 प्रमाणपत्र सर्वर पर निजी कुंजी फ़ाइल लोड नहीं कर रहा है




asp.net-mvc-3 google-analytics-api (4)

मैं Google Analytics API का उपयोग कर रहा हूं और मैंने OAuth सेट अप करने के लिए इस SO प्रश्न का पालन किया: https://stackoverflow.com/a/13013265/1299363

मेरा ओएथ कोड यहाँ है:

public void SetupOAuth ()
{
    var Cert = new X509Certificate2(
        PrivateKeyPath, 
        "notasecret", 
        X509KeyStorageFlags.Exportable);
    var Provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, Cert)
    {
        ServiceAccountId = ServiceAccountUser,
        Scope = ApiUrl + "analytics.readonly"
    };
    var Auth = new OAuth2Authenticator<AssertionFlowClient>(Provider, AssertionFlowClient.GetState);
    Service = new AnalyticsService(Auth);
}

PrivateKeyPath Google API कंसोल द्वारा प्रदान की गई निजी कुंजी फ़ाइल का मार्ग है। यह मेरी स्थानीय मशीन पर पूरी तरह से काम करता है, लेकिन जब मैं इसे अपने परीक्षण सर्वर पर धक्का देता हूं तो मुझे मिलता है

System.Security.Cryptography.CryptographicException: An internal error occurred.

निम्नलिखित स्टैक ट्रेस के साथ (अप्रासंगिक भागों को हटा दिया गया है):

System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +33
System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags) +237
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags) +140
Metrics.APIs.GoogleAnalytics.SetupOAuth() in <removed>\Metrics\APIs\GoogleAnalytics.cs:36
Metrics.APIs.GoogleAnalytics..ctor(String PrivateKeyPath) in <removed>\Metrics\APIs\GoogleAnalytics.cs:31

तो ऐसा प्रतीत होता है कि फ़ाइल को लोड करने में समस्या हो रही है। मैंने PrivateKeyPath को चेक किया है जो पारित हो गया है और यह सही स्थान पर इंगित कर रहा है।

कोई विचार? मुझे नहीं पता कि यह सर्वर, फ़ाइल, कोड या क्या है।


X509KeyStorageFlags निर्दिष्ट करने का भी प्रयास करें

    var certificate = new X509Certificate2(KeyFilePath, KeyFilePassword, 
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | 
X509KeyStorageFlags.Exportable);

मेरे दिमाग में आने वाली चीजों में से एक यह है कि आप अपने ऐप पूल की पहचान करें, सुनिश्चित करें कि लोड उपयोगकर्ता प्रोफ़ाइल चालू है अन्यथा क्रिप्टो सबसिस्टम काम नहीं करता है।


जैसा ऊपर बताया गया है, आपको आईआईएस को कॉन्फ़िगर करने की आवश्यकता है, लेकिन हमारे मामले के रूप में, आपको कुछ फ़ोल्डर की अनुमति जांचने की आवश्यकता है:

C: \ ProgramData \ Microsoft \ क्रिप्टो \ आरएसए \ MachineKeys

यदि आप X509KeyStorageFlags पैरामीटर सेट करते हैं तो यह इस फ़ोल्डर में एक महत्वपूर्ण फ़ाइल बनाएगा। मेरे मामले में इस फ़ोल्डर की अनुमति में एक अंतर था। उल्लिखित फ़ोल्डर में पूल खाता नहीं जोड़ा गया था।


नहीं, "फाइल.एक्सिस्ट्स (...)" भी उन्नत सेटिंग्स में है? मेरे पास 3 पूल थे, उनमें से सभी "लोड उपयोगकर्ता प्रोफ़ाइल" के लिए सही सक्षम थे। मुझे लगता है कि मेरी समस्या निर्भरता और NuGet संकुल के साथ कुछ करने के लिए हो सकती है क्योंकि कोड कंसोल ऐप के रूप में ठीक काम करता है लेकिन मुझे एमवीसी में समस्या देता है।