2012-04-09 18 views
13

का उपयोग कर कीस्टोर में प्रमाणपत्र जोड़ना मैं सर्वर की .cer प्रमाणपत्र फ़ाइल का उपयोग कर एक https कनेक्शन स्थापित करने की कोशिश कर रहा हूं। मैं ब्राउज़र का उपयोग कर प्रमाण पत्र फ़ाइल मैन्युअल रूप से प्राप्त करने में सक्षम हूं और इसे keytool का उपयोग करके कीस्टोर में डाल सकता हूं। मैं जावा कोड का उपयोग कर कीस्टोर तक पहुंच सकता हूं, जो प्रमाणपत्र मैं कुंजीस्टोर में जोड़ता हूं और सर्वर से कनेक्ट करता हूं।जावा कोड

अब मैं प्रमाणपत्र फ़ाइल प्राप्त करने की प्रक्रिया को भी लागू करना चाहता हूं और इसे जावा कोड का उपयोग करके और कीटोल या ब्राउज़र का उपयोग किए बिना प्रमाण पत्र प्राप्त करने के बिना इसे जोड़ना चाहता हूं।

क्या कोई मुझे बता सकता है कि इस तक कैसे पहुंचे और मुझे क्या करना है?

+0

यह क्या उद्देश्य पूरा करता पीछा किया? मैं कल्पना नहीं कर सकता कि आप ऐसा क्यों करना चाहते हैं। – erickson

+0

मैं क्लाइंट के अनुरोध को एचपी के सर्वर पर वापस पोस्ट करने से पहले अपने आंतरिक सर्वर में फॉर्म सामग्री को सत्यापित करने का प्रयास कर रहा हूं। यह मेरा मानना ​​है कि किसी भी ब्राउज़र आधारित भुगतान छेड़छाड़ को रोक देगा और मेरा सर्वर एचपी की वेबसाइट करने के बजाए सभी अपेक्षित चेक कर सकता है। ऐसा करने के लिए हालांकि मुझे हैंडशेक करने के लिए जावा कोड का उपयोग कर सर्वर का प्रमाणपत्र प्राप्त करने की आवश्यकता है। मैं हर बार प्रमाण पत्र मैन्युअल रूप से डाउनलोड नहीं करना चाहता हूं और इसे अपने कीस्टोर में डाल देना चाहता हूं। मैं कोड को उस भाग को स्वचालित रूप से करना चाहता हूं .. – Rohit

+0

आपको अपने कुंजी स्टोर में सर्वर प्रमाणपत्र की आवश्यकता नहीं है। यदि सर्वर सही तरीके से कॉन्फ़िगर किया गया है, तो आपको सर्वर की प्रमाणपत्र श्रृंखला की "रूट" की आवश्यकता है। – erickson

उत्तर

13

संपादित करें: This वही करना है जो आप चाहते हैं।

निम्न कोड का उपयोग करना रनटाइम के दौरान ट्रस्ट स्टोर जोड़ना संभव है।

import java.io.InputStream; 
import java.security.KeyStore; 

import javax.net.ssl.SSLContext; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.TrustManagerFactory; 

public class SSLClasspathTrustStoreLoader { 
    public static void setTrustStore(String trustStore, String password) throws Exception { 
     TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("X509"); 
     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     InputStream keystoreStream = SSLClasspathTrustStoreLoader.class.getResourceAsStream(trustStore); 
     keystore.load(keystoreStream, password.toCharArray()); 
     trustManagerFactory.init(keystore); 
     TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); 
     SSLContext sc = SSLContext.getInstance("SSL"); 
     sc.init(null, trustManagers, null); 
     SSLContext.setDefault(sc); 
    } 
} 

मैंने इस कोड का उपयोग एक सक्रिय निर्देशिका सर्वर के साथ एक सुरक्षित एलडीएपी कनेक्शन स्थापित करने के लिए किया था।

This भी उपयोगी हो सकता है, नीचे एक कक्षा है, जो रनटाइम के दौरान प्रमाण पत्र आयात करने में सक्षम है।

+0

आपके उत्तर Sandro के लिए धन्यवाद। मेरे पास एक addiional सवाल है। आप एक कण यूआरएल के लिए प्रमाण पत्र कैसे प्राप्त करते हैं? – Rohit

+2

"वेबसाइट से जावा डाउनलोड सर्टिफिकेट" के लिए गुगलिंग मैंने पाया [यह] (http://snippets.dzone.com/posts/show/4736)। ऐसा लगता है कि आप वही करना चाहते हैं जो आप चाहते हैं। – Sandro

+0

लिंक सैंड्रो के लिए धन्यवाद ... यह वास्तव में मदद की। – Rohit

0

मैंने ऐसा करने के लिए छोटी लाइब्रेरी ssl-utils-android लिखा था।

आप संपत्ति निर्देशिका से फ़ाइल नाम देकर बस कोई प्रमाण पत्र लोड कर सकते हैं।

उपयोग:

OkHttpClient client = new OkHttpClient(); 
SSLContext sslContext = SslUtils.getSslContextForCertificateFile(context, "BPClass2RootCA-sha2.cer"); 
client.setSslSocketFactory(sslContext.getSocketFactory()); 
0

बस

https://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html

javac -cp .:/home/ec2-user/velu/*: QuickStart.java 
java -cp .:/home/ec2-user/velu/*: QuickStart 


[[email protected] velu]$ ls 
QuickStart.class commons-codec-1.2.jar  input-payload.txt   logback-core-1.1.3.jar 
QuickStart.java commons-httpclient-3.1.jar httpclient-4.5.jar jdk-8u101-linux-x64.rpm slf4j-api-1.7.12.jar 
certificates  commons-logging-1.2.jar  httpcore-4.4.1.jar logback-classic-1.1.3.jar 



import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpMethod; 
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; 
import org.apache.commons.httpclient.methods.PostMethod; 
import org.apache.commons.httpclient.methods.StringRequestEntity; 
import org.apache.commons.httpclient.params.HttpClientParams; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 

public class QuickStart { 

     public static void main(String[] args) throws Exception { 
       System.setProperty("javax.net.ssl.keyStore", "/home/user/velu/certificates/myownOut.pkcs12"); 
       System.setProperty("javax.net.ssl.keyStorePassword", "password"); 

       System.setProperty("javax.net.ssl.trustStore", "/home/user/velu/certificates/myTrustStore"); 
       System.setProperty("javax.net.ssl.trustStorePassword", "password"); 

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); 
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); 
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug"); 
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug"); 

       CloseableHttpClient httpclient = HttpClients.createDefault(); 

       HttpClientParams params = new HttpClientParams(); 
       params.setConnectionManagerClass(MultiThreadedHttpConnectionManager.class); 
       HttpClient client = new HttpClient(params); 

       HttpMethod m = new PostMethod("https://velu.org:443/Services/com/Echo"); 

       m.setRequestHeader("content-type", "application/xml"); 
       //m.setRequestHeader("Accept", "application/xml"); 
//    m.setRequestHeader("SOAPAction", "Echo"); 
       try { 

         ((PostMethod) m).setRequestEntity(new StringRequestEntity(getFileContent(), "application/xml", "UTF-8")); 
         System.out.println("VELU EXCUTING"); 
         client.executeMethod(m); 
         if (m.getStatusCode() == 200) { 
           System.out.println("VELU RECEIVED:" + m.getResponseBodyAsString()); 
         } 
       } catch (IOException e) { 
         System.out.println(e.toString()); 
       } finally { 
         m.releaseConnection(); 
       } 

     } 

     public static String getFileContent() { 

       BufferedReader br = null; 
       String fileContent = ""; 
       try { 

         br = new BufferedReader(new FileReader(
             "/home/user/velu/input-payload.txt")); // Note that this file format should be proper. 
         String sCurrentLine = ""; 
         while ((sCurrentLine = br.readLine()) != null) { 
           fileContent += sCurrentLine; 
         } 
         System.out.println(fileContent); 

       } catch (IOException e) { 
         e.printStackTrace(); 
       } finally { 
         try { 
           if (br != null) 
             br.close(); 
         } catch (IOException ex) { 
           ex.printStackTrace(); 
         } 
       } 
       return fileContent; 
     }