हम एक ऐप लिख रहे हैं जिसे HTTPS का उपयोग करके कुछ सर्वरों के साथ संवाद करना होगा। इसे एडब्ल्यूएस (एडब्लूएस पुस्तकालयों का उपयोग करके) और टीएलएस 1.2 का उपयोग करने वाली हमारी कुछ आंतरिक सेवाओं के साथ संवाद करने की आवश्यकता है।एचटीपी क्लाइंट एकाधिक टीएलएस प्रोटोकॉल का समर्थन करता है
मैं बदलकर शुरू कर दिया मेरी HttpClient एक TLS 1.2 SSLContext उपयोग करने के लिए:
public static SchemeRegistry buildSchemeRegistry() throws Exception {
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(createKeyManager(), createTrustManager(), new SecureRandom());
final SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", 443, new SSLSocketFactory(sslContext)));
return schemeRegistry;
}
और DefaultHttpClient वस्तु में इस SchemeRegistry (वसंत के माध्यम से) इंजेक्शन लगाने, लेकिन ऐसा लगता है कि मैं एडब्ल्यूएस से त्रुटियों हो और इसलिए मुझे लगता है अगर मैं दो HttpClients वसंत में परिभाषित किया गया है करने के लिए प्रयास
AmazonServiceException: Status Code: 403, AWS Service: AmazonSimpleDB, AWS Request ID: 5d91d65f-7158-91b6-431d-56e1c76a844c, AWS Error Code: InvalidClientTokenId, AWS Error Message: The AWS Access Key Id you provided does not exist in our records.
, एक: (मैं गलत हो सकता है) कि एडब्ल्यूएस TLS 1.2 का समर्थन नहीं करता (मैं यह संदेश प्राप्त नहीं करता है, तो मैं सिर्फ सामान्य DefaultHttpClient का उपयोग करें) जो टीएलएस 1.2 और एक डिफ़ॉल्ट का उपयोग करता है, मुझे फॉलो मिलता है त्रुटि है, जो मुझे लगता है कारण का मतलब है कि वसंत instantiating और दो HttpClient वस्तुओं autowiring पसंद नहीं करता:
SEVERE: Servlet /my-refsvc threw load() exception
java.lang.NullPointerException
at com.company.project.refsvc.base.HttpsClientFactory.<clinit>(BentoHttpsClientFactory.java:25)
...
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1031)
at
...
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
मैं HTTPS उपयोग नहीं किया है जावा में ज्यादा तो तुम तरह लोगों ने मुझे कुछ सलाह दे सकता है कृपया? 1) मैं स्प्रिंग को दो एचटीपी क्लाइंट ऑब्जेक्ट्स को अनुमति देने के लिए कैसे प्राप्त करूंगा और एक के लिए एडब्ल्यूएस सामान बीन्स के लिए वायर्ड किया जाएगा और दूसरा टीएलएस 1.2 सेवाओं 2 तक पहुंचने के लिए अन्य बीन्स के लिए वायर्ड किया जाएगा 2) या यह बदलना संभव है एक HttpClient ऑब्जेक्ट TLS1.2 (SSLContext, या स्कीम रजिस्ट्री या कुछ के माध्यम से) का प्रयास करने में सक्षम होने के लिए सक्षम है और यदि यह विफल हो जाता है तो TLS1.1 या 1.0 का प्रयास करें? 3) यदि दोनों संभव हैं, तो ऐसा करने का 'बेहतर' तरीका क्या होगा?
जब 'का उपयोग कर SSLContext.getInstance आप एक ही त्रुटि मिलती है के लिए इसे सक्षम करने के बारे में (" TLSv1.1 ") एक छोटे से ब्लॉग पोस्ट बनाया' या ' SSLContext.getInstance ("टीएलएस") '? – Bruno
हां, मुझे वही त्रुटि मिलती है। मैं सोच रहा हूं कि यह मेरा क्लाइंट-साइड सर्टिफिकेट है जो टीएलएस संस्करण की बजाय इसे गड़बड़ कर रहा है। – agentgonzo
डिफ़ॉल्ट रूप से 'SSLContext' का उपयोग करने का प्रयास करें ('SSLContext sslContext = SSLContext.getDefault()', पहले से प्रारंभ किया गया है)। अन्यथा, कम अनुकूलन आज़माएं: 'sslContext.init (createKeyManager(), null, null)' को TM और SecureRandom के लिए डिफ़ॉल्ट का उपयोग करना चाहिए। कीमैनगर के लिए कोई डिफ़ॉल्ट नहीं है, इसलिए आपके कीमैनगर कोड में अभी भी कुछ गलत हो सकता है (केवल सर्वर उपयोगी है यदि सर्वर क्लाइंट-प्रमाणपत्र का अनुरोध कर रहा हो)। – Bruno