2011-09-29 17 views
7

पर एकाधिक ट्रस्टस्टोर सेट करना मेरे पास एक वेबलॉग सर्वर पर चल रहा एक जावा एप्लिकेशन है। आवेदन जो बाहरी वेब सेवाओं से कनेक्ट करने SSL का उपयोग दो अलग मॉड्यूल है - पर एक्सिस निर्मित - - truststore एक moudle बी का उपयोग करता है - मान लीजिए कि मॉड्यूल एक और मॉड्यूल बीएक ही JVM

मॉड्यूल एक जाने वसंत-ws पर बना है - truststore का उपयोग करता है बी

मॉड्यूल ए मौजूद है। मॉड्यूल बी पेश किया जा रहा है।

मुझे जेवीएम में ट्रस्टस्टोर को गतिशील रूप से सेट करने में सक्षम होना चाहिए, जिसके आधार पर कौन सा मॉड्यूल लागू किया जा रहा है।

कुछ बाधाओं के कारण मेरे पास कस्टम कुंजी प्रबंधक बनाने के लिए विकल्प नहीं है। - एक ट्रस्टस्टोर

का उपयोग करें मैंने ट्रस्टस्टोर सेट करने के लिए System.setProperty im मॉड्यूल बी कोडबेस का उपयोग करने का प्रयास किया। हालांकि यह केवल तभी काम करता है जब मॉड्यूल बी पहले आ जाए। उदाहरण के लिए - कहें कि मेरे पास JVM का नया पुनरारंभ है, तो मैं मॉड्यूल ए का आह्वान करता हूं - यह सेट है यह स्वयं का ट्रस्टस्टोर है JVM में मैं मॉड्यूल बी - यह विफल रहता है - यह JVM में स्वयं का ट्रस्टस्टोर सेट नहीं करता है मैंने System.setProperty विधि का उपयोग किया है।

क्या मुझे कुछ याद आ रहा है या यह बस है कि System.setProperty मौजूदा सेट मानों को ओवरराइड नहीं करता है। यदि हां, तो मेरे विकल्प यहां क्या हैं।

+0

आपको दो ट्रस्टस्टोरों की आवश्यकता क्यों है? एक ट्रस्टस्टोर केवल आपको बताता है कि सहकर्मी को प्रमाणित करने के लिए आप कौन सी सीए पर भरोसा कर सकते हैं। यह प्रति मॉड्यूल अलग क्यों होगा? – EJP

+0

कृपया इसे देखें, यह आपकी मदद कर सकता है: http://stackoverflow.com/questions/1793979/registering-multiple-keystores-in-jvm/ – Raz

उत्तर

14

आप रनटाइम पर गतिशील रूप से विश्वसनीय कुंजी स्टोर लोड कर सकते हैं।

// load your key store as a stream and initialize a KeyStore 
InputStream trustStream = ...  
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  

// if your store is password protected then declare it (it can be null however) 
char[] trustPassword = ... 

// load the stream to your store 
trustStore.load(trustStream, trustPassword); 

// initialize a trust manager factory with the trusted store 
TrustManagerFactory trustFactory = 
    TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  
trustFactory.init(trustStore); 

// get the trust managers from the factory 
TrustManager[] trustManagers = trustFactory.getTrustManagers(); 

// initialize an ssl context to use these managers and set as default 
SSLContext sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, trustManagers, null); 
SSLContext.setDefault(sslContext); 

से सावधान रहें, क्योंकि SSLContext.getDefault() तुम वापस देना होगा डिफ़ॉल्ट संदर्भ में जो आप संशोधित नहीं कर सकते, तो आप एक नया बना है, प्रारंभ यह तो डिफ़ॉल्ट के रूप में इस नई संदर्भ निर्धारित किया है।

नीचे की रेखा यह है कि यदि आप चाहें तो किसी भी ट्रस्ट स्टोर का उपयोग कर सकते हैं।