هل من الممكن الحصول على جافا تجاهل "الثقة متجر" و فقط تقبل شهادة SSL فإنه يحصل ؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

أنا أحاول أن أكتب SSL العميل أن يرسل البريد باستخدام javax.البريد API.المشكلة أنا بعد أن طلب الخادم التي تستخدم SSL ، ولكن تم تكوين الملقم أيضا مع غير القياسية شهادة SSL.صفحات الويب وجدت أنني أحتاج إلى تثبيت الشهادة إلى مخزن الثقة.أنا لا تريد أن تفعل ذلك (أنا لم يكن لديك الأذونات اللازمة.)

  1. هل هناك طريقة للحصول على جافا تجاهل شهادة الخطأ و قبول ذلك ؟
  2. إذا تعذر ذلك, هل هناك طريقة للحصول على الثقة متجر تكون محلية عن البرنامج, و يتم تثبيت كل JVM?
هل كانت مفيدة؟

المحلول

تحتاج إلى إنشاء وهمية TrustManager أن تقبل جميع الشهادات والسجل له كمدير.شيء من هذا القبيل:

public class MyManager implements com.sun.net.ssl.X509TrustManager {
  public boolean isClientTrusted(X509Certificate[] chain) { return true; }
  public boolean isHostTrusted(X509Certificate[] chain) { return true; }
  ...
}


com.sun.net.ssl.TrustManager[] managers =
  new com.sun.net.ssl.TrustManager[] {new MyManager()};

com.sun.net.ssl.SSLContext.getInstance("SSL").
       .init(null, managers, new SecureRandom());

نصائح أخرى

يعمل رمز ( في jdk1.6.0_23) ل #1.

الواردات

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

الفعلية الثقة في كل TrustManager رمز.

TrustManager trm = new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) {

    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { trm }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

جرب هذا (السؤال 2):

System.setProperty("javax.net.ssl.trustStore", "/path/to/truststore");

يمكنك أيضا تحديد هذا إضافيا معلمة سطر الأوامر:

java -Djavax.net.ssl.trustStore=/path/to/truststore <remaining arguments>

على فيدورا يمكن أن يكون هذا النظام واسعة جافا مخزن الثقة في /etc/pki/java/cacerts

فقط إضافة -Dtrust_all_cert=true إلى VM الحجج.هذه الحجة يقول جافا تجاهل كل شهادة الشيكات.

في سطر الأوامر يمكنك إضافة الحجة -noCertificationCheck جافا تجاهل شهادة الشيكات.

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