Android 实现HTTPS自签名证书(非常详细)

17 篇文章 0 订阅
订阅专栏

1.HTTPS协议

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。简单来说, HTTP是超文本传输协议 ,信息是明文传输。SSL 是指安全套接字层,它是一项标准技术,使用加密算法打乱传输中的数据,可确保互联网连接安全。
所以HTTPS是超文本传输安全协议。

TLS(传输层安全)是更为安全的升级版 SSL。由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL。
如果某个网站受 SSL 证书保护,其相应的 URL 中会显示 HTTPS,单击浏览器地址栏的挂锁图标,即可查看证书详细信息,包括颁发机构和网站所有者的公司名称。

1.1Https的优点

1.认证用户和服务器,确保数据发送到正确的客户机和服务器 。(验证证书)

2.加密并维护数据的完整性,确保数据在传输过程中不被改变。(加密,摘要算法)

一般支持HTTPS的网站,都是CA(Certificate Authority)机构颁发的证书,一般机构颁发的证书都是需要交费的,购买受信任机构颁发的证书每年要交 100 到 500 美元不等的费用,到期就需要续费。如果证书过期、已被吊销或者非证书所代表的域名,都是不被浏览器信任的。不被浏览器信任,也就无法通过网络直接访问。

我们可以使用自签名的方式,花一分钱让网络能正常的访问获取到服务器数据,访问链接时手动信任该证书或忽略证书验证,以后就不会继续拦截了。
自签名证书不适合大众,大众看见浏览器给出的警告⚠️(提示“不安全”),感觉怪吓人的!
如果用于网站的证书需要被大众信任,就不要使用自签发的证书,建议向证书签发机构购买一个。
通过自签发的方式,可以加密数据,还是适合公司内部使用的。

如果已经购买了https证书,网络框架正常使用就好了,下面介绍的是没有购买https证书,又想用https加密数据,以okhttp网络框架为例,如何实现自签名证书。

2.什么是自签名证书( self-signed certicates)

自签名证书就是没有通过受信任的证书颁发机构 自己给自己颁发的证书.

SSL 证书大致分三类:

由安卓认可的证书颁发机构(如: VeriSign、DigiCert), 或这些机构的下属机构颁发的证书.

没有得到安卓认可的证书颁发机构颁发的证书.

自己颁发的证书, 分临时性的(在开发阶段使用)或在发布的产品中永久性使用的两种.

以下是客户端配置

2.1 Okhttp中使用自签名证书

OkHttp是一款开源的处理网络请求的轻量级框架,有Square公司贡献,用于替代HttpUrlConnection与Apache HttpClient。 OkHttp使用完全教程

2.2 如何生成keystore

通过JDK自带的keytool.exe 生成一个自己的证书,终端输入 keytool -genkey -v -keystore android.keystore -alias wenzhibin -keyalg RSA -validity 20000 -keystore /Users/jxxxx/yanhuomatou2015.keystore ,然后回车,按提示填写余下的环节即可生成证书如下图:
在这里插入图片描述

注意:wenzhibin是keystore文件的别名,20000 是keystore文件的有效期(天),/Users/jxxxx/是生成到哪里去(自己指定一个路径),yanhuomatou2015.keystore是keystore文件的名字。
2.3通过keystore文件如何导出自签名证书

终端输入 keytool -exportcert -alias wenzhibin -file yanhuomatou2015.cer -keystore yanhuomayou2015.keystore ,回车即可导出证书。
在这里插入图片描述

2.4如何使用自签名证书

首先获取证书流有两种方式,

第一种方式:将导出的证书放到assets文件夹里面,然后获取(这种方式证书会被打包到apk里)

第二种方式:打开证书,拷贝证书里的内容,定义成字符串常量,再将字符串转为流的形式(这种方式证书就不会被打包到apk里)

然后创建秘钥,添加证书进去,接着创建信任管理器工厂并初始化秘钥
最后获取SSL上下文对象,并初始化信任管理器

在这里插入图片描述

3.信任所有证书(不建议使用)

如果服务端更换了证书,那么客户端同样需要更换对应https证书才行,否则无法正常交互获取不到数据。此时如果客户端不换证书又想获取到服务器数据,可以通过实现X509TrustManager接口,达到信任所有证书的目的。如下图:

在这里插入图片描述

以下是服务端配置

4.准备工作,首先需要安装Tomcat。

4.1登录Apache Tomcat官网,地址 http://tomcat.apache.org ,点击左边的Download,选择需要下载的版本。

在这里插入图片描述

4.2 右键Finder—>前往文件夹—> ~/Library/ 目录下,把下载完成的压缩包解压,命名为Tomcat,拷贝到这里。
在这里插入图片描述

4.3 打开终端,输入 cd /Users/jxxxxx/Library/Tomcat/bin,然后回车

在这里插入图片描述

(ps:jxxxxx是你mac电脑的用户名。也可以直接输入 cd,然后把Tomcat的bin目录拖到终端即可)

4.4再输入:./startup.sh ,回车

在这里插入图片描述

如果出现Permission denied就是操作失败,缺少权限。再输入 sudo chmod 755 *.sh,回车,接着输入 ./startup.sh,就可以启动Tomcat了:

在这里插入图片描述

出现Tomcat started就说明服务器打开了。

(ps:sudo sh shutdown.sh 关闭服务器,然后再输入sudo sh startup.sh 打开服务器,表示服务器重启)

4.5打开我们的浏览器,然后网址输入 http://localhost:8080/,如果出现一只猫,则证明配置成功~
(Tomcat部署在自己电脑上,所以可以用localhost代替具体的ip地址)

5.修改,配置Tomcat 参数

5.1在ROOT目录下新建json数据,如图
在这里插入图片描述

5.2在conf文件夹下,之前生成的keystore文件拷贝到conf文件夹下,并打开serve.xml,修改配置在这里插入图片描述

在这里插入图片描述

注意,红框里的内容都是新添加进去的配置,而且keystoreFile=“填写自己的keystore文件名” keystorePass=“keystore文件密码”。
5.3 最后保存退出,打开终端 输入 sudo sh shutdown.sh,再输入sudo sh startup.sh ,待服务器重起成功。

6.浏览器测试https自签名证书效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

手动信任证书点击”高级“—>“继续前往”,最终看到了服务器返回了yanhuomatou2015.json的数据。

7.android网络请求okhttps框架测试https自签名证书效果:

7.1使用android原生框架实现,如下图

在这里插入图片描述

在这里插入图片描述

7.2除了上面的原生框架实现,还可以用第三方框架实现,以okhttp框架为例,如下图

在这里插入图片描述

在这里插入图片描述

总结:不管用原生还是第三方框架,都能成功获取tomcat服务器的数据,如下图android studio打印的:
在这里插入图片描述

完整的android代码链接: https://github.com/yanhuomatou2015/HTTPS-self-signed

今天的分享结束了,再见~

Android 安全加密:数字签名和数字证书详解
09-01
签名证书可以用于测试环境,而生产环境中通常需要经过CA认证的证书。 数字证书HTTPS通信中起到关键作用,它确保了客户端与服务器之间的安全连接。HTTPS基于SSL/TLS协议,其工作流程包括:客户端验证服务器的...
AndroidHTTPS部署自签名证书
#请假条的博客
02-14 1582
Android 作为客户端https 通信,通常需要一个SSLContext, SSLContext 需要配置一个 TrustManager,如果是双向通信,还需要一个KeyManager。KeyManager 负责提供证书和私钥,证书发给服务端校验。双向认证 TrustManager + KeyManager。TrustManager 负责校验服务端发来的证书。单向认证 TrustManager。二、Android 客户端的配置。一、生成自签名私有证书
android Https的使用及双向验证证书
jiushi1995的博客
02-24 3971
一、 Https 简介 1、 什么是Https? 简单来说, HTTPS = HTTP + SSL/TLS协议。 HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS 2. HTTPS加密方式(SSL/TLS 加密方式) SSL加密使用了对称加密及非对称加密的方式。在数据传输过程中,使用对称加密方式加密数据。使用非对称加密方式加密对称加密算法的密钥。 使用两种加密方式的原因:非对称加密拥有公,私两种密钥,加密及解密的算法不同,更安全,但在加密解密的
Android Okhttp3添加https签名证书
最新发布
kyoyas的博客
05-21 254
/信任https签名证书
https证书Android中的使用
static_zh的博客
07-09 4212
我们在使用https访问服务器的时候都需要校验证书,测试的时候为了方便默认信任的所有的证书,但是在上线的时候就需要设置证书了,一个比较简单的方式就是在客户端内置证书,设置给网络框架,比如OKHttp,这样在网络访问的时候客户端就会校验服务器的证书是不是和本地的证书一致。具体代码如下: /** * * @param inputStream 本地证书的输入流 * @ret...
HttpsAndroid中的使用添加可信证书认证
JoeLittleStar的专栏
05-22 3231
android系统已经预置了150多个证书,服务端用的证书是从android认可的证书颁发机构购买的证书,默认情况下,是信任它们的,因此可以直接访问而无需在客户端设置什么。 购买证书毕竟是花钱的,使用自签名证书就是另外一种常见的方式了。所谓的自签名证书就是没有通过受信任的证书颁发机构,自己给自己颁发的证书。最典型的就是12306火车购票,使用的证书就不是受信任的证书颁发机构颁发的,而是旗下SRC...
Android使用SSL自签名证书
zxm317122667的专栏
11-08 5421
一般情况下公司都是通过CA机构来购买SSL证书,但是这种证书费用普遍比较贵,所以在debug环境下可以考虑使用自签名证书。这篇内容将介绍Android如何使用自签名证书,主要分为以下4个步...
【胖虎的逆向之路】Android自制Https证书实现双向认证
无方少年游
01-02 1499
这里的公钥服务端的公钥,这里的签名是指:用hash散列函数计算公开的明文信息的信息摘要,然后采用 CA 的私钥对信息摘要进行加密,加密完的密文就是签名。Hyper Text Transfer Protocol ,超文本传输协议, 是互联网使用最广泛的一种协议,所有的WWW文件必须遵循的标准,Http协议传输的数据都是未加密的,也就是明文,因此使用Http传输敏感协议是不安全的。SSL 服务器允许客户的浏览器使用标准的公钥加密技术和一些可靠的认证中心(CA)的证书,来确认服务器的合法性~
Android实现获取签名及公钥的方法
09-03
本文将详细解释如何在Android实现这一功能。 首先,我们要理解签名和公钥的概念。在数字签名中,开发者使用私钥对APK进行签名,这个签名包含了开发者身份的信息,可以防止应用被篡改。公钥则用于验证签名,确保...
android实现给未签名的apk签名方法
01-04
android给未签名的apk签名命令。 准备文件 1、unsign.apk(未签名的apk) 2、shanhy.keystore(签名证书文件) ...以上这篇android实现给未签名的apk签名方法就是小编分享给大家的全部内容了,希望能给大
详解Android Studio正式签名进行调试的实现步骤
08-30
本文将详细介绍如何在Android Studio中使用Gradle进行正式签名实现步骤。 一、创建签名文件 在Android Studio中,可以使用Gradle进行正式签名实现步骤。首先,需要创建签名文件。打开Android Studio,选择...
浅析Android系统中HTTPS通信的实现
09-03
注意,为了确保安全性,需要正确配置信任管理器和证书管理器,处理自签名证书或特定的CA证书。此外,还应关注SSL/TLS的版本和加密套件,避免使用已知漏洞的协议或算法。 总之,Android系统中实现HTTPS通信需要理解...
https证书签名
蔚可云的博客
09-22 2710
在网络里有很多病毒是人们不能了解的,所以在自己的网站里安装安全证书是很重要的,现在小编就对于https证书签名https双向认证来给大家介绍一下他们的知识。我们知道了这些知识以后我们在自己的网站里更好的使用安全证书。 一、https证书签名 我们先来了解一下https证书签名,它是一种免费的安全证书,它是不受浏览器信任,我们如果使用了这样的自签名证书,就会使网站的文件或者是传输的数据被黑客所侵害或者是被命,木马病毒所感染。这样就会使我们的网站导致瘫痪或者是出现很大的风险。这就是关于https证书
https证书Android中的各种使用方法
weixin_42602900的博客
05-14 1317
一:https 不验证证书方式(信任所有证书) // 初始化一个client public static void setClient(Context context){ //创建一个OKHttpClient对象,官方推荐这个对象越少越好,就类似单例模式那样,复用这个对象 Log.d("siwen", "new OkHttpClient"); if (mOkHttpClient == null){ mOkHttpClient = new OkHttpClient().
Android信任Https签名证书详细教程
hyhlmy的博客
04-04 8440
Android信任自签名证书前言问题描述环境准备生成自签名证书搭建tomcat服务器tomcat配置证书代码实现信任所有证书(不推荐)信任指定证书导入自签名证书信任自签名证书代码总结示例代码地址 前言 在上一篇 一文读懂Https原理 中,我主要介绍了Https的安全机制和实现原理,比较偏向于理论研究,可能会有点抽象。为了加深理解,今天写一篇Https的实战教程,主要介绍HttpsAndroid...
Android Https证书认证
qq_25920753的博客
11-14 4844
Android Https证书认证 Android 开发时,有时对于https的认证需要做处理。使用HttpsURLConnection时,可以指定认证证书。有跳过证书认证(不推荐)和信任指定证书两种做法
Android https使用CA证书
weixin_34991050的博客
03-13 503
这样,你创建的OkHttpClient将只会信任你提供的服务器证书。不过,请注意,这种方法只适用于自签名证书或特定场景,生产环境中应尽量使用受信任的CA颁发的证书,以便让用户设备默认信任。首先,你需要获取服务器的证书文件。使用自定义的`TrustManager`创建`SSLContext`,然后将其设置到OkHttp的`SSLSocketFactory`。创建一个自定义的`X509TrustManager`,使其只信任你提供的服务器证书。// 返回信任的证书列表,此处只信任我们的服务器证书
Android实现https网络通信之添加指定信任证书/信任所有证书
热门推荐
ncepu307的专栏
05-20 1万+
Android客户端访问https网站,默认情况下,受证书信任限制,无法访问,可以有两种解决方法来实现: 1、将要访问的https网站的ca证书添加到客户端信任证书列表中,此种方式为谷歌推荐,安全性高。 2、将客户端设置为信任所有证书,也就是说不验证服务器证书,此种方式实现简单,但是安全性低,不推荐使用。 直接上代码,分别实现两种方式的访问。 1、客户端添加指定信任证书 ass
https】Self-Signed SSL证书创建和使用
dualvencsdn的博客
07-15 3208
一般可用于个人测试使用和非域名https访问,通常CA机构不支持颁发IP证书,只有个别OV机构支持公网IP证书,但只能用于大型机构组织的网站。Whentheserver.keyserver.csrfiles.Theserver.crtserver.key其中server.key为服务端私钥文件,用于后续传输加解密。server.crt为签好名的证书文件,其中包含了服务描述信息和公钥,用于发往客户端进行合法验证,公钥用于后续传输加解密。以最新版本nginx启用ssl配置为例3.重载nginx配置信息。....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Android 实现HTTPS自签名证书(非常详细) 12156
  • Android IOS 视频直播利用第三方SDK实现 4365
  • Android 中MVC,MVP,MVVM三者框架对比介绍 4100
  • App Store与苹果签名 4017
  • Android 如何实现增量更新 3527

分类专栏

  • 笔记 17篇

最新评论

  • Android 实现HTTPS自签名证书(非常详细)

    xlily508: 感谢大佬,找了半天终于成功实现安卓自签名证书

  • Android 沉浸式状态栏及View滑动渐变效果与启发

    黑心的奥利奥: 可以,你的思路很正确

  • Android 实现HTTPS自签名证书(非常详细)

    东飞飞: 看完帮助很大。谢谢,好文章

  • Android 中MVC,MVP,MVVM三者框架对比介绍

    孤独的冥王星: 那么问题来了,哪个适合大型复杂项目?

  • React Native项目笔记(一)

    Lansonli: 博主文章写得好,感悟颇深,感谢分享!有时间也来关注一下我的博文,可能有意想不到的惊喜喔~

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Flutter跨平台方案的选择
  • RN项目笔记(四)使用react-native-sound,IOS声音出不来
  • RN项目笔记(三)滑块验证码的实现
2021年7篇
2020年28篇

目录

目录

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网王天助beyondcompare3注册码武汉457ladyboygold人性的弱点txt下载武汉交通银行鼠男孩起名大全大全在什么网站起名比较靠谱冰糖炖雪梨百度云取名起名大全大师起名嘉铭宝宝起名汉译英翻译游戏起姓名公司起名带荣字的名字云字辈起名女孩男孩用鲲字起名好不好万古丹帝鼠宝贝女起名冲喜侍妾今天是几伏奕辰起名的含义养老模式农产品绿色起名起英文名网韩姓小孩起名字qq自定义表情长颈鹿英语怎么说鸡女少女慈禧蔬菜商店起名大全淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化