में प्रमाण पत्र स्वीकार करना मुझे जावा के माध्यम से एक HTTPS साइट के साथ बातचीत करने में समस्याएं आ रही हैं। जब भी प्रोग्राम चलता है तो मेरा प्रोग्राम एक अविश्वसनीय प्रमाणपत्र के साथ एक यूआरएल का उपयोग करता है। इस कार्यक्रम को एक से अधिक सिस्टम पर चलना है। वर्तमान में, मैं निम्नलिखित है:जावा
public class A{
HostnameVerifier hv = new HostnameVerifier(){
public boolean verify(String urlHostName, SSLSession session){
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = null;
try {
sc = javax.net.ssl.SSLContext.getInstance("SSL");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
sc.init(null, trustAllCerts, null);
} catch (KeyManagementException e) {
e.printStackTrace();
}
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager{
public java.security.cert.X509Certificate[] getAcceptedIssuers(){
return null;
}
public boolean isServerTrusted(java.security.cert.X509Certificate[] certs){
return true;
}
public boolean isClientTrusted(java.security.cert.X509Certificate[] certs){
return true;
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException{
return;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException{
return;
}
}
इस कोड के साथ
, मैं ठीक निम्नलिखित प्रदर्शन कर सकते हैं:
URL url = new URL(urlString);
URLConnection cnx = url.openConnection();
cnx.connect();
InputStream ins = cnx.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(ins));
String curline;
while((curline = in.readLine()) != null) {
System.out.println(curline);
}
हालांकि, मैं ऐसा नहीं कर सकते निम्नलिखित:
httpClient = new HttpClient();
PostMethod postMethod = null;
int intResult = 0;
postMethod = new PostMethod(authURL);
Enumeration emParams = authParams.propertyNames();
while (emParams.hasMoreElements()) {
String paramName = (String) emParams.nextElement();
String paramValue = authParams.getProperty(paramName);
postMethod.addParameter(paramName, paramValue);
}
intResult = httpClient.executeMethod(postMethod);
postMethod.releaseConnection();
ins.close();
जब executeMethod (postMethod) निष्पादित किया गया है, मुझे एक SSLHandshakeException, CertPathBuilderException, और इसी तरह मिलता है।
इसका समाधान करने के लिए मैं क्या कर सकता हूं? मैं या तो प्रमाण पत्र स्वीकार करने या बस सभी प्रमाण पत्र सत्यापन को छोड़ने के बारे में सोच रहा हूं (क्योंकि कार्यक्रम आंतरिक नेटवर्क के भीतर आंतरिक रूप से चलता है)। अपनी खुद की SecureProtocolSocketFactory
रूप Apache HttpClient 3 SSL guide में विस्तार से बताया
धन्यवाद
आप अपाचे HttpClient 3.x उपयोग कर रहे हैं (या 4)? – Bruno