سؤال

شركة التي أعمل لديها تطبيق إدارة الوثائق على شبكة الإنترنت، وقد تم تكليفي لايجاد وسيلة لتوقيع ملفات PDF مع الشهادة الرقمية للمستخدم.

ويمكن أن تذهب ملفات PDF من عدد قليل كيلوبايت إلى أكثر من 100MB، وهذا هو عبر الانترنت حتى التوقيع على يجب التقاط مكان في خادم الويب.

في أجل القيام بذلك لقد بنيت عنصر تحكم ActiveX الذي يطلب من المستخدم أن يختار الشهادة، ثم بتحميله إلى صفحة ويب باستخدام WebClient.UploadData إرسال الشهادة كما صفيف بايت.

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

وهذه هي الطريقة التي أنا الحصول على شهادة من المستخدم:

private static X509Certificate2 PickCertificate()
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            try
            {
                store.Open(OpenFlags.ReadOnly);

                // pick a certificate from the store
                X509Certificate2 cert = X509Certificate2UI.SelectFromCollection(store.Certificates, "Title", "Message", X509SelectionFlag.SingleSelection)[0];

                // show certificate details dialog
                X509Certificate2UI.DisplayCertificate(cert);
                store.Close();
                return cert;
            }
            finally { store.Close(); }
        }

وكيف يمكنني يطلب من المستخدم لتوفير مفتاح أنا في عداد المفقودين؟

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

المحلول

وأنت تريد المستخدم لتحميل المفتاح الخاص الشهادة الخاصة لخادم الويب بحيث قد يوقع ملفات PDF؟ إذا كان الأمر كذلك، وهذا كسر في الأساس من منظور أمني.

وأعتقد أنك قد غاب عن هذه النقطة تلك الشهادة العامة! = المفتاح الخاص. (معظمنا قذرة واستخدام كلمة "شهادة" للإشارة إلى إما (أو كليهما) من تلك الأشياء، لذلك هذا ليس من المستغرب تماما). الانتقال من الذاكرة، وCryptoAPI ليس لديها سوى اختيار مجموعة من الطرق التي تسمح لك للوصول إلى المفتاح. يجب أن يكون هناك "تصدير كما PFX" طريقة من بين هؤلاء، لذلك يمكن أن يجعل عمل التصميم الخاص بك إذا كنت حقا أراد حقا، ولكن ليس هناك طريقة أود أن أوصى هذا. (خطر ارسال المفاتيح الخاصة لخادم، وكسر عدم التنصل، الخ الخ).

إذا كنت حقا يجب أن نفعل التوقيع على الخادم [أنا لا أفهم حقا حجتك، يجب التوقيع لا تضيف الكثير من البيانات إلى تحميل]، ثم ربما يجب عليك النظر في هيكل متعدد المستويات، وآلية الضمان الرئيسية . بهذه الطريقة يمكنك على الأقل تقليل بعض المخاوف الأمنية (ولكن عليك أن تفقد ما زال عدم التنصل ... ويعرض مخاطر أخرى. لا وجبة غداء مجانية هنا).

وهكذا ... وربما كنت بحاجة إلى إعادة النظر في يصمم التطبيق الخاص بك بحيث يحدث توقيع PDF على العميل (في عنصر تحكم ActiveX)، قبل أن يتم تحميل ملف PDF. أتصور أنك سوف تحتاج إلى مكتبة 3rd الطرف للخطوة التوقيع كما هو مبين في هذا SO موضوع .

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