`
xixinfei
  • 浏览: 411045 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
HttpsDemo https http://wangtaoenter.iteye.com/blog/1336614
public class HttpsDemo extends Activity implements OnClickListener
{
    private static final String TAG = "HttpsDemo";
    private static final String HTTS_URL = "https://192.168.7.39:8443/";
    private EditText editText;
    private Button button;

    /**
     * 私钥密码
     */
    private static final String CLIENT_KET_PASSWORD = "123456";

    /**
     * 信任证书密码
     */
    private static final String CLIENT_TRUST_PASSWORD = "123456";

    /**
     * 使用协议
     */
    private static final String CLIENT_AGREEMENT = "TLS";

    /**
     * 密钥管理器
     */
    private static final String CLIENT_KEY_MANAGER = "X509";

    /**
     * 信任证书管理器
     */
    private static final String CLIENT_TRUST_MANAGER = "X509";

    /**
     * 密库,这里用的是BouncyCastle密库
     */
    private static final String CLIENT_KEY_KEYSTORE = "BKS";

    /**
     * 密库,这里用的是BouncyCastle密库
     */
    private static final String CLIENT_TRUST_KEYSTORE = "BKS";

    private AssetManager mAssetManager = null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.https_demo);

        mAssetManager = getAssets();

        editText = (EditText) findViewById(R.id.url_entry_text);
        button = (Button) findViewById(R.id.go_url_btn);

        editText.setText(HTTS_URL);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v)
    {
        connect(editText.getText().toString());
    }

    private void connect(String httpsUrl)
    {
        java.net.URL url = null;
        HttpsURLConnection conn = null;
        InputStream inputs = null;

        try
        {
            //取得SSL的SSLContext实例   
            SSLContext sslContext = SSLContext.getInstance(CLIENT_AGREEMENT);
            //取得KeyManagerFactory实例   
            KeyManagerFactory keyManager = KeyManagerFactory
                .getInstance(CLIENT_KEY_MANAGER);
            //取得TrustManagerFactory的X509密钥管理器
            TrustManagerFactory trustManager = TrustManagerFactory
                .getInstance(CLIENT_TRUST_MANAGER);

            //取得BKS密库实例   
            KeyStore keyKeyStore = KeyStore.getInstance(CLIENT_KEY_KEYSTORE);
            KeyStore trustKeyStore = KeyStore
                .getInstance(CLIENT_TRUST_KEYSTORE);

            //加载证书和私钥,通过读取资源文件的方式读取密钥和信任证书(kclient:密钥;lt_client:信任证书) 
            InputStream is = mAssetManager.open("trust.keystore");
            //kclient:密钥
            keyKeyStore.load(is, CLIENT_KET_PASSWORD.toCharArray());
            is.reset();
            //lt_client:信任证书
            trustKeyStore.load(is, CLIENT_TRUST_PASSWORD.toCharArray());
            is.close();

            //初始化密钥管理器、信任证书管理器
            keyManager.init(keyKeyStore, CLIENT_KET_PASSWORD.toCharArray());
            trustManager.init(trustKeyStore);

            //初始化SSLContext   
            sslContext.init(keyManager.getKeyManagers(),
                trustManager.getTrustManagers(), null);

            url = new URL(HTTS_URL);
            conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(sslContext.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());

            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestProperty("Accept", "*/*");
            conn.setRequestProperty("Pragma", "No-cache");
            conn.setRequestProperty("Cache-Control", "no-cache");
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("accept-charset", "utf-8");
            conn.setRequestProperty("Content-Type", "text/xml");

            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            conn.setRequestMethod("GET");

            // 执行到该句就是开始建立连接并取得连接的响应结果
            int code = conn.getResponseCode();

            Log.i(TAG, "http response code is " + code);

            inputs = conn.getInputStream();

            int size = conn.getContentLength();

            Log.i(TAG, "getContentLength" + size);

            byte[] buf = new byte[10000];
            inputs.read(buf);
            Log.d(TAG, "res:" + new String(buf));

        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (KeyManagementException e)
        {
            e.printStackTrace();
        }
        catch (KeyStoreException e)
        {
            e.printStackTrace();
        }
        catch (CertificateException e)
        {
            e.printStackTrace();
        }
        catch (UnrecoverableKeyException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (conn != null)
            {
                conn.disconnect();
            }
        }

    }

    public class TrustAnyHostnameVerifier implements HostnameVerifier
    {
        public boolean verify(String hostname, SSLSession session)
        {
            return true;
        }
    }
}
Global site tag (gtag.js) - Google Analytics