سؤال

أنا أكتب تطبيق Android. كيف يمكنني استخدام الشهادة في https الاتصال عند تهيئة الشهادة من ملف الدليل وليس من الحزم؟

عندما يكون لدي ملف حزم بكلمة مرور ، يعمل هذا الرمز:

    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    keyStore.load(certificateIs, pass.toCharArray());
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keyStore, pass.toCharArray());
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

لكن لدي شهادة تهيئة من ملف der:

    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate) cf.generateCertificate(certBytes);

لا أعرف كيف استخدم هذه الشهادة https الإتصال.

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

المحلول

يبدو أنك تتحدث عن مصادقة العميل (حيث يكون جهاز Android هو العميل).

أولاً ، تحتاج إلى أن يكون لدى العميل المفتاح الخاص يطابق المفتاح العام في الشهادة التي تحاول استخدامها (هذه هي النقطة الأساسية ، وإلا ، فلن مصادقة أي شيء). PKCS#12 هو أحد التنسيقات المعتادة لتحتوي على المفتاح الخاص والشهادة. إذا كان لديك الشهادة فقط في دير ملف ، ربما لن يكون لديك المفتاح الخاص فيه ، وبالتالي لن يعمل. ليس من الواضح تمامًا من سؤالك ما تفعله مع certificate متغير ، فيما يتعلق KeyManagerFactory (إذا كان لديك مخصص X509KeyManager, ، يجب أن يعيد المفتاح الخاص في getPrivateKey الطريقة ، وإلا فلن تعمل).

ثانياً ، يتم دائمًا بدء مصادقة الخادم المصادقة على العميل ، لذلك ستحتاج إلى إعداد الخادم وفقًا لذلك أيضًا (يبدو أن هذا هو الحال بالفعل ، إذا كان الاختبار استنادًا إلى عمل KeyStore PKCS#12).

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