在Android中使用HTTPS的场景比较频繁,所以对于HTTPS的证书应该如何校验呢?关于HTTPS的校验原理可以参考我之前写的一篇文章:《 HTTPS协议实现原理 》,相信看完后应该对HTTPS有一个比较大致的了解。而且对HTTP(s)请求的工具进行了封装,需要体会这种封装工具类的思路,也就是编码中常见的Listener机制。然后是Android中TCP、UDP通信的例子,主要是把Android设备作为Client端,如果对Java的Socket编程比较熟悉的话,这些都是特别简单的示例程序,非常容易看懂。
TCP/UDP 简单示例
下面的例子演示了Client向Server发送了一串小写英文,Server返回大写字符串的功能:
UDPServer.java:
1 | public class UDPServer { |
UDPClient.java:
1 | public class UDPClient { |
TCPServer.java:
1 | public class TCPServer { |
TCPClient.java:
1 | public class TCPClient { |
Client移植到Android
将两个Client移植到Android:
activity_main.xml
1 |
|
MainActivity.java:
1 | public class MainActivity extends AppCompatActivity { |
AndroidManifest.xml:
1 | <uses-permission android:name="android.permission.INTERNET"/> |
注意点:1、网络访问权限 2、子线程代码中使用runOnUiThread()方法可更新UI
Android访问HTTPS
对于一个普通的HTTP请求,我们可以使用如下方式来发起请求,下面是一个简易的Http请求工具类:
1 | public class HttpUtils { |
1、不校验证书(不推荐)
MyX509TrustManager.java,MyX509TrustManager实现不做任何事情:
1 | ... |
HttpsUtils.java
1 | ... |
2、校验证书(推荐)
拿我自己的博客站点来说,想要获得证书只需要在浏览器下载对应的证书即可(选择DER编码二进制和Base64编码均可),保存了一个名为srca.cer的文件到桌面:
将这份证书文件复制到项目的src/main/assets/目录下,没有assets就新建,所以完整路径为src/main/assets/srca.cer。
接下来需要实现MyX509TrustManager.java中的方法:
1 | public class MyX509TrustManager implements X509TrustManager { |
同时,将使用keyStore这个API来获取TrustManager数组,HttpsUtils.java如下:
1 | public class Https2Utils { |
在MainActivity中使用也很简单:
1 | public class MainActivity extends AppCompatActivity { |
- 本文作者: Tim
- 本文链接: https://zouchanglin.cn/2020/12/11/64846.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明出处!