android 基于okHttpClient开发https自签名请求

android 基于okHttpClient开发https自签名请求,第1张

那么安卓需要怎么配置才能支持https请求呢?

app网络采用的是retrofit20版本

命名文件并且导入到Android studio项目的value/raw目录下,命名为your_cercer

注意点:浏览器一把锁的图标是绿色的,说明是有第三方机构服务器认证的,这类的https请求在客户端不需要配置也可以访问,但配置了也不会出错。所以文章标题给出的是解决 自签名 的证书问题

HttpsTrustManager类:关键https配置

1、服务端的配置。 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

2、传送证书。 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

3、客户端解析证书。 这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

4、传送加密信息。 这部分传送的是用 证书 加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

5、服务段解密信息。 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

6、传输加密后的信息。 这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

7、客户端解密信息。 客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

okhttp是square公司贡献的一个处理网络请求的开源框架,是目前Android开发使用最广泛的一个网络框架,从Android44开始,httpURLconnection的底层实现采用的就是okhttp。内部实现就是利用java基础,对socket进行封装,实现http通信。最重要的两个关键点就是分发器和5个拦截器

分发器 就是内部维护队列和线程池,完成请求分配,总结就是用于对异步任务加入队列管理,然后判断条件,控制数量,加入线程池执行异步请求任务。

五个默认拦截器 就是利用责任链模式对网络请求进行层层处理,完成整个请求过程,简单总结如下。

1桥接拦截器对用户发出的请求添加缺少的请求配置字段,比如keep-alive等

2缓存拦截器就是查询有没有符合判断条件的已缓存的网络请求,执行复用,直接返回response

3连接拦截器就是创建请求,加入连接器 或者访问连接池,根据条件判断,是否能怼已创建的tcp请求进行复用

4请求服务器拦截器就是对scoket进行操作,请求网络访问服务器,返回response,

5重试和重定向拦截器就是对返回的response进行code判断,决定是否要重试或者重定向操作。

1支持http20版本,并且允许对同一主机的所有请求共享一个套接字

2即使不是http20版本,通过连接池,减少请求延迟

3默认使用Gzip 压缩数据

4响应缓存,避免重复请求网络

最简单的http请求案例

1利用建造者模式构建okHttpClient实例对象,构建过程中可以动态配置参数,请求时间,响应时间,缓存信息等。

2创建Request对象,设置请求方式,链接地址,参数等信息。

3把request对象,传给client,通过newCall函数,得到RealCall对象。

4RealCall 分为同步和异步执行

5同步执行时,分发器只是做个记录,把请求任务加到队列中,然后直接通过拦截器访问服务器,返回response。

6异步执行

61先对异步任务进一步封装,把任务放到AsyncCall对象中

2分发器 把 封装后的异步任务 添加到等待运行的队列中

7getResponseWithInterceptorChain 通过拦截器,获取response

okhttp 默认提供5个拦截器 重试重定向拦截器,桥接拦截器,缓存拦截器,连接拦截器,访问服务器拦截器。还可以自定义拦截器。

自定义拦截器分为应用拦截器(通过addInterceptor 添加)和网络拦截器(通过addNetworkInterceptor拦截)

拦截器采用责任链的设计默认,让请求者和处理者解耦,最终请求从前往后,响应从后往前。

首先先判断用户是否取消了请求,如果没有取消,就把请求交个桥接拦截器。

在获得响应结果response的时候根据响应码,判断是否需要重试或者重定向, 重试不限制次数,重定向最多20次 ,如果需要重试或者重定向,那么会再一次重新执行所有拦截器。

有如下几种情况不会重试:IO异常,线路异常,配置client实例时配置不允许重试,协议异常,证书异常等等。

先获取用户发送的请求,判断条件用户是否已经配置过请求头字段,若用户没有配置,则将http协议必备的请求头字段补齐,比如Content-Type,Content-Length等,然后交给下一个拦截器。

在获得响应结果response之后,调用保存cookie的接口(也可以在配置client的时候,设置cookjar进行cookie回调数据),并且解析gzip数据

获取结果之后,对cookie进行保存,对返回的数据进行gzip解压

就是根据缓存策略从缓存中查找是否有合适的缓存response,如果有合适的缓存,直接返回给请求任务,不在继续执行后面的拦截器。

获得响应结果response后,根据条件判断,决定是否要缓存。

维护一个连接池,负责对连接的服务。在把请求交给下一个拦截器之前。会先在连接池中找到一个合适的连接(满足适配条件相同,并且没有正在被使用)或者新建一个连接,并且接入连接池,获得对应的socket流,把请求交给下一个拦截器。获得response结果后不会进行额外的处理。

连接池, 也称之为对象池,主要用来存放request请求连接,内部维护了一个LinkedQueue队列用来存放请求。在添加新的请求对象时,都会执行一个周期性任务,用以对连接池进行清理操作。

1队列长度超过5,清理最近未被使用连接,LRE算法

2存储的连接,5分钟未被复用,清理

拿到上一个拦截器返回的请求,真正的与服务器进行通信,向服务器发送数据,解析读取响应的数据,返回给上一个拦截器。

1创建request =>OkHttpClient=>RealCall()

2同步执行 ,分发器添加同步任务,执行拦截器,访问服务器,返回reponse,触发异步分发流程。

3异步执行 ,封装任务= >AsyncCall ,实现runnable接口。添加任务到异步任务等待队列,执行分发任务,判断异步任务是否能加入正在执行的异步任务队列,满足两个条件

同时执行的异步任务数量不得大于64个

对同一个主机的访问任务,最多不得大于5个

4加入正在执行的异步任务队列,通过线程池执行任务,经过5个默认拦截器访问服务器,返回response,执行异步任务分发。

分发器工作 分为同步任务和异步任务两种

同步任务 就是把任务加入同步任务队列,加个标记,执行结束之后,触发异步任务的分发操作。

异步任务 先封装任务到asyncCall对象,实现了runnable接口。把任务加入等待执行队列,执行分发操作。

先遍历等待任务队列,判断是否符合加入正在运行的异步任务队列,要同时满足两个条件。

同时执行的异步任务数量不得大于64个

对同一个主机的访问任务,最多不得大于5个

当满足条件后,从等待队列中删除任务,把任务加入正在执行的队列中,通过自定义的线程池,执行任务,任务执行结束后,再次执行分发操作。

拦截器采用了责任链设计默认,让请求者和执行者解耦,请求者只需要将请求发给责任链即可,无需关心请求过程和细节。okHttp 默认有5个拦截器,重试重定向拦截器,桥接拦截器,缓存拦截器,连接拦截器,请求服务拦截器。工作细节参考上面拦截器原理分析部分

1位置的关系,应用拦截器 放在责任链最顶端,网络拦截器放在责任链倒数第二的位置。所以应用拦截器 最先拦截,最后响应,网络拦截器 倒数第二拦截,第二响应。如果打印请求日志的情况,应用拦截器打印的是用户请求信息,经过重试重定向,桥接,缓存,链接 等拦截器的层层包装,网络拦截器打印的是实际请求的信息。

2应用拦截器一定会被执行,网络拦截器不一定被执行。

利用连接池,缓存所有的有效连接对象。

清理机制:垃圾连接

1超过5分钟没有用过的链接

2超过5个闲置链接后,从最久闲置的链接开始执行清理(LRU)

  转载 本文介绍如何在安卓手机上搭建http服务器,有时候我们会有这要的需求,那就是想在自己的安卓手机上搭建一个简单的http服务里,有人是想用来玩一玩,有人是想做点研究,还有人有其他的目的,那么我们该怎么在安卓上搭建一个http服务器呢,下面安卓后院 为大家收集整理的一个方法,希望能够帮到大家。

  

  一、准备篇

  

  1将lmptarbz2移动到SD卡根目录(/mnt/sdcard/)

  

  2安装安卓终端模拟器(TerminalEmulatorapk)

  

  (注:lmptarbz2文件可以在本站的安卓工具箱页面下下载)

  

  二、安装篇

  

  1打开安卓终端模拟器

  

  2执行以下命令(root)

  

  $ su

  

  # cd /

  

  # mount -o remount,rw /system

  

  # tar xf /mnt/sdcard/lmptarbz2

  

  # mount -o remount,ro /system

  

  # exit

  

  $ exit

  

  三、启动篇

  

  1打开安卓终端模拟器

  

  2执行以下命令(root)

  

  $ su

  

  # almp-startsh

  

  # exit

  

  $ exit

  

  三、关闭篇

  

  1打开安卓终端模拟器

  

  2执行以下命令(root)

  

  $ su

  

  # almp-stopsh

  

  # exit

  

  $ exit

  

  四、测试篇

  

  1打开网络浏览器(OperaMobile)

  

  2输入以下地址欣赏下您的almp环境吧

  

  http://127001/

  

  http://127001/fileadmin/

  

  或者

  

  http://localhost/

  

  http://localhost/fileadmin/

  

  部分浏览器不支持localhost的解析

  

  五、mysql篇

  

  1mysql用户名为root

  

  2mysql默认密码为空

  

  3mysql用以下地址访问

  

  127001:3306

  

  localhost:3306

  

  4推荐phpmyadmin管理您的mysql数据库

  

  5由于phpmyadmin更新频繁,请自己下载安装

  

  6phpmyadmin默认不支持空密码登陆,请自己修改phpmyadmin的配置文件

  

  7登陆phpmyadmin轻击修改密码为您的mysql超级用户root设置一个密码吧

  

  六、注意篇

  

  php-cgi由本人编译

  

  1手机需要有root权限

  

  2部分rom需要安装busybox

  

  3部分rom需要在命令前面加上busybox

  

  4本环境包中的部分资源来源于网络开源项目

  

  5用Re挂载/system分区为读写可跳过mount命令

  

  6执行终端命令时请忽略命令前的命令提示符$(#)

  

  7本环境包理论上应该工作在Arm5++的安卓手机上

以 3149版本为例,这应该是最后一个java版本了,后面的版本都是kotlin开发的。

implementation 'comsquareupokhttp3:okhttp:3149'

一个完整的url可以包含哪些内容?

看一下这个类的构造方法

前面几个数据拆解了url中的不同部分,包括:协议、用户名、密码、域名、端口、路径、参数、锚位。

buildertoString() 将各个部分组合为一个整体,如下:

http://username:password@jianshucom:80/path1/path2Key1=value1&key2=value2#anchor

域名查询服务,通过域名获取主机IP地址。

InetAddress 表示一个IP地址,这个类没有开放的构造方法,必须使用getXX静态方法创建。

套接字工厂,SSL套接字工厂, java SDK 内容。

抢先验证和反应式验证

抢先验证:用http代理服务器实现https请求时,需要进行抢先验证。

反应式验证:服务端反馈401或407时,需要提交账号信息用于验证。

401: 用户没有[访问权限, 需要进行身份认证。

407:客户应首先通过代理服务器验证。

OkHttpClient 包含两个实例用于验证,分别为authenticator用于验证原始服务器账号、proxyAuthenticator 用于验证代理服务器账号。

这是个枚举类, 包含以下数据

http/10 默认情况下不使用持久套接字,明文请求,过时

http/11 包含持久连接,明文请求

spdy/31 OkHttp不再支持该协议,使用http20

h2 就是http20,支持请求头压缩、多路复用、服务推送。

h2_prior_knowledge 明文http20

quic 快速udp网络连接,okhttp不支持,但可以通过拦截器实现支持。

连接规定。

指定ssl的加密算法 - 或不指定加密算法。

加密算法

这个类里面只有一个算法的名称,没有具体的算法实现逻辑。

类会缓存算法名称对应的CipherSuite对象

TLS的版本号

代理服务器设置和代理服务器选择器,java SDK内容。

参考: https://blogcsdnnet/qq_33022345/article/details/53453585

锁定SSL证书。

给指定的域名提供固定的证书,那该域名只有使用这个固定证书时才能正常访问。如果服务端证书改变,将无法访问。

一个服务器地址的表示。

本文以上提到的所有类,都被用于Address类中。

1、“自己网站搭建服务器需要多大的宽带”

对于这个问题,其实需要多大的宽带并没有明确的要求,为什么这么说了?因为根据您网站访问量不同、用途不同,所需要的宽带大小也是不同的。建议20M或20M以上,那么上行速度为200k左右。(注意:用访问你网站速度(网速)是下行决定的,而不是下行)。

2、流程怎么走

大步骤

①搭建服务器端(包括中间件、WEB容器、数据库、编程语言相关问题)

②发布网站(包括端口映射、NAT转发、DNS解析、域名绑定相关问题)

本人其实并不建议,用家用PC搭建服务器。

如何搭建自己的服务器机房

在机房条件允许的情况下,尽量为服务器同时接入所有以太网接口,并配置链路聚合,除了提高传输带宽,还可实现网络冗余,当其中一个网口或者链路发生故障,另一个链路依然可以正常运行,提高了服务器的容灾能力。

安装IIS和SERVER-U软件,IIS是WEB服务运行环境,用来搭建WEB服务器,SERVER-U是一款非常好用的FTP服务器软件(我自己用了很多年),有中文版,设置起来非常简单,如果不会我帮你远程,设置好后就可以正常访问了。

这方面建议你按照自己想搭建的服务器类型在网上找下具体的安装方法。(2)外部解析局域网访问:可以采用固定IP的方式,直接使用ip地址进行访问。

怎样搭建自己的FTP服务器

1、首先,我们创建一个用于登录FTP以进行操作的用户帐户。右键单击我的桌面并选择“管理选项”,转到“管理”界面,然后打开“本地用户和组”选项。我们可以在列表中看到用户选项。

2、首先打开控制面板——》程序和功能——》打开或关闭windows功能找到Internet信息服务,把FTP服务器和Web管理工具都勾上,然后点击确定。到这里,系统就会安装IIS服务管理器了,安装过程可能需要等待几分钟。

3、通过电脑直接找到ftpserverexe并双击运行。新建一个可以登录FTP服务器的帐户。需要为刚才建立的帐户添加一个密码。如果没问题就设置共享的目录在哪里。根据自己的实际情况来继续设置权限。

4、打开控制面板,找到程序,点击“打开或关闭Windows功能”2“打开或关闭Windows功能”,后进入服务器管理器界面,因为ftp是iis服务功能中的一个部分,所以需要先添加iis服务。

5、右键计算机选择管理,点开本地用户和组选择用户。右键建立新用户,填写资料后完成创建。右键计算机进入控制面板选项,点击卸载程序按钮,选择程序和功能选项。

6、第一步:启动IIS,并启动IIS上的FTP服务。在默认的情况下,此时你的FTP服务器已经搭建好,并且可以立即登录,但是该FTP中没有任何文件。第二步:鼠标右击IIS中的“默认FTP站点”项,选择“属性”菜单,即可出现如图19的对话框。

搭建服务器详细流程

1、打开控制面板,选择并进入“程序”,双击“打开或关闭Windows服务”,在弹出的窗口中选择“Internet信息服务”下面所有地选项,点击确定后,开始更新服务。

2、自己如何搭建服务器。楼主是个人电脑,使用路由器上网,想配置成服务器,是吗。首先,需要设置路由器的端口映射,就可以实现楼主的要求,具体需要映射的端口是80和21,80端口是WEB端口,21是FTP端口。

3、建议20M或20M以上,那么上行速度为200k左右。(注意:用访问你网站速度(网速)是下行决定的,而不是下行)。

4、搭建FTP服务器要先创建一个用户账户用于登录FTP,然后添加IIS程序服务,然后才是创建发布自己的FTP站点。右键计算机选择管理,点开本地用户和组选择用户。右键建立新用户,填写资料后完成创建。

5、自己网站搭建服务器带宽一般1M起步。如果你网站流量较大,可以从3M、5M起步。首次建站并不麻烦啊。建网站的话,需要域名、服务器、程序、主题,这些一个都不能少。虚拟主机、服务器、主机、空间都是用来放网站程序的。

6、或无法很方便的为服务器电源线安排可用的插座。用户可能会需要重新安排一些线缆,而只能通过拔掉服务器的电源了,而这会造成系统的停机,故而这就需要运营团队进行提前安排了。

服务器怎么搭建

1、打开控制面板,选择并进入“程序”,双击“打开或关闭Windows服务”,在弹出的窗口中选择“Internet信息服务”下面所有地选项,点击确定后,开始更新服务。

2、打开浏览器搜索关键词hfshttp,搜索第一个页面,第一个网站就是目标网站。点击Download,下载hfshttp服务器假设软件。下载好了软件以后,我们解压出来,双击hfs应用程序,打开hfs软件。

3、服务器搭建,windows系统服务器,linux系统的服务,具体可以按照需求来搭建,难度各不相同,软件和数据库也不同,具体还是看你的软件程序来,还有需求来,有数据、应用分开,有负载均衡这些,有解析域名等等,还是有点麻烦的。

4、自己如何搭建服务器。楼主是个人电脑,使用路由器上网,想配置成服务器,是吗。首先,需要设置路由器的端口映射,就可以实现楼主的要求,具体需要映射的端口是80和21,80端口是WEB端口,21是FTP端口。

5、.本地搭建测试服务器-IIS如果读者现在正在设计网站,为了测试,要在自己的电脑上通过IP访问本地站点才能达到最佳的测试效果。因此会涉及安装IIS的相关内容。

6、搭建一个服务器供自己远程使用需要先准备一些基本的材料,如服务器硬件、操作系统(例如WindowsServer或Linux)以及必要的应用软件。

如何搭建一个服务器,供自己远程使用

安装IIS和SERVER-U软件,IIS是WEB服务运行环境,用来搭建WEB服务器,SERVER-U是一款非常好用的FTP服务器软件(我自己用了很多年),有中文版,设置起来非常简单,如果不会我帮你远程,设置好后就可以正常访问了。

首先打开控制面板,选择“程序”,双击“打开或关闭Windows服务”,在弹出的窗口中选择“Internet信息服务”下面所有地选项,点击确定,开始更新服务。打开浏览器,输入“localhost”回车,如果出现IIS7欢迎界面,说明启动成功。

实现这种效果需要解决两个操作:1:电脑安装服务器软件,并设置开启允许远程访问。2:给你的电脑提供外部解析。

只需要两步:购买服务器。搭建服务器。先登录wenidccom/这个网站,在上面完成登录和注册,根据自己需要的产品进行充值。充值后才可以购买服务器,要选择与我国关系友好的地区,如台湾等。在此选择香港。

自己如何搭建服务器。

安装IIS和SERVER-U软件,IIS是WEB服务运行环境,用来搭建WEB服务器,SERVER-U是一款非常好用的FTP服务器软件(我自己用了很多年),有中文版,设置起来非常简单,如果不会我帮你远程,设置好后就可以正常访问了。

如何在自己的电脑上搭建FTP服务器?首先打开控制面板——》程序和功能——》打开或关闭windows功能找到Internet信息服务,把FTP服务器和Web管理工具都勾上,然后点击确定。

如果自己购买实体机架的话,那么代价是很大的。从机房建设、通风等,再到水电、设备购买、安装这些都耗费人力物力的。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » android 基于okHttpClient开发https自签名请求

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情