मैं इस तथ्य मैं कॉलिंग WebService और होने SSL/प्रमाणपत्र मुद्दे
जावा
में आदि कुंजीस्टोर की स्थापना, मैं एक सोप वेब सेवा को कॉल करने के लिए कोशिश कर रहा हूँ के बारे में बहुत ज्यादा नहीं ज्ञान है कि के साथ शुरू होगा, मैं wsdl मिला , कोड उत्पन्न किया, इत्यादि। जब तक मैं इसे तैनात नहीं करता और डब्लूएस कॉल को ट्रिगर करने की कोशिश करता हूं तब तक सबकुछ ठीक लगता है। बिल्ला को- बिलाव 7.0.35
- जावा, JDK 1.6.0_39
- pfx फ़ाइल और पासवर्ड
- परियोजना मानक वेब अनुप्रयोग (युद्ध) के रूप में तैनात:
यहाँ मेरी सेटअप है
जब मैं कोड चलाता हूं, तो मुझे निम्न अपवाद मिला:
मेरी कीस्ट्रोक को प्रमाणपत्र स्थापित करने के लिए How to convert .pfx file to keystore with private key?:Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://tallyservices-qa.olson.com/tallyDemo2WebServices/tallyDemo2/sms: Received fatal alert: certificate_unknown
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1336)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1320)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 27 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1837)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1019)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1031)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:170)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1280)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1231)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:183)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1293)
... 30 more
मैं यहाँ सुझाव का पालन किया
keytool -importkeystore -srckeystore C:\somefolder\mypfxfile.pxf -srcstoretype pkcs12
-destkeystore C:\somefolder\clientcert.jks -deststoretype JKS
और मुझे मिल गया:
Enter destination keystore password: <mypassword>
Re-enter new password: <mypassword>
Enter source keystore password: <pxf_password>
Entry for alias 67eb31f6 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or
cancelled
तो सब कुछ अब तक अच्छा लग रहा है, मैं अपने बिल्ला बाउंस और सर्वलेट को फिर से मारना और मुझे अभी भी वही त्रुटि मिलती है।
मुझे और क्या याद आ रहा है? क्या मुझे प्रमाणपत्र या कुछ के बारे में टोमकैट बताने की ज़रूरत है?
कीस्टोर और प्रमाणपत्र क्षेत्र में मेरे नोब-नेस के लिए मदद और क्षमा के लिए अग्रिम धन्यवाद।
संपादित करें: तो मैं कार्लो Pellegrini`s मदद से लगा, कि मैं बिल्ला को कुंजीस्टोर जोड़ने की जरूरत: तो अब , मेरे बिल्ला अतिरिक्त JAVA_OPTS पैरामीटर के साथ शुरू कर दिया गया है:
"-Djavax.net.ssl.trustStore=C:\somefolder\clientcert.jks -Djavax.net.ssl.trustStorePassword=somepassword"
और अब मुझे मिल गया:
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
यहाँ से: Error - trustAnchors parameter must be non-empty और got java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty when using cas - मेरी truststore की तरह लगता है नहीं मिला है?
keytool -importkeystore -srckeystore C:\somefolder\mypfxfile.pxf -srcstoretype pkcs12 -destkeystore C:\somefolder\clientcert.jks -deststoretype JKS
असल कुंजीस्टोर, नहीं truststore में PXF डाल:
मैं अपने पहले आदेश लगा?
C:\somefolder>keytool -list -keystore "C:\somefolder\clientcert.jks"
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
67eb31f6, 13-Feb-2013, PrivateKeyEntry,
Certificate fingerprint (MD5): ... some fingerprint ...
तो मुझे यकीन है कि क्या मैं यहाँ
मैं नहीं जानता: trustStore से है, लेकिन अधिक महत्वपूर्ण बात, वहाँ पुस्तकालय मैं उपयोग कर रहा हूँ (CXF 2.7.1) मैं कोड में सीधे एसएसएल प्रॉपर्टी सेट अप करने के लिए है कि के साथ समस्या होने लगते हैं इस मामले में सटीक सेटअप, लेकिन अगर आप साइन अप कर रहे हैं या अपने संदेशों को अपनी निजी कुंजी से एन्क्रिप्ट कर रहे हैं, तो सर्वर की सार्वजनिक कुंजी होनी चाहिए। अगर यह केवल एसएसएल/टीएलएस है क्योंकि अपवाद सुझाव देता है, तो सर्वर प्रमाण पत्र पर भरोसा नहीं किया जा सकता है? – jhexp