| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Android使用NanoHttpd在app内搭建https server(二) -> 正文阅读 |
|
[网络协议]Android使用NanoHttpd在app内搭建https server(二) |
一、场景由于需求和安全的考虑,需要将上一篇文档,使用NanoHttpd搭建的http server改成https的协议,但由于我们测试没办法正式的CA机构颁发的数字证书,所以就使用自签名的方式来验证https server。 由于查看源码得知,NanoHttpd是支持Https的,Support for HTTPS (SSL) ?二、Https协议相关的基础知识????????HTTPS的基本工作原理想必对于许多开发者来说是非常熟悉的了,我们一起先回忆一下HTTP常见的八股文中的描述: 1.客户端(浏览器)访问 HTTPS 的URL; ????????那么我们回到我们的主题里,首先需要知道CA证书是什么,CA是证书颁发机构(Certificate Authority)的缩写,那么CA证书就是证书机构颁发的一种数字证书,为什么需要这个机构来颁发证书呢?可以理解为就是一个第三方担保机构,这个担保机构保证了在客户端和服务器的通讯阶段的安全,这样客户端只要是看到证书是这个担保机构担保过的,那就会认可这个服务器并和它进行后续交互,反之其他证书都是不合法的,不会进行更进一步的交互了。 ????????其次,这个证书不光是用来证明其合法性,其中还包含了一个公钥,公钥是什么呢?这边就涉及到一些密码学相关知识点了,我们需要先知道非对称加密的一点概念,可以猜出来,有非对称加密那肯定有对称加密,对称加密就是使用同一把密钥进行加密和解密,而非对称加密会用到2个密钥,一把公钥和一把私钥进行加密和解密,公钥会公开出去给客户端,而私钥会保存在本地防止泄漏,所以会更安全,使用这个公钥加密后的数据可以被私钥解开,反过来也是一样的,在上面的HTTPS的连接过程中,1-6步骤所涉及到的就是非对称加解密过程,而后续则会采用对称加密的方式,即使用一个随机数充当了对称加密的密钥进行了通讯,这样一方面是为了提高通讯的效率更重要的是为了保证安全,因为如果还使用原有的公钥和私钥的方式在服务端使用私钥加密,那么只要有公钥的客户端都可以截获服务端发来的信息进行解密,显然这样是不行的。 ????????知道了概念后,那自签证书的概念就是我们自己充当这个CA机构给自己颁发一个证书,然后想办法让客户端信任这个证书(一般的默认做法是系统会有一个受信任的证书列表,其中就会有存放一些CA机构的根证书),并且证书里面包含了我们的公钥,客户端使用这个公钥进行数据加密,再传输数据,服务端接收并用私钥解开,从而完成整个加解密的通讯过程。那接下来我们就来模拟这样一个通讯过程 三、自签名证书过程????????使用KeyStore Explorer创建一个BKS-V1密钥库,并将其作为“keystore.bks”保存到android的raw文件夹。或者,您也可以使用以下代码来创建密钥库文件,然后只需使用密钥库资源管理器将其打开,并将其类型更改为 BKS-V1。 密钥库资源管理器 - 下载 (keystore-explorer.org) ? windows打开cmd终端,粘贴下面这一段命令,其中的-storepass后面的值可以自己修改成自己的storepass。
上面的命令应该不难理解,就是你给密钥文件设置的生成位置, 然后用上面安装好的密钥库资源管理器KeyStore Explorer去找到这个keystore.bks文件打开,打开的时候输入上面的storepass密码就行(ps:我被这里坑了好久,记住要输入storepass的这个密码,不是keypass的密码),打开后,找到Tools--->change KeyStore Type--->BKS-V1保存就行。 四、Android项目中使用自签名证书????????将上一步中生成的keystore.bks做了type转换后,将文件放入到项目的main->res->raw目录下,如果没这个文件夹,新建一个就行; ? 在HttpServer.kt的文件中的次构造中加入如下代码:
五、postman或者浏览器发起https请求验证?? 第一张图是因为自签名的原因,需要用户自己手动信任证书。图二为发起的https的get 请求,请求成功。 至此,我们在Nanohttpd的httpserver的基础上做了支持https协议。 最后附上mainactivity的代码。
项目代码地址:GitHub - sunbinkang/NanoHttpdDemo: android app 使用nanohttpd搭建http server,并且支持https协议 需要注意的是,项目中的raw文件需要你自己生成证书,因为证书是有密码的,我自己证书的密码在代码中用******标记了,所以拿到我的keystore.bks也没用。所以要想跑起来就得自己生成了。具体生成看步骤,有不懂的提问找我。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 3:46:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |