जावा एसएसएल और प्रमाणित कीस्टोर


165

मेरे जावा प्रोग्राम को कैसे पता चलता है कि प्रमाण पत्र वाला मेरा कीस्टोर कहाँ है? या वैकल्पिक रूप से मैं अपने जावा प्रोग्राम को कैसे बताऊं कि कीस्टोर को कहां देखना है?

किसी तरह से कीस्टर को निर्दिष्ट करने के बाद, क्लाइंट को सर्वर को प्रमाणित करने के लिए उपयोग करने के लिए प्रमाण पत्र कैसे निर्दिष्ट करें?


बेहतर है कि System.setProperty सेटिंग (नीचे दिए गए दृष्टिकोण) के उपयोग से बचें: देखें: docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/… , SSLContext के लिए KeyManagerFactory का निर्माण कैसे करें
Marek- ए-

जवाबों:


111
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);

4
किसी को पता है कि यह एक विंडोज़ बॉक्स पर कैसे संदर्भित किया जाता है? System.setProperty ("javax.net.ssl.trustStore", "C: \\ Program Files (x86) \\ Java \\ jdk1.7.0_21 \\ jre \\ lib \\ सुरक्षा \\ cacerts"); मेरे लिए काम नहीं कर रहा है :(
simgineer

4
विंडोज पर, निर्दिष्ट पथनाम को बैकस्लैश, \ के स्थान पर आगे स्लैश, / का उपयोग करना चाहिए।
Droidman

क्या यह काम किया? मैंने उसी कोड का उपयोग किया जहां मेरी 'jks' फ़ाइल में CA प्रमाणपत्र है। लेकिन मुझे अभी भी javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: ट्रांसपोर्ट त्रुटि: 403 त्रुटि: निषिद्ध त्रुटि जब मैं SOAP जनरेट किए गए स्टब के माध्यम से क्लाइंट कोड कॉल करता हूं। कोई विचार?
james2611nov

1
एक पासवर्ड सिस्टम प्रॉपर्टी (javax.net.ssl.trustStorePassword) भी है। भी JVM तर्क -Djavax.net.ssl.trustStore = clientTrustStore.key -Djavax.net.ssl.trustStorePassword = customPassword संदर्भ लें के रूप में पारित किया जा सकता है docs.oracle.com/javadb/10.8.3.0/adminguide/cadminsslclient.html
Kingsly

@ james2611nov: यदि आपको HTTPS समापन बिंदु पर कॉल करने में HTTP 403 त्रुटि (या कोई अन्य HTTP प्रतिसाद) मिल रही है, तो इसका मतलब है कि आप सफलतापूर्वक TLS सेटअप पा चुके हैं: TLS चैनल सेट होने के बाद ही HTTP इंटरैक्शन होता है अन्यथा उन्हें संरक्षित नहीं किया जा सकता)। तो - हाँ, इस जवाब ने स्पष्ट रूप से आपके लिए काम किया। :-)
ruakh

295

SSL गुणों को सिस्टम गुणों के माध्यम से JVM स्तर पर सेट किया जाता है। मतलब आप प्रोग्राम चलाने के दौरान या तो उन्हें सेट कर सकते हैं (java -D ....) या फिर आप उन्हें System.setProxtty कर कोड में सेट कर सकते हैं।

आपके द्वारा निर्धारित विशिष्ट कुंजी नीचे दी गई हैं:

javax.net.ssl.keyStore - एक आवेदन प्रक्रिया के स्वयं के प्रमाण पत्र और निजी कुंजी युक्त जावा कीस्टोर फ़ाइल का स्थान। विंडोज पर, निर्दिष्ट पथनाम को बैकस्लैश के स्थान पर आगे स्लैश, / का उपयोग करना चाहिए।

javax.net.ssl.keyStorePassword - javax.net.ssl.keyStore द्वारा निर्दिष्ट कीस्टोर फ़ाइल से निजी कुंजी तक पहुंचने के लिए पासवर्ड। यह पासवर्ड दो बार उपयोग किया जाता है: कीस्टोर फाइल (स्टोर पासवर्ड) को अनलॉक करने के लिए, और कीस्टोर (की पासवर्ड) में संग्रहीत निजी कुंजी को डिक्रिप्ट करने के लिए।

javax.net.ssl.trustStore - इस आवेदन प्रक्रिया (ट्रस्ट स्टोर) द्वारा विश्वसनीय सीए प्रमाणपत्रों के संग्रह वाले जावा कीस्टोर फ़ाइल का स्थान। विंडोज पर, निर्दिष्ट pathname को /बैकस्लैश के स्थान पर , आगे के स्लैश का उपयोग करना चाहिए \

यदि एक ट्रस्ट स्टोर स्थान इस संपत्ति का उपयोग करने के लिए निर्दिष्ट नहीं है, तो SunJSSE कार्यान्वयन निम्न स्थानों (क्रम में) में कीस्टोर फ़ाइल की खोज करता है और उसका उपयोग करता है:

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - द्वारा निर्दिष्ट कीस्टोर फ़ाइल (स्टोर पासवर्ड) को अनलॉक करने के लिए पासवर्ड javax.net.ssl.trustStore

javax.net.ssl.trustStoreType - (वैकल्पिक) जावा कीस्टोर फ़ाइल प्रारूप के लिए, इस गुण में मान jks (या JKS) है। आप सामान्य रूप से इस संपत्ति को निर्दिष्ट नहीं करते हैं, क्योंकि इसका डिफ़ॉल्ट मान पहले से ही jks है।

javax.net.debug - एसएसएल / टीएलएस परत के लिए लॉगिंग पर स्विच करने के लिए, इस संपत्ति को एसएसएल पर सेट करें।


17
यह उस दस्तावेज़ से लिंक करना अधिक उपयुक्त होगा जहाँ से यह उद्धृत किया गया है। मुझे लगता है कि यह है: fusesource.com/docs/broker/5.3/security/SSL-SysProps.html
ब्रूनो

4
आधिकारिक दस्तावेज JSSE संदर्भ गाइड होना चाहिए: docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/…
aleung

4
JDK7 docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/… अब अधिक उपयुक्त है।
रिक -777

11
जो कोई भी सिस्टम ट्रस्ट स्टोर को संपादित करना चाहता है, उसके लिए डिफ़ॉल्ट पासवर्ड "चेंज" है: community.oracle.com/thread/1540678?start=0&tstart=0
cwc

Javax.net.ssl.trustStorePassword प्रोप के लिए +1। मैं थोड़ी देर के लिए चारों ओर देख रहा था और यह पहली बार था जिसने इसका उल्लेख किया था।
गुड़

22

सिर्फ चेतावनी का एक शब्द। यदि आप जावा 9 में एक मौजूदा जेकेएस कीस्टोर खोलने की कोशिश कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप निम्नलिखित गुणों का भी "जेकेएस" के रूप में मूल्य के साथ उल्लेख करें:

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

इसका कारण यह है कि java.security फ़ाइल में दिए गए डिफ़ॉल्ट कीस्टोर प्रकार को Java 9 के बाद से jk से pkcs12 में बदल दिया गया है।


11

सबसे पहले, कीस्टोर्स के दो प्रकार हैं।

व्यक्तिगत और सामान्य

एप्लिकेशन स्टार्टअप या सिस्टम के डिफ़ॉल्ट में इंगित एक का उपयोग करेगा।

यह एक अलग फ़ोल्डर होगा यदि JRE या JDK चल रहा है, या यदि आप व्यक्तिगत या "वैश्विक" एक की जांच करते हैं।

वे भी एन्क्रिप्टेड हैं

संक्षेप में, मार्ग इस प्रकार होगा:

$JAVA_HOME/lib/security/cacerts "सामान्य एक" के लिए, जिसके पास प्राधिकरणों के लिए सभी CA हैं और यह काफी महत्वपूर्ण है।


प्रकार 'कीस्टोर' और 'ट्रस्टस्टोर' हैं। कृपया निरर्थक शब्दावली का आविष्कार न करें।
लोर्न

9

आप -Dनीचे दिए गए गुणों का उपयोग करके रनटाइम पर पथ का उल्लेख भी कर सकते हैं

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

मेरे अपाचे स्पार्क एप्लिकेशन में, मैं --confविकल्प के रूप में और extraJavaoptionsस्पार्क-सबमिट का उपयोग करके सीट्स और कीस्टोर का मार्ग प्रदान करता था

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.