Apache HttpClient - Özel SSL Bağlamı
Secure Socket Layer kullanarak, istemci ve sunucu arasında güvenli bir bağlantı kurabilirsiniz. Kredi kartı numaraları, kullanıcı adları, şifreler, pimler vb. Gibi hassas bilgilerin korunmasına yardımcı olur.
Kullanarak kendi SSL bağlamınızı oluşturarak bağlantıları daha güvenli hale getirebilirsiniz. HttpClient kütüphane.
HttpClient kitaplığını kullanarak SSLContext'i özelleştirmek için aşağıda verilen adımları izleyin -
Adım 1 - SSLContextBuilder nesnesi oluşturun
SSLContextBuilderSSLContext nesneleri için oluşturucudur. Kullanarak nesnesini oluşturuncustom() yöntemi SSLContexts sınıf.
//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();
Adım 2 - Anahtar Deposunu Yükleyin
Yolda Java_home_directory/jre/lib/security/, cacerts adlı bir dosya bulabilirsiniz. Bunu anahtar deposu dosyanız olarak kaydedin (.jks uzantısıyla). Anahtar deposu dosyasını ve şifresini yükleyin (changeit varsayılan olarak) kullanarak loadTrustMaterial() yöntemi SSLContextBuilder sınıf.
//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file, "changeit".toCharArray());
Adım 3 - Bir SSLContext nesnesi oluşturun
Bir SSLContext nesnesi, güvenli bir soket protokolü uygulamasını temsil eder. Kullanarak bir SSLContext oluşturunbuild() yöntem.
//Building the SSLContext
SSLContext sslContext = SSLBuilder.build();
Adım 4 - SSLConnectionSocketFactory nesnesinin oluşturulması
SSLConnectionSocketFactoryTSL ve SSL bağlantıları için katmanlı bir soket fabrikasıdır. Bunu kullanarak, güvenilir sertifikalar listesini kullanarak Https sunucusunu doğrulayabilir ve verilen Https sunucusunun kimliğini doğrulayabilirsiniz.
Bunu birçok şekilde yaratabilirsiniz. Oluşturma şekline bağlı olarakSSLConnectionSocketFactory nesne, tüm ana bilgisayarlara izin verebilir, yalnızca kendinden imzalı sertifikalara izin verebilir, yalnızca belirli protokollere izin verebilir, vb.
To allow only particular protocols, oluşturmak SSLConnectionSocketFactory nesnesini bir SSLContext nesnesi geçirerek, protokolleri temsil eden dize dizisinin desteklenmesi gerekir, şifre takımlarını temsil eden dize dizisinin desteklenmesi gerekir ve yapıcısına bir HostnameVerifier nesnesi.
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
To allow all hosts, oluşturmak SSLConnectionSocketFactory nesnesini bir SSLContext nesnesi ve bir NoopHostnameVerifier nesne.
//Creating SSLConnectionSocketFactory SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
Adım 5 - HttpClientBuilder nesnesi oluşturun
Bir HttpClientBuilder nesnesi oluşturun. custom() yöntemi HttpClients sınıf.
//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Adım 6 - SSLConnectionSocketFactory nesnesini ayarlayın
SSLConnectionSocketFactory nesnesini şu şekilde ayarlayın: HttpClientBuilder kullanmak setSSLSocketFactory() yöntem.
//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
Adım 7 - CloseableHttpClient nesnesini oluşturun
İnşa et CloseableHttpClient nesneyi çağırarak build() yöntem.
//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();
Adım 8 - Bir HttpGet nesnesi oluşturun
HttpGet sınıfı, belirli bir sunucunun bilgilerini bir URI kullanarak alan HTTP GET isteğini temsil eder.
URI'yi temsil eden bir dize ileterek HttpGet sınıfını başlatarak bir HTTP GET isteği oluşturun.
//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");
Adım 9 - İsteği gerçekleştirin
İsteği kullanarak gerçekleştirin execute() yöntem.
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);
Misal
Aşağıdaki örnek, SSLContrext'in özelleştirilmesini göstermektedir -
import java.io.File;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
public class ClientCustomSSL {
public final static void main(String[] args) throws Exception {
//Creating SSLContextBuilder object
SSLContextBuilder SSLBuilder = SSLContexts.custom();
//Loading the Keystore file
File file = new File("mykeystore.jks");
SSLBuilder = SSLBuilder.loadTrustMaterial(file,
"changeit".toCharArray());
//Building the SSLContext usiong the build() method
SSLContext sslcontext = SSLBuilder.build();
//Creating SSLConnectionSocketFactory object
SSLConnectionSocketFactory sslConSocFactory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
//Creating HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the SSLConnectionSocketFactory
clientbuilder = clientbuilder.setSSLSocketFactory(sslConSocFactory);
//Building the CloseableHttpClient
CloseableHttpClient httpclient = clientbuilder.build();
//Creating the HttpGet request
HttpGet httpget = new HttpGet("https://example.com/");
//Executing the request
HttpResponse httpresponse = httpclient.execute(httpget);
//printing the status line
System.out.println(httpresponse.getStatusLine());
//Retrieving the HttpEntity and displaying the no.of bytes read
HttpEntity entity = httpresponse.getEntity();
if (entity != null) {
System.out.println(EntityUtils.toByteArray(entity).length);
}
}
}
Çıktı
Yürütüldüğünde, yukarıdaki program aşağıdaki çıktıyı üretir.
HTTP/1.1 200 OK
1270