1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.examples;
28
29 import javax.net.ssl.SSLPeerUnverifiedException;
30 import javax.net.ssl.SSLSession;
31
32 import org.apache.hc.client5.http.classic.methods.HttpGet;
33 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
34 import org.apache.hc.client5.http.impl.classic.HttpClients;
35 import org.apache.hc.client5.http.protocol.HttpClientContext;
36 import org.apache.hc.core5.http.HttpHost;
37 import org.apache.hc.core5.http.io.entity.EntityUtils;
38 import org.apache.hc.core5.http.message.StatusLine;
39
40
41
42
43
44 public class ClientSNI {
45
46 public final static void main(final String[] args) throws Exception {
47 try (CloseableHttpClient httpclient = HttpClients.createSystem()) {
48
49 final HttpHost target = new HttpHost("https", "www.google.com");
50 final HttpGet httpget = new HttpGet("https://www.google.ch/");
51
52 System.out.println("Executing request " + httpget.getMethod() + " " + httpget.getUri());
53
54 final HttpClientContext clientContext = HttpClientContext.create();
55 httpclient.execute(target, httpget, clientContext, response -> {
56 System.out.println("----------------------------------------");
57 System.out.println(httpget + "->" + new StatusLine(response));
58 EntityUtils.consume(response.getEntity());
59 final SSLSession sslSession = clientContext.getSSLSession();
60 if (sslSession != null) {
61 try {
62 System.out.println("Peer: " + sslSession.getPeerPrincipal());
63 System.out.println("TLS protocol: " + sslSession.getProtocol());
64 System.out.println("TLS cipher suite: " + sslSession.getCipherSuite());
65 } catch (final SSLPeerUnverifiedException ignore) {
66 }
67 }
68 return null;
69 });
70 }
71 }
72
73 }