পরীক্ষার উদ্দেশ্যে, আমি আমার ওকে এইচটিটিপি ক্লায়েন্টে একটি সকেট কারখানা যুক্ত করার চেষ্টা করছি যা প্রক্সি সেট হওয়ার সময় সমস্ত কিছুতে বিশ্বাস করে। এটি বহুবার হয়েছে, তবে আমার একটি বিশ্বাসযোগ্য সকেট কারখানার বাস্তবায়নটি কিছু অনুপস্থিত বলে মনে হচ্ছে:
class TrustEveryoneManager implements X509TrustManager {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
OkHttpClient client = new OkHttpClient();
final InetAddress ipAddress = InetAddress.getByName("XX.XXX.XXX.XXX"); // some IP
client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ipAddress, 8888)));
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[]{new TrustEveryoneManager()};
sslContext.init(null, trustManagers, null);
client.setSslSocketFactory(sslContext.getSocketFactory);
আমার অ্যাপ্লিকেশন থেকে কোনও অনুরোধ প্রেরণ করা হচ্ছে না এবং কোনও ব্যতিক্রম লগ করা হচ্ছে না বলে মনে হচ্ছে এটি ওকে এইচটিটিপি-র মধ্যে নিঃশব্দে ব্যর্থ হচ্ছে। আরও তদন্ত করার পরে, মনে Connection.upgradeToTls()
হয় হ্যান্ডশেক জোর করা হচ্ছে যখন OkHttp এর একটি ব্যতিক্রম গ্রাস করা আছে । আমাকে যে ব্যতিক্রম দেওয়া হচ্ছে তা হ'ল:javax.net.ssl.SSLException: SSL handshake terminated: ssl=0x74b522b0: SSL_ERROR_ZERO_RETURN occurred. You should never see this.
নিম্নলিখিত কোডটি SSLContext
এমন একটি উত্পাদন করে যা কোনও এসএসএলসকেট ফ্যাক্টরি তৈরি করতে মনোযোগের মতো কাজ করে যা কোনও ব্যতিক্রম ছুঁড়ে না:
protected SSLContext getTrustingSslContext() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
final SSLContextBuilder trustingSSLContextBuilder = SSLContexts.custom()
.loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true; // Accepts any ssl cert whether valid or not.
}
});
return trustingSSLContextBuilder.build();
}
সমস্যাটি হ'ল আমি আমার অ্যাপ্লিকেশন থেকে সমস্ত অ্যাপাচি এইচটিপিপিপ্লায়েন্ট নির্ভরতা পুরোপুরি সরিয়ে দেওয়ার চেষ্টা করছি। অ্যাপাচি এইচটিপিপ্লিনেন্টের সাথে অন্তর্নিহিত কোডটি SSLContext
যথেষ্ট সরল মনে হচ্ছে, তবে আমি স্পষ্টতই কিছু অনুভব করছি কারণ আমি এটির সাথে SSLContext
মেলে কনফিগার করতে পারি না ।
কেউ কি এসএসএল কনটেক্সট বাস্তবায়ন তৈরি করতে সক্ষম হবেন যা অ্যাপাচি এইচটিপিপিলেট ব্যবহার না করে আমি যা চাই তা করতে পারে?
java.net.SocketTimeoutException: Read timed out