5

मैं अपनी खुद की बीकेएस फ़ाइल आयात करने की कोशिश कर रहा हूं, जिसमें मेरा स्वयं हस्ताक्षरित प्रमाणपत्र है लेकिन मैं ओकेएचटीटीपी के साथ परेशानी में भाग रहा हूं। मैं इसे bks फ़ाइल के साथ करना चाहता हूं, मैंने इसे sha512/के माध्यम से भी काम किया है।स्क्वायर ओकेएचटीटीपी सर्टिफिकेट पिनिंग - एसएसएल सॉकेट फैक्टरी त्रुटि

मुझे यह कोड कई ट्यूटोरियल से मिला है और मुझे पता है कि समस्या है, लेकिन इसे ठीक नहीं कर सकता।

import android.content.Context; 
import android.util.Log; 

import java.io.InputStream; 
import java.security.KeyStore; 

import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSocketFactory; 
import javax.net.ssl.TrustManagerFactory; 

import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.Response; 

public class Pinning 
{ 
    Context context; 
    public static String TRUST_STORE_PASSWORD = "your_secret"; 
    private static final String ENDPOINT = "https://api.yourdomain.com/"; 

public Pinning(Context c) { 
    this.context = c; 
} 

private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) { 
    try { 
     KeyStore trusted = KeyStore.getInstance("BKS"); 
     InputStream in = context.getResources().openRawResource(R.raw.mytruststore); 
     trusted.load(in, "mypass".toCharArray()); 
     SSLContext sslContext = SSLContext.getInstance("TLS"); 
     TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
       TrustManagerFactory.getDefaultAlgorithm()); 
     trustManagerFactory.init(trusted); 
     sslContext.init(null, trustManagerFactory.getTrustManagers(), null); 
     return sslContext.getSocketFactory(); 
    } catch (Exception e) { 
     Log.e("MyApp", e.getMessage(), e); 
    } 
    return null; 
} 


public void makeRequest() { 
    try { 
     OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)); 

     Request request = new Request.Builder() 
       .url(ENDPOINT) 
       .build(); 

     Response response = client.newCall(request).execute(); 

     Log.d("MyApp", response.body().string()); 

    } catch (Exception e) { 
     Log.e("MyApp", e.getMessage(), e); 

    } 
} 
} 

अब मैं निम्न पंक्ति के भीतर निम्न त्रुटि हो रही है:

OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)).; 

त्रुटि: okHTTPClient में

SSLSocketFactory javax.net.SSLSocketFactory लिए लागू किया जा cannt।

यदि आप आयात के भीतर देखते हैं तो आप निम्नलिखित 3 javax से देखते हैं।

import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSocketFactory; 
import javax.net.ssl.TrustManagerFactory; 

तो मुझे मिसमैच मिला। ऐसा लगता है कि मुझे अपनी बीएस फाइल के साथ एक ठीक एचटीटीपी - sslSocketFactory की आवश्यकता है। लेकिन मुझे उस पर एक कामकाजी स्पष्टीकरण नहीं मिल रहा है। मैं भी 3.3.1

compile 'com.squareup.okhttp3:okhttp:3.3.1' 

okHTTP उपयोग कर रहा हूँ मैं यहाँ पाया गया कि स्पष्टीकरण/समाधान: How can I pin a certificate with Square OKHTTP?। जैसा पहले बताया गया है। मैं bks फ़ाइल का उपयोग करना चाहता हूं, sha512/विधि नहीं।

इसलिए मुझे पता होना चाहिए कि javax.ssl.factory को ठीक करने के लिए कैसे ठीक है एचटीटीपीटी-एसएसएल फैक्ट्री या जेनरेट बीक्स फ़ाइल के साथ okHTTPsslFactory कैसे बनाएं।

इसके अलावा विधि setSSLSocketFactory अब OKHTTP 3.1.1 में उपलब्ध नहीं है।

मैं वास्तव में आपकी मदद की सराहना करता हूं और इस प्रश्न को प्राप्त करने के लिए समय निकालने के लिए धन्यवाद!

उत्तर

0

आप निम्न सिंटैक्स का उपयोग करना चाहिए बजाय

OkHttpClient client = new OkHttpClient.Builder() 
      .sslSocketFactory(getPinnedCertSslSocketFactory(this.context)) 
      .build(); 

आशा है कि यह मदद करता है!

+1

ओह मैन धन्यवाद! मैं मंद हूँ! मैं जोड़ने के लिए भूल गया है .बिल्डर()। मुझ पर शर्म की बात है :/ – user3325230

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