قم باستخراج معلومات سلسلة الشهادات من شهادة X509 الموقعة (استجابة CSR) في Android / BouncyCastle

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

سؤال

هل يمكنني استخراج معلومات سلسلة الشهادات من شهادة عميل X509 موقعة من CA باستخدام Android أو BouncyCastle libs؟

لدي عميل Android يتلقى شهادة X509 موقعة من CA من خادم موثوق به.أريد حفظ شهادة العميل الموقعة ومفتاحي الخاص في ملف PKCS12 (.p12).أقوم بذلك حاليًا عن طريق إنشاء ملف KeyStore الكائن وإضافة الشهادة والمفتاح الخاص.عندما أقوم بإضافة العميل PrivateKey مع ال KeyStore.setKeyEntry() الطريقة، أ Certificate[] chain هي الوسيطة الأخيرة، والتي تحتوي حاليًا على شهادة العميل فقط. هل سيؤدي هذا إلى منع التحقق من شهادتي لأنني لا أملك شهادة CA في ملف Certificate[] chain? وإذا كانت الإجابة بنعم، فهل من الممكن ملء سلسلة الشهادات بالمعلومات المستخرجة من الموقعة X509Certificate?

يبدو أن معظم الأمثلة تقوم بتحميل سلسلة CA من ملف PEM، أو مخزن الثقة BKS، أو لديها حق الوصول بالفعل إلى قائمة الشهادات.

وهنا ما لدي:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();

شكرا لك مقدما!

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

المحلول

لم يتم تضمين شهادة (شهادات) CA في شهادتك الموقعة.يجب عليك الحصول عليها من مكان ما (التثبيت المسبق، التنزيل من خادم موثوق به، وما إلى ذلك).أما بالنسبة لعدم تثبيت السلسلة الكاملة، إذا كان المدقق لديه بالفعل حق الوصول إلى شهادات CA الضرورية، فيمكنه دائمًا التحقق من شهادة الكيان النهائي الخاصة بك.كيف تنوي استخدام مفتاحك وشهادتك؟

راجع للشغل، مكالمتك ل setCertificateEntry() يقوم بإنشاء إدخال شهادة موثوق به وهو على الأرجح ليس ما تريده مع شهادة الكيان النهائي.

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