android 7.0 SSLsocket
在Android 7.0系统中,SSL(Secure Socket Layer)套接字的使用可能会遇到一些问题,特别是关于证书验证失败的状况。SSLsocket是Java提供的一个类,用于创建安全的、加密的网络连接,通常用于HTTPS协议。在Android 7.0上,由于系统的安全升级,对SSL证书的检查变得更加严格,因此可能导致某些应用程序在进行SSL连接时出现错误。 这篇名为"SSLSOCKET demo 解决7.0认证失败"的博客文章详细介绍了在Android 7.0上处理SSL证书验证问题的方法。作者可能通过实例代码演示了如何正确配置和使用SSLSocket来避免或解决这类问题。 了解SSL/TLS(Transport Layer Security)协议的基础知识是必要的。SSL/TLS用于在两个通信实体之间建立安全的连接,防止中间人攻击,确保数据传输的隐私性和完整性。它主要涉及服务器身份验证、客户端身份验证、加密算法协商以及会话密钥的生成等过程。 在Android 7.0之前,开发者可以使用自签名证书或者忽略证书链中的某些环节,但这在7.0之后可能导致安全警告或连接失败。为了在新版本的Android系统中成功使用SSLSocket,开发者需要确保以下几点: 1. **证书链完整**:确保服务器返回的证书链完整,包括中级证书和根证书。Android 7.0要求完整的证书链以验证服务器的身份。 2. **信任管理器**:自定义TrustManager,以便处理自签名证书或者其他非标准的证书颁发机构。通常,这涉及到实现X509TrustManager接口并覆盖其检查方法。 3. **主机名验证**:除了证书验证外,还需要检查SSL连接的目标主机名是否与证书中的主题匹配。这可以通过重写DefaultHostnameVerifier或使用自定义的HostnameVerifier来实现。 4. **安全上下文**:创建一个带有自定义信任管理器和主机名验证器的SSLContext。然后,使用这个SSLContext来创建SSLSocket。 5. **处理异常**:在连接过程中,可能会遇到各种SSL相关的异常,如`CertificateException`, `KeyStoreException`, `NoSuchAlgorithmException`, `IOException`等。需要适当地捕获并处理这些异常,以提供良好的用户体验。 示例代码可能包含以下部分: ```java // 创建自定义TrustManager X509TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }; // 创建自定义HostnameVerifier HostnameVerifier hostnameVerifier = new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession sslSession) { return true; } }; // 创建SSLContext SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{trustManager}, null); // 创建SSLSocketFactory SSLSocketFactory socketFactory = sslContext.getSocketFactory(); // 创建SSLSocket并设置hostnameVerifier SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket(); sslSocket.setHostnameVerifier(hostnameVerifier); ``` 通过这样的配置,开发者可以确保在Android 7.0上,即使面对非标准的证书配置,也能正常建立SSL连接。然而,需要注意的是,虽然这种方法可以解决兼容性问题,但过度宽松的证书验证策略可能带来安全隐患,因此在生产环境中应谨慎使用。在实际开发中,最好遵循标准的安全实践,使用受信任的CA签发的证书,并确保所有证书链完整。
- 1
- 2
- wc12172019-07-10相当好的参考
- qq_351114732019-08-01不错,值得学习
- 粉丝: 7
- 资源: 54
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
- MyEclipseTomcatMySQL的环境搭建中文WORD版3.37MB最新版本
- hggm - 国密算法 SM2 SM3 SM4 SM9 ZUC Python实现完整代码-算法实现资源
- SQLITE操作入门中文WORD版最新版本
- Sqlite操作实例中文WORD版最新版本