| 
          
         | 
         
          
          
          使用jdk自带的keystore,里面包含官方的证书,主流网站都有,自己的可以使用keytool导入 
 
C:\Program Files\Java\jdk1.8.0_144/jre/lib/security/cacerts  默认密码changeit 
 
直接运行就能看到网页源码 
import java.net.*; 
import java.io.*; 
import javax.net.ssl.*; 
import javax.security.cert.X509Certificate; 
import java.security.KeyStore; 
import java.util.Arrays; 
 
/* 
 * This example shows how to set up a key manager to do client 
 * authentication if required by server. 
 * 
 * This program assumes that the client is not inside a firewall. 
 * The application can be modified to connect to a server outside 
 * the firewall by following SSLSocketClientWithTunneling.java. 
 */ 
public class SSLSocketClientWithClientAuth { 
 
    public static void main(String[] args) throws Exception { 
        String host = null; 
        int port = -1; 
        String path = null; 
//        for (int i = 0; i < args.length; i++) 
//            System.out.println(args[i]); 
 
//        if (args.length < 3) { 
//            System.out.println("USAGE: java SSLSocketClientWithClientAuth host port requestedfilepath"); 
//            System.exit(-1); 
//        } 
 
        try { 
//            host = args[0]; 
//            port = Integer.parseInt(args[1]); 
//            path = args[2]; 
 
            host = "github.com"; 
//            host = "blog.csdn.net"; 
//            host = "www.baidu.com"; 
            port = 443; 
            path = "/"; 
        } catch (IllegalArgumentException e) { 
            System.out.println("USAGE: java SSLSocketClientWithClientAuth host port requestedfilepath"); 
            System.exit(-1); 
        } 
 
        try { 
 
            /* 
             * Set up a key manager for client authentication 
             * if asked by the server.  Use the implementation's 
             * default TrustStore and secureRandom routines. 
             */ 
            SSLSocketFactory factory = null; 
            try { 
                SSLContext ctx; 
                KeyManagerFactory kmf; 
                KeyStore ks; 
                char[] passphrase = "changeit".toCharArray(); 
 
                ctx = SSLContext.getInstance("TLS"); 
                kmf = KeyManagerFactory.getInstance("SunX509"); 
                ks = KeyStore.getInstance("JKS"); 
 
                ks.load(new FileInputStream("C:\\Program Files\\Java\\jdk1.8.0_144" + "/jre/lib/security/cacerts"), passphrase); 
 
                kmf.init(ks, passphrase); 
                ctx.init(kmf.getKeyManagers(), null, null); 
 
                factory = ctx.getSocketFactory(); 
            } catch (Exception e) { 
                throw new IOException(e.getMessage()); 
            } 
 
            SSLSocket socket = (SSLSocket) factory.createSocket(host, port); 
 
            /* 
             * send http request 
             * 
             * See SSLSocketClient.java for more information about why 
             * there is a forced handshake here when using PrintWriters. 
             */ 
            System.out.println("start https request:" + host + " " + port + " " + path); 
            socket.startHandshake(); 
 
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); 
            out.println("GET " + path + " HTTP/1.1"); 
            out.println("Host: " + host); 
            out.println(); 
            out.flush(); 
 
            /* 
             * Make sure there were no surprises 
             */ 
            if (out.checkError()) 
                System.out.println( 
                        "SSLSocketClient: java.io.PrintWriter error"); 
 
            /* read response */ 
            BufferedReader in = new BufferedReader( 
                    new InputStreamReader( 
                            socket.getInputStream())); 
 
            String inputLine; 
 
            //最好没有空行会阻塞在这里 
            while ((inputLine = in.readLine()) != null) 
                System.out.println(inputLine); 
 
            in.close(); 
            out.close(); 
            socket.close(); 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
} |  
  ———————————————— 
原文链接:https://blog.csdn.net/c5113620/article/details/80441327 
 
 
程序猿的技术大观园:www.javathinker.net
          
          
          
          
         | 
        
      
 
          |