Https 测试程序

来源:互联网 发布:姓名贴制作软件 编辑:程序博客网 时间:2024/05/08 19:57
static class MyX509TrustManager implements X509TrustManager {/* * The default X509TrustManager returned by IbmX509. We'll delegate decisions to it, and fall back to the logic in this class if the default X509TrustManager doesn't trust it. */X509TrustManager pkixTrustManager;MyX509TrustManager() throws Exception {// create a "default" JSSE X509TrustManager.// KeyStore用于存放证书,创建对象时 指定交换数字证书的加密标准KeyStore ks = KeyStore.getInstance("JKS");// 加载证书库keystore文件ks.load(new FileInputStream("D:/java/coffee-1.keystore"), "coffee".toCharArray());// TrustManager决定是否信任对方的证书TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(ks);TrustManager tms[] = tmf.getTrustManagers();/* * Iterate over the returned trustmanagers, look for an instance of X509TrustManager. If found, use that as our "default" trust manager. */for (int i = 0; i < tms.length; i++) {if (tms[i] instanceof X509TrustManager) {pkixTrustManager = (X509TrustManager) tms[i];return;}}/* * Find some other way to initialize, or else we have to fail the constructor. */throw new Exception("Couldn't initialize");}/* * Delegate to the default trust manager. */public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {try {pkixTrustManager.checkClientTrusted(chain, authType);} catch (CertificateException e) {// do any special handling here, or rethrow exception.e.printStackTrace();}}/* * Delegate to the default trust manager. */public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {try {pkixTrustManager.checkServerTrusted(chain, authType);} catch (CertificateException e) {/* * Possibly pop up a dialog box asking whether to trust the cert chain. */e.printStackTrace();}}/* * Merely pass this through. 返回可接受的发行人 */public X509Certificate[] getAcceptedIssuers() {return pkixTrustManager.getAcceptedIssuers();}}public static void main(String[] args) throws Exception {String url12036 = "https://192.168.1.102:8443";// Create a trust manager that does not validate certificate chainsTrustManager[] trustAllCerts = new TrustManager[] { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("TLS");// sslContext.init(null, null, null);sslContext.init(null, trustAllCerts, new java.security.SecureRandom());// HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());SSLSocketFactory ssf = sslContext.getSocketFactory();URL myURL = new URL(url12036);HttpsURLConnection httpsConn = (HttpsURLConnection) myURL.openConnection();httpsConn.setSSLSocketFactory(ssf);// getInputStream的时候 会调用 MyX509TrustManager#checkServerTrustedInputStreamReader ins = new InputStreamReader(httpsConn.getInputStream());int respInt = ins.read();while (respInt != -1) {System.out.print((char) respInt);respInt = ins.read();}ins.close();}

0 0
原创粉丝点击