"حدث خطأ داخلي." عند تحميل ملف PFX مع X509Certificate2

StackOverflow https://stackoverflow.com/questions/1345262

  •  20-09-2019
  •  | 
  •  

سؤال

وأنا أحاول استخدام شهادة موقعة ذاتيا (ج #):

X509Certificate2 cert = new X509Certificate2(
    Server.MapPath("~/App_Data/myhost.pfx"), "pass");

وعلى خدمة استضافة المواقع المشتركة وحصلت على خطأ:

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

وينتهي تتبع مكدس مع

System.Security.Cryptography.CryptographicException.
    ThrowCryptogaphicException(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) +131

في آلة ديف لي أنه يحمل يرام. الحمل السبب I * .PFX ليس ملف .cer * لأنني بحاجة إلى الوصول إلى المفتاح الخاص (الأحمال ملف حدات خفض الانبعاثات المعتمدة طيب). أنا جعلت PFX على بلدي ديف mochine مثل ما يلي:

makecert -r -n "CN=myhost.com, E=admin@myhost.com" -sky exchange -b 01/01/2009
    -pe -sv myhost.pvk myhost.cer
<b>pvk2pfx</b> -pvk myhost.pvk -spc myhost.cer -pfx myhost.pfx -po pass</code>

وأنا باستخدام نسخة v5.131.3790.0 من makecert

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

المحلول

واستخدام مخزن الكمبيوتر المحلي للمفتاح الخاص:

X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet);
يوصف

MachineKeySet كما "يتم تخزين المفاتيح الخاصة في مخزن الكمبيوتر المحلي بدلا من مخزن المستخدم الحالي". الافتراضي مع عدم وجود الأعلام هو مكان في مخزن المستخدم.

وعلى الرغم من أنك تقرأ شهادة من القرص وتخزينها في كائن مفاتيح خاصة لا تزال مخزنة في قاعدة البيانات مفتاح التشفير موفر Microsoft API خدمة التشفير. على الملقم الذي يستضيف لايوجد عملية ASP.NET إذن للوصول إلى مخزن المستخدم.

وثمة نهج آخر (كما في بعض التعليقات أدناه) هو تعديل تكوين IIS أو التطبيقات هوية بركة - التي لا عمل. ومع ذلك، هذا على افتراض أن هناك إمكانية الوصول إلى هذه العناصر التكوين الذي قد لا يكون الأمر كذلك (على سبيل المثال، في بيئة استضافة مشتركة).

نصائح أخرى

وحاولت حل راندي لتغييرها إلى MachineKeySet، ولكن بعد ذلك حصلت على رسالة خطأ:

و"مفتاح غير صالح للاستخدام في ولاية المحدد"

وهكذا بعد قليل غوغلينغ حول وجدت وظيفة التي اقترح تغييره إلى:

var certificate = new X509Certificate2(certKeyFilePath, passCode, 
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet |       
X509KeyStorageFlags.PersistKeySet );

وهذا تسويتها قضايا بلدي.

وأنا لم يحاكم حتى الآن على اقتراح لتغيير الإعداد تجمع وضع التطبيق في تكوين IIS. لفعل ذلك انتقل إلى إعدادات متقدمة لتجمع التطبيقات موقعك ثم تعيين "التشكيل الجانبي للمستخدم تحميل" إلى true. عندما يكون هذا الإعداد غير صحيح، الحاويات الرئيسية لا يمكن الوصول إليها على ما يبدو.

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