`
月下独酌
  • 浏览: 130852 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

android https之三

 
阅读更多
android https之一
android https之二
android https之三

	private static void installCert(String host, int port, String passwd,
			String sslProtocol) {
		try {
			String trustStorePath = System
					.getProperty("javax.net.ssl.trustStore");
			// File keystoreFile = new File(trustStorePath);
			// 由于android权限原因,无法读取trustStorePath="//system/etc/security/cacerts.bks"文件,此处由sdcard代替
			File keystoreFile = new File("/sdcard/cacerts.bks");
			InputStream in = new FileInputStream(keystoreFile);
			KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
			ks.load(in, passwd.toCharArray());
			in.close();

			SSLContext context = SSLContext.getInstance(sslProtocol);
			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance(TrustManagerFactory.getDefaultAlgorithm());
			tmf.init(ks);

			X509TrustManager defaultTrustManager = (X509TrustManager) tmf
					.getTrustManagers()[0];
			SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
			context.init(null, new TrustManager[] { tm }, null);
			javax.net.ssl.SSLSocketFactory factory = context.getSocketFactory();
			boolean istrusted = false;
			try {
				SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
				socket.setSoTimeout(50000);
				socket.startHandshake();
				socket.close();
				istrusted = true;
			} catch (SSLException e) {
				Log.i("xx", e.getMessage());
				istrusted = false;
			}
			if (!istrusted) {
				X509Certificate[] chain = tm.chain;
				if (chain == null) {
					return;
				}
				ks.setCertificateEntry(host + "_" + 0, chain[0]);
				// 如果想更改新密码,这个passwd替换成新密码即可
				ks.store(new FileOutputStream(new File("/sdcard/cacerts.bks")),
						passwd.toCharArray());
			}

		} catch (FileNotFoundException e) {
			Log.e("xx", e.getMessage());
		} catch (NoSuchAlgorithmException e) {
			Log.e("xx", e.getMessage());
		} catch (CertificateException e) {
			Log.e("xx", e.getMessage());
		} catch (IOException e) {
			Log.e("xx", e.getMessage());
		} catch (KeyStoreException e) {
			Log.e("xx", e.getMessage());
		} catch (KeyManagementException e) {
			Log.e("xx", e.getMessage());
		}
	}

	private static class SavingTrustManager implements X509TrustManager {

		private final X509TrustManager tm;
		private X509Certificate[] chain;

		SavingTrustManager(X509TrustManager tm) {
			this.tm = tm;
		}

		public X509Certificate[] getAcceptedIssuers() {
			throw new UnsupportedOperationException();
		}

		public void checkClientTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
			throw new UnsupportedOperationException();
		}

		public void checkServerTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
			this.chain = chain;
			tm.checkServerTrusted(chain, authType);
		}
	}
}

分享到:
评论
3 楼 月下独酌 2012-08-29  
Rhamiss 写道
请问这是从sdcard安装ca证书的源代码么?能详述么


具体可以参考android源码里面的source/package/app/CertInstaller项目。
2 楼 月下独酌 2012-08-29  
Rhamiss 写道
请问这是从sdcard安装ca证书的源代码么?能详述么


这个是用来安装HTTPS证书的

通过httpclient请求https地址的时候、如果本地没有安装https的证书,会返回401未授权。

上面的例子的意思是,当请求的https地址的安全证书未安装的时候、先安装证书。然后再通过

httpclient进行访问。

这个和从SDCard安装ca证书的过程差不多的。

不过android从sdcard安装ca证书没这么复杂、SDK里面有现成的方法。

通过android.credentials.INSTALL这个intent就可实现安装。
1 楼 Rhamiss 2012-08-20  
请问这是从sdcard安装ca证书的源代码么?能详述么

相关推荐

    Android中Https请求get和post

    在Android中,我们通常会用到HttpURLConnection或者第三方库如OkHttp来实现HTTPS请求。 一、GET请求 GET请求是最常见的HTTP方法,用于获取资源。在Android中使用HTTPS的GET请求,可以参考以下步骤: 1. 配置信任...

    Android Https通信改进版

    在Android开发中,HTTPS通信是保护用户数据安全的重要手段,特别是在传输敏感信息如登录凭证、个人信息等时。本文将深入探讨Android中HTTPS通信的改进版,以提高应用的安全性和性能。 首先,理解HTTPS的核心概念至...

    android https 双向验证

    在Android开发中,HTTPS协议是用于安全网络通信的重要手段,它可以保护数据的隐私性和完整性,防止中间人攻击。然而,通常的HTTPS连接仅进行单向验证,即客户端验证服务器的身份,而服务器并不验证客户端。但在某些...

    AndroidHttps服务器端和客户端简单实例

    在Android开发中,HTTPS协议常用于确保数据传输的安全性,防止数据被窃取或篡改。本实例将探讨如何在Android环境下实现HTTPS服务器端和客户端的简单交互,支持单向和双向验证。以下是对实现这一功能所需的知识点的...

    android+https的例子

    3. **验证服务端证书**: 在HTTPS通信中,客户端通常会验证服务器的身份,这涉及到证书链的检查。Android提供了`TrustManager`接口,通过实现`X509TrustManager`,我们可以自定义证书验证逻辑。通常,我们需要检查...

    android https遇到自签名证书/信任证书

    在正常情况下,服务器会提供由权威证书颁发机构(CA)签发的数字证书,客户端(如Android设备)会验证这个证书的有效性,确保与之通信的服务器是真实的,而非中间人攻击。 二、自签名证书 自签名证书是由服务器自身...

    Android高薪之路:Android程序员面试宝典 李宁

    《Android高薪之路:Android程序员面试宝典》目录: 第1章 Android入门 1 1 关于Android的非技术问题 1 1 1 为什么看好 Android 1 1 2 以前是否从事过Android的工作 做过哪些工作 1 1 3 你做的最复杂的界面是什么 1 ...

    简单的android访问https

    总的来说,Android访问HTTPS涉及到网络通信的安全策略、证书验证、SSL/TLS协议的使用,以及可能的网络配置和第三方库的选择。理解这些知识点对于开发安全、可靠的Android应用至关重要。在实际开发过程中,应遵循最佳...

    Android实现https网络访问

    Android实现https网络访问,四种实现方式:1、客户端添加指定信任cer证书。2、客户端信任所有证书。3、HttpClient方式实现,支持所有Https免验证方式链接(与2类似,只不过采用HttpClient方式实现)。4、HttpClient...

    android 使用webview控件,注意在android9.0以后必须使用https才能访问网页

    在Android应用开发中,WebView控件是一个非常重要的组件,它允许开发者在应用程序内嵌入一个浏览器,以便用户能够浏览网页内容。然而,随着网络安全性的不断提升,Android系统对WebView的使用也有了更严格的要求。在...

    Android Studio Dolphin (android-studio-2021.3.1.3-mac.part1.rar)

    Android Studio Dolphin (2021.3.1) Canary 3 (android-studio-2021.3.1.3-mac.zip)海豚 适用于macOS Intel芯片系统,文件分割成两个压缩包,必须一起下载两个压缩包进行解压使用: android-studio-2021.3.1.3-mac...

    Android利用Http下载文件

    在Android中,我们通常使用HttpURLConnection或者第三方库如OkHttp来发起Http请求并接收响应。 1. **使用HttpURLConnection下载文件**: - 首先,建立网络连接,通过`URL.openConnection()`创建HttpURLConnection...

    android客户端发送https请求

    在Android开发中,为了保障数据传输的安全性,通常会使用HTTPS协议进行网络通信。HTTPS是HTTP(超文本传输协议)与SSL/TLS(安全套接层/传输层安全)的结合,它能提供身份验证、数据加密以及消息完整性检查,防止...

    Android Studio Dolphin (android-studio-2021.3.1.3-mac_arm.part1)

    Android Studio Dolphin (2021.3.1) Canary 3 (android-studio-2021.3.1.3-mac_arm.zip)海豚 适用于macOS Arm芯片系统,文件分割成两个压缩包,必须一起下载两个压缩包进行解压使用: android-studio-2021.3.1.3-...

    Android Studio Dolphin (android-studio-2021.3.1.4-mac.part2)

    Android Studio Dolphin (2021.3.1) Canary 4 (android-studio-2021.3.1.4-mac.zip)海豚 适用于macOS Intel芯片系统,文件分割成两个压缩包,必须一起下载两个压缩包进行解压使用: Android Studio Dolphin ...

    android-studio-2022.3.1.12-windows.part1.rar

    Android Studio Giraffe 2022.3.1 Beta 1(android-studio-2022.3.1.12-windows.zip) 适用于Windows系统,文件使用WinRAR分割两个压缩包,必须一起下载使用。 Android Studio Giraffe(android-studio-2022.3.1.12...

    android-studio-2022.3.1.14-windows.part2.rar

    Android Studio Giraffe 2022.3.1(android-studio-2022.3.1.14-windows.zip) 适用于Windows系统,文件使用WinRAR分割两个压缩包,必须一起下载使用。 Android Studio Giraffe(android-studio-2022.3.1.14-...

    Android-DreamCatcher在Chrome开发人员工具中检查AndroidHTTPS流量

    通过DreamCatcher,开发者可以直接在熟悉的Chrome开发者工具环境中调试Android应用的网络流量,而无需依赖其他第三方工具或者复杂的SSL证书配置。这提高了开发效率,使得问题定位和解决变得更加迅速和便捷。 总结来...

    Android 基础教程 第三版 PDF 含源码

    《Android基础教程 第三版》是一本针对初学者和进阶开发者的重要参考资料,全面覆盖了Android应用开发的基础知识。此版本的PDF版本以其高质量的文本和包含源码的特点,为学习者提供了便捷的学习途径。书中的内容围绕...

Global site tag (gtag.js) - Google Analytics