com.tmount.business.cloopen.util.CcopHttpClient.java Source code

Java tutorial

Introduction

Here is the source code for com.tmount.business.cloopen.util.CcopHttpClient.java

Source

/*
 *  Copyright (c) 2013 The CCP project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
 *  that can be found in the LICENSE file in the root of the web site.
 *
 *   http://www.cloopen.com
 *
 *  An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
package com.tmount.business.cloopen.util;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

public class CcopHttpClient {

    /**
     * SSL
     * @param hostname ??IP??
     * @param protocol ????TLS-??
     * @param port ??
     * @param scheme ????
     * @return HttpClient
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     */
    public DefaultHttpClient registerSSL(String hostname, String protocol, int port, String scheme)
            throws NoSuchAlgorithmException, KeyManagementException {

        //HttpClient
        DefaultHttpClient httpclient = new DefaultHttpClient();
        //SSL
        SSLContext ctx = SSLContext.getInstance(protocol);
        //???
        X509TrustManager tm = new X509TrustManager() {

            /**
             * ??
             */
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType)
                    throws java.security.cert.CertificateException {
                //?   ?   
            }

            /**
             * ???
             * @param chain ?
             * @param authType ???authTypeRSA
             */
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType)
                    throws java.security.cert.CertificateException {
                if (chain == null || chain.length == 0)
                    throw new IllegalArgumentException("null or zero-length certificate chain");
                if (authType == null || authType.length() == 0)
                    throw new IllegalArgumentException("null or zero-length authentication type");

                boolean br = false;
                Principal principal = null;
                for (X509Certificate x509Certificate : chain) {
                    principal = x509Certificate.getSubjectX500Principal();
                    if (principal != null) {
                        br = true;
                        return;
                    }
                }
                if (!br) {
                    throw new CertificateException("????");
                }
            }

            /**
             * CA??
             */
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };

        //?SSL
        ctx.init(null, new TrustManager[] { tm }, new java.security.SecureRandom());
        //SSL
        SSLSocketFactory socketFactory = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        Scheme sch = new Scheme(scheme, port, socketFactory);
        //SSL
        httpclient.getConnectionManager().getSchemeRegistry().register(sch);
        return httpclient;
    }
}