Ste*_*eve 6 java ssl httpclient
当我执行以下代码时,为什么第一次握手是SSLv2,而不是TLSv1或SSLv3?
如何在Java中使用TLSV1或SSLV3进行首次握手?
String host = "www.google.com";
String url = "/adsense/?sourceid=aso&subid=ZH_CN-ET-AS-ADSBY6&medium=link&hl=zh_CN";
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
SSLSocketFactory factory = ctx.getSocketFactory();
Socket socket = factory.createSocket(host, 443);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.write("GET " + url + " HTTP/1.0");
out.flush();
out.close();
in.close();
Run Code Online (Sandbox Code Playgroud)
小智 17
对于TLSv1:使用启动客户端jvm
-Dhttps.protocols="TLSv1"
Run Code Online (Sandbox Code Playgroud)
或使用
System.setProperty("https.protocols", "TLSv1");
Run Code Online (Sandbox Code Playgroud)
为我解决了这个问题.
用途SSLSocket:
SSLSocket socket = factory.createSocket(host, 443);
String[] newProtocols = {"TLSv1"};
socket.setEnabledProtocols(newProtocols);
Run Code Online (Sandbox Code Playgroud)