`
月下独酌
  • 浏览: 128118 次
  • 性别: 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 网络访问

    测试3种Android HTTPS网络访问

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

    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 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-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 Dolphin (android-studio-2021.3.1.2-mac.part1)

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

    android-studio-2022.3.1.14-windows.part1.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 Studio 4.3 for Windows(android-studio-2020.3.1.25)

    Android Studio 4.3(Android Studio Arctic Fox 2020.3.1.25)开发工具版本适用64位的Windows,android-studio-2020.3.1.25-windows.exe,它是Android Studio 4.2.2的下一个版本Android Studio 4.3版本(Android ...

    android-studio-2022.3.1.20-windows-zip.part2.rar

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

    Android Studio Chipmunk (android-studio-2021.2.1.10-mac_arm.p1)

    Android Studio Chipmunk (2021.2.1) Beta 3 (android-studio-2021.2.1.10-mac_arm.zip)花栗鼠 适用于macOS Arm芯片系统,文件分割成两个压缩包,必须一起解压使用: Android Studio Chipmunk (android-studio-...

    Android Studio Chipmunk (android-studio-2021.2.1.10-mac.part1)

    Android Studio Chipmunk (2021.2.1) Beta 3 (android-studio-2021.2.1.10-mac.zip)花栗鼠 适用于macOS Intel芯片系统,文件分割成两个压缩包,必须一起解压使用: Android Studio Chipmunk (android-studio-2021...

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

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

    Android Studio Chipmunk (android-studio-2021.2.1.10-mac_arm.p2)

    Android Studio Chipmunk (2021.2.1) Beta 3 (android-studio-2021.2.1.10-mac_arm.zip)花栗鼠 适用于macOS Arm芯片系统,文件分割成两个压缩包,必须一起解压使用: Android Studio Chipmunk (android-studio-...

    android-studio-2022.3.1.21-windows.part2.rar

    Android Studio Giraffe 2022.3.1 Patch 3(android-studio-2022.3.1.21-windows.exe)适用于Windows系统,文件使用WinRAR分割成两个压缩包,必须一起下载使用: android-studio-2022.3.1.21-windows.part1.rar ...

    Android保活之循环播放无声音乐

    Android保活之循环播放无声音乐,博客地址:https://www.jianshu.com/p/97b2b875df64

    Android代码-NodeMediaClient-Android

    NodeMediaClient-Android 一个简单,快速,免费的直播SDK. 用Gradle导入 allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } } } dependencies { compile '...

    DialogFragment和AndroidAutoSize 的适配问题

    相关博客:【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配 https://blog.csdn.net/ljb568838953/article/details/103906449; 本demo的知识点:1.AndroidAutoSize 的使用(今日...

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

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

    Android Studio Electric Eel(android-studio-2022.1.1.2-mac.part2)

    Android Studio Electric Eel 2022.1.1 Canary 2(android-studio-2022.1.1.2-mac.zip) 适用于macOS Intel系统,文件使用WinRAR分割两个压缩包,必须一起下载使用。在macOS使用WinZip进行解压: Android Studio ...

Global site tag (gtag.js) - Google Analytics