2012-08-04 12 views
7

पर ठीक काम करता है मेरा एंड्रॉइड प्रोजेक्ट एपीआई 15 का उपयोग कर रहा है। मैं HttpsURLConnection क्लास का उपयोग कर https पर सर्वर से कनेक्ट कर रहा हूं। सब कुछ WiFi पर बस ठीक काम करता है लेकिन अगर मैं वाईफ़ाई बंद कर देते हैं और 3 जी पर चलाया मैं निम्नलिखित मिल:3 जी से अधिक का उपयोग करते समय सर्टिफिकेट पथ के लिए ट्रस्ट एंकर नहीं मिला लेकिन वाईफाई

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:413) 
    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:257)  at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210) 
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:477) 
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432) 
    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
    at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)  at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280) 

अगर मैं कुछ गलत कर रहा हूँ, क्यों यह WiFi पर काम करेगा?

यहां कुछ और जानकारी दी गई है।

अगर मैं सर्वर प्रमाणपत्र जानकारी देखने पर openssl उपयोग करते हैं,

echo | openssl s_client -connect myserver.com:443 

जबकि

echo | openssl s_client -connect myserver.com:443 -servername myserver.com 

रिटर्न 'सही' प्रमाण पत्र एक सर्वर-स्तर स्व-हस्ताक्षरित प्रमाणपत्र देता है। मेरे सर्वर पर मेरे पास एकाधिक vhosts हैं, प्रत्येक अपने स्वयं के रैपिड्सस्ल-जारी प्रमाण के साथ, इसलिए मुझे लगता है कि मुझे लगता है कि मुझे एक टीएलएस-सक्षम क्लाइंट का उपयोग करने की आवश्यकता है। है वहाँ कुछ और

Name-based SSL virtual hosts only work for clients with TLS server name indication support 

अगर मैं सही अब तक, कि मेरे मोबाइल 3 जी नेटवर्क का क्या मतलब है हूँ TLS के साथ पंगा लेना हो सकता है या: कम से कम उस संदेश मैं स्टार्टअप पर अपने अपाचे लॉग में देखने की मेरी व्याख्या है मुझे करना चाहिए?

मैं कर सकते हैं बातें DefaultHttpClient उपवर्गीकरण और एक कीस्ट्रोक सर्वर स्व-हस्ताक्षरित प्रमाणपत्र युक्त आयात करके 3g से अधिक काम करने के लिए मिलता है, लेकिन यह निश्चित रूप से मेरे पसंदीदा विकल्प नहीं है।

+0

सर्वर का यूआरएल क्या है? – jww

उत्तर

0

-servername विकल्प फ़ील्ड Client Hello संदेश में सेट करता है जो हमें सही स्थिति का चयन करने में मदद करता है यदि लक्ष्य होस्ट में आपके मामले में बहुत कुछ शामिल है। हालांकि, यह समस्या से संबंधित नहीं है।

एसएसएल हैंडशेक के दौरान, प्रमाण पत्र श्रृंखला बनाने वाले विषय/जारीकर्ता जोड़े में प्रमाणपत्र वितरित किए जाते हैं।

आईई। google.com प्रमाणपत्र श्रृंखला इस तरह दिखता है:

openssl s_client -connect google.com:443 
CONNECTED(00000003) 
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA 
verify error:num=20:unable to get local issuer certificate 
verify return:0 
--- 
Certificate chain 
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com 
    i:/C=US/O=Google Inc/CN=Google Internet Authority G2 
1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2 
    i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 
2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 
    i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority 
--- 

ही प्राप्त हो, ग्राहक (रूट) शीर्ष पर नीचे से श्रृंखला में सभी जारीकर्ता मान्य करने के लिए कोशिश करता है। यदि क्लाइंट रूट प्रमाणपत्र को मान्य नहीं कर सका, Trust anchor for certification path not found संदेश प्रकट होता है।

तो, वाईफाई/3 जी मुद्दे पर वापस, शायद आपके मोबाइल नेटवर्क का DNS आपकी प्रमाणपत्र श्रृंखला में मध्य-जारीकर्ताओं में से किसी एक के पते को हल नहीं कर सका।

अद्यतन:

आपको अपने APK में अपने जारीकर्ता 'प्रमाण पत्र रख दिया और अपने कोड में TrustManager के माध्यम से जोड़ सकते हैं। यह दृष्टिकोण एक्सेस नेटवर्क प्रतिबंधों (यदि कोई हो) से उबर सकता है।

+0

प्रमाण पत्र सत्यापन के साथ DNS को वास्तव में क्या करना है? – EJP

+0

यदि डिवाइस सीए कीस्टोर में इंटरमीडिएट प्रमाणपत्रों में से कोई एक गायब है, तो किस प्रोटोकॉल से यह प्राधिकरण पा सकता है? इसके अलावा, कृपया यह उत्तर देखें: http://stackoverflow.com/questions/19220687/is-domain-name-of-the-server-checked-during-ssl-handshake –

संबंधित मुद्दे

 संबंधित मुद्दे