IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Android P新特性(非安全的http连接) -> 正文阅读

[网络协议]Android P新特性(非安全的http连接)

1. 全面禁止了非安全的http连接,如果要使用非加密连接,需要配置network security config.步骤如下:
1.1 在res/xml下建立我们自己的network security config文件,名字任意,可以叫做network_security_config.xml
1.2 如果我们相对某些网址使用非安全连接,可以使用如下配置

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
      <!--允许以下网址使用非安全的连接-->
        <domain includeSubdomains="true">insecure.example.com</domain>
        <domain includeSubdomains="true">insecure.cdn.example.com</domain>
    </domain-config>
</network-security-config>

1.3 如果我们想要允许所有的非安全连接,可以使用如下配置

<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
      <!--不允许以下网址使用非安全连接-->
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="true">cdn.example2.com</domain>
    </domain-config>
 <!--默认允许所有网址使用非安全连接-->
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

1.3 然后在AndroidManifest的<application>标签中增加如下属性
android:networkSecurityConfig="@xml/network_security_config"

  1. socket连接也必须要使用安全连接,必须要使用SSLSocketFactory,而不能使用SocketFactory.
    请注意,SSLScoket本身并不校验hostname的安全性,我们必须使用getDefaultHostnameVerifierverify方法对hostname进行校验。

注意,Android只是说我们必须在Socket中也是用安全连接,我们要使用Verifier进行校验。但是并没有强制我们这样做,也就是说在使用socket的时候,不进行校验,使用非安全连接也是可以的,但是不推荐。

  1. 在Android P上,对WebView的数据进行了进程隔离,同一个应用程序的不同进程无法访问其他进程中WebView的数据,包括Cookie等。
    谷歌推荐的做法是只在一个进程中使用WebView,所以我们应该把所有使用到WebView的Activity都放置在同一个进程中。我们可以在不需要使用WebView的进程中调用WebView的静态方法disableWebView来强制要求该进程不能使用WebView.

如果一定要在不同的进程中使用WebView,那么我们必须调用WebView.setDataDirectorySuffix来为该进程中的WebView设置数据目录。不同的进程是没有办法访问其他进程中的WebView数据的,包括Cookie.我们可以使用setCookie和getCookie来在不同的进程之间复制WebView的Cookie.

  1. 很有必要讲一下Android的network security config.
    Android network security config可以让我们通过配置文件来增加对于网络安全的配置。
    它可以允许我们配置:
  2. 我们的app信任哪些CA证书
  3. 允许我们的app可以访问或者不能访问哪些非安全连接

4.1 信任哪些CA证书
默认我们的app都会信任系统自带的那一堆CA证书,如果我们要信任额外的CA证书,需要做以下的工作:

如果我们的某个网址的证书是自签名的证书,我们想要访问这个网址,可以进行如下配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <!--这就是我们自己的证书-->
            <!--如果要信任多个证书,就可以写多个-->
            <certificates src="@raw/my_ca"/>
            <!--也可以把这些证书放在一个目录下-->
            <certificates src="@raw/trusted_roots"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

如果我们项让App信任除系统之外的其他的CA,可以进行如下配置,

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
          <!--在base-config中配置额外的CA-->
            <certificates src="@raw/extracas"/>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
</network-security-config>

如果我们在调试的时候staging服务器不是正规CA,我们可以进行如下配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <!--debug-overrides表示在调试状态下信任的CA,当android:debugable为true的时候,是调试状态-->
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/debug_cas"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

如果我们的app只想要信任某些CA颁发的某些证书,可以进行如下配置:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <pin-set expiration="2018-01-01">
          <!--使用我们的证书的public key来进行验证-->
            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
            <!-- backup pin -->
            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

更详细的信息请参考Android Security Config


转至: https://www.jianshu.com/p/3600483f9c9f

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 17:07:55  更:2021-12-02 17:10:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 7:59:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码