在Android开发中,尤其是涉及到网络通信的安全性时,SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议扮演着至关重要的角色。SSL/TLS主要用于加密传输数据,确保用户信息的安全,防止数据被窃取或篡改。本文主要围绕Android平台上使用SSL的注意事项和具体实现进行详细讲解。 Android系统与服务器之间的SSL证书类型可能存在差异。Android系统默认使用的是BKS类型的KeyStore,而服务器可能使用其他类型的证书,例如JKS或PKCS12。因此,当尝试连接自签名或者非受信任的服务器时,Android系统会抛出“Not trusted server certificate”的错误。为了解决这个问题,我们需要对证书进行转换和配置。 1. 配置Android客户端信任自签名证书: - 从浏览器中导出目标网站的证书。在Firefox中,这通常可以通过查看证书信息并选择导出为PEM格式的.crt文件完成。 - 接下来,将PEM格式的证书转换为Android支持的BKS格式。这通常需要用到像`keytool`或`Portecle`这样的工具,通过命令行或图形界面完成转换。转换后的证书文件通常命名为`your_site_name.bks`。 - 在Android代码中,加载转换后的BKS证书到KeyStore实例,然后创建一个自定义的SSLSocketFactory,用于建立安全的HTTPS连接。以下是一个示例代码片段: ```java KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File("your_site_name.bks")); try { trustStore.load(instream, "your_password".toCharArray()); } finally { instream.close(); } SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); Scheme sch = new Scheme("https", socketFactory, 443); HttpClient httpclient = new DefaultHttpClient(); httpclient.getConnectionManager().getSchemeRegistry().register(sch); ``` 这里,`your_password`是BKS证书的密码,需要根据实际情况填写。 2. 使用Apache HttpClient库进行HTTPS连接: - 虽然Android 6.0及以上版本推荐使用OkHttp或HttpURLConnection,但Apache HttpClient仍然在某些场景下被使用。它支持自动处理cookie和重定向,提高了代码的可读性和灵活性。 - 如上文代码所示,创建自定义的SSLSocketFactory并注册到HttpClient的SchemeRegistry中,使得HttpClient能够信任我们的自签名证书。 在实际开发中,需要注意Android的不同版本可能对SSL的支持存在差异,例如Android 2.3(Gingerbread)及更低版本对BKS类型的支持有限,可能需要使用BCprov-JDK15on库来提供额外的支持。此外,对于Android 9.0(Pie)及以上版本,需要考虑TLSv1.2的强制要求,确保服务器支持并配置正确。 总结来说,Android应用在使用SSL时,需特别关注证书的信任问题,特别是对于自签名证书的处理。通过正确的证书转换和配置,可以确保Android应用能够安全地与自签名或非受信任证书的服务器进行通信。同时,选择合适的网络库,如HttpClient或OkHttp,也是优化性能和功能的关键。
剩余21页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- bdwptqmxgj11.zip
- onnxruntime-win-x86
- onnxruntime-win-x64-gpu-1.20.1.zip
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 首次尝试使用 Win,DirectX C++ 中的形状渲染套件.zip
- 预乘混合模式是一种用途广泛的三合一混合模式 它已经存在很长时间了,但似乎每隔几年就会被重新发现 该项目包括使用预乘 alpha 的描述,示例和工具 .zip
- 项目描述 DirectX 引擎支持版本 9、10、11 库 Microsoft SDK 功能相机视图、照明、加载网格、动画、蒙皮、层次结构界面、动画控制器、网格容器、碰撞系统 .zip
- 项目 wiki 文档中使用的代码教程的源代码库.zip
- 面向对象的通用GUI框架.zip
- 基于Java语言的PlayerBase游戏角色设计源码
- 1
- 2
前往页