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);
}
}
}
分享到:
相关推荐
在Android中,我们通常会用到HttpURLConnection或者第三方库如OkHttp来实现HTTPS请求。 一、GET请求 GET请求是最常见的HTTP方法,用于获取资源。在Android中使用HTTPS的GET请求,可以参考以下步骤: 1. 配置信任...
在Android开发中,HTTPS通信是保护用户数据安全的重要手段,特别是在传输敏感信息如登录凭证、个人信息等时。本文将深入探讨Android中HTTPS通信的改进版,以提高应用的安全性和性能。 首先,理解HTTPS的核心概念至...
在Android开发中,HTTPS协议是用于安全网络通信的重要手段,它可以保护数据的隐私性和完整性,防止中间人攻击。然而,通常的HTTPS连接仅进行单向验证,即客户端验证服务器的身份,而服务器并不验证客户端。但在某些...
在Android开发中,HTTPS协议常用于确保数据传输的安全性,防止数据被窃取或篡改。本实例将探讨如何在Android环境下实现HTTPS服务器端和客户端的简单交互,支持单向和双向验证。以下是对实现这一功能所需的知识点的...
3. **验证服务端证书**: 在HTTPS通信中,客户端通常会验证服务器的身份,这涉及到证书链的检查。Android提供了`TrustManager`接口,通过实现`X509TrustManager`,我们可以自定义证书验证逻辑。通常,我们需要检查...
在正常情况下,服务器会提供由权威证书颁发机构(CA)签发的数字证书,客户端(如Android设备)会验证这个证书的有效性,确保与之通信的服务器是真实的,而非中间人攻击。 二、自签名证书 自签名证书是由服务器自身...
《Android高薪之路:Android程序员面试宝典》目录: 第1章 Android入门 1 1 关于Android的非技术问题 1 1 1 为什么看好 Android 1 1 2 以前是否从事过Android的工作 做过哪些工作 1 1 3 你做的最复杂的界面是什么 1 ...
总的来说,Android访问HTTPS涉及到网络通信的安全策略、证书验证、SSL/TLS协议的使用,以及可能的网络配置和第三方库的选择。理解这些知识点对于开发安全、可靠的Android应用至关重要。在实际开发过程中,应遵循最佳...
Android实现https网络访问,四种实现方式:1、客户端添加指定信任cer证书。2、客户端信任所有证书。3、HttpClient方式实现,支持所有Https免验证方式链接(与2类似,只不过采用HttpClient方式实现)。4、HttpClient...
在Android应用开发中,WebView控件是一个非常重要的组件,它允许开发者在应用程序内嵌入一个浏览器,以便用户能够浏览网页内容。然而,随着网络安全性的不断提升,Android系统对WebView的使用也有了更严格的要求。在...
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中,我们通常使用HttpURLConnection或者第三方库如OkHttp来发起Http请求并接收响应。 1. **使用HttpURLConnection下载文件**: - 首先,建立网络连接,通过`URL.openConnection()`创建HttpURLConnection...
在Android开发中,为了保障数据传输的安全性,通常会使用HTTPS协议进行网络通信。HTTPS是HTTP(超文本传输协议)与SSL/TLS(安全套接层/传输层安全)的结合,它能提供身份验证、数据加密以及消息完整性检查,防止...
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 (2021.3.1) Canary 4 (android-studio-2021.3.1.4-mac.zip)海豚 适用于macOS Intel芯片系统,文件分割成两个压缩包,必须一起下载两个压缩包进行解压使用: Android Studio Dolphin ...
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 Giraffe 2022.3.1(android-studio-2022.3.1.14-windows.zip) 适用于Windows系统,文件使用WinRAR分割两个压缩包,必须一起下载使用。 Android Studio Giraffe(android-studio-2022.3.1.14-...
通过DreamCatcher,开发者可以直接在熟悉的Chrome开发者工具环境中调试Android应用的网络流量,而无需依赖其他第三方工具或者复杂的SSL证书配置。这提高了开发效率,使得问题定位和解决变得更加迅速和便捷。 总结来...
《Android基础教程 第三版》是一本针对初学者和进阶开发者的重要参考资料,全面覆盖了Android应用开发的基础知识。此版本的PDF版本以其高质量的文本和包含源码的特点,为学习者提供了便捷的学习途径。书中的内容围绕...