当前位置: 首页 > news >正文

Android studio访问选程https接口(.crt handshake)

如果服务器是https的,访问受限怎么办?有两种方法,一种是接受一切证书个人官方正式非正式,当然这样就牺牲了安全性,网上方法很多,我现在教大家如何去验证crt文件

首先服务器是https的,必然有几个文件,比方说apache版本的就有xx.key xx.chain.crt xx.public.crt,没有这三个文件,你是不搞不出来https的,这是官方申请来的文件,具有权威性

当然几个文件都有作用包括CA认证的,我这次只用到public.crt文件

1、首先将文件copy到工程的raw文件夹下,稍后引用

这里说一下设置Setting里也有一个载入accepted certificates(不知道在设置顶上可以搜),里面也可以引入,时间有现我就试了一下,发现不行就没试,估计还有别的地方要改,这块本文暂不涉及

2、验证权限要在所有访问之前

比如App启动的时候,或者在登录的时候,由于要用到一个Context要传过来要用它去找文件,所以我把他放在登录里调用一次即可,核心内容-TrustManager

public static void handleSSLHandshake(Context cont) {try {InputStream inputStream = cont.getResources().openRawResource(R.raw.web_public);//这就是开头raw里的文件CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);// 创建信任管理器并添加证书TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {final X509Certificate[] x509Certificates = new X509Certificate[]{certificate};return x509Certificates; // 返回包含您的证书的数组}@Overridepublic void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {// 在这里进行您的自定义验证逻辑,例如检查证书颁发机构、有效期等//No Used                }@Overridepublic void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {// 在这里进行您的自定义验证逻辑,例如检查证书颁发机构、有效期等// 如果更换证书,此处需要修改for (X509Certificate cert : certs) {if (!cert.getIssuerDN().getName().equals("CN=companyname,OU=www.domain.com,O=DigiCert Inc,C=US")) {//Log.d("TAG",cert.getIssuerDN().getName());//查看把上一步改为你自已的throw new CertificateException("Invalid server certificate");}if (cert.getNotBefore().after(new Date())) {throw new CertificateException("Server certificate not valid before " + cert.getNotBefore());}if (cert.getNotAfter().before(new Date())) {throw new CertificateException("Server certificate not valid after " + cert.getNotAfter());}}}}};// 创建SSL上下文并初始化信任管理器SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, trustAllCerts, new SecureRandom());// 设置默认的SSL套接字工厂和主机名验证器HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {return true; // 可以根据需要更改主机名验证逻辑}});} catch (Exception e) {e.printStackTrace();}
}

这里面可验证的东西很多,包括公司名、国家、有效期等等,可以做到一项有不一致立马拒绝,提升安全性。但是我要说一下:

1)checkClientTrusted checkServerTrusted这两个区别,如果你只是访问https接口的话,其实只有checkServerTrusted起作用,另一个是反向的验证,有机会的可以测试一下;

2)import包含部分,哪里提示红色的直接按提示去包含个包就好了,没有非标准库的内容,放心使用;

3)参数Context是上下文,目的是找文件路径的,如果你在Main或Activity中调用,直接给个this或都MyActivity.this,这个大家都会。

4)一定要加上网络权限,别忘了-androidmanifest

关于android高版本,9.0你可能需要增加一条策略,否则容易报错,一般错误都会定位在:

DataOutputStream wr = new DataOutputStream(con.getOutputStream());这个附近,如果一直报错,说明版本高了,安全策略变了,执行下面几句话即可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);
}//如果报错,这几句也要独立执行一下,放代码前头

你可以运行handleSSLHandshake(MyActivity.this)了;至此握手工作已经完成。

接下来提供点https远程接口的访问模板,供大家改着用

try {URL obj = new URL("https://mydomain.com/api");HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();con.setRequestMethod("POST");con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");con.setRequestProperty("Authorization", "testMe");String bodyParams = "param1=" + "test123";con.setDoOutput(true);DataOutputStream wr = new DataOutputStream(con.getOutputStream());wr.writeBytes(bodyParams);wr.flush();wr.close();int responseCode = con.getResponseCode();BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();Log.i("TAG", URLDecoder.decode(response.toString(), "UTF-8"));
} catch (IOException e) {e.printStackTrace();
}

这样就能该问远程接口了,本地会输出一个Log远程返回值,如果你把网址换了,就会提示握手错误,防劫持防攻击,让更加安全,更多内容看里面注释,祝你成功!

说句心里话,这玩意是很繁琐,是难者不会会者不难的事,细心按我说的来,会成功的,网上大部分不准的,太多针对老版本,很难解决问题,调试的Bug,连AI都有点懵,所以写个文章供以后查阅

相关文章:

Android studio访问选程https接口(.crt handshake)

如果服务器是https的,访问受限怎么办?有两种方法,一种是接受一切证书个人官方正式非正式,当然这样就牺牲了安全性,网上方法很多,我现在教大家如何去验证crt文件 首先服务器是https的,必然有几个…...

设计模式(一)-设计原则(1)

六大设计原则 1、单一职责原则 特点: 类和方法属性等,都应当遵守单一职责。尽可能保持统一性,单一性。 含义: (1)统一性,定义一个模块就必须要符合所有对象的行为特征。比如声明一个 Animal 类…...

Linux|僵死进程

1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取…...

JDY蓝牙注意事项

波特率设置:9600,不接受115200,或者38400. 不同于WiFi测试,jdy蓝牙不接受AT"指令,可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用,不知道是不是生产的公司不一样...

服务器IPMI管理操作

简介:智能平台管理界面(IPMI,Intelligent Platform Management Interface)是管理基于 Intel 结构的企业系统中所使用的外围设备采用的一种工业标准,用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状…...

自动驾驶学习笔记(九)——车辆控制

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…...

HTML5学习系列之项目实战1

HTML5学习系列之项目实战1 前言代码记录问题总结 前言 学习记录 代码 <div id"player"><audio id"musicbox"></audio><div id"controls" class"clearfix controls"><div id"play" class"…...

git 提交成了LFS格式,如何恢复

平常习惯使用sourceTree提交代码&#xff0c;某次打开时弹出了一个【是否要使用LFS提交】的确认弹窗&#xff0c;当时不知道LFS是什么就点了确认&#xff0c;后续提交时代码全变成了这个样子 因为是初始化的项目首次提交&#xff0c;将近四百个文件全被格式化成了这个样子&…...

【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理

1. 基本定义 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。一般的相机传感器都是采用彩色滤光片阵列(CFA)放置在光感测单元上&#xff0c;在每个像素处仅捕获三种原色成分中的一种。 去马赛克方法主要关注于复原非常规区域&#xff0c;比如边缘…...

单图像3D重建AI算法综述【2023】

计算机视觉是人工智能的一个快速发展的领域&#xff0c;特别是在 3D 领域。 本概述将考虑一个应用任务&#xff1a;2D 和 3D 环境之间的转换。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…...

three.js相机调用reset方法复原但无法完全复原

目录 一、问题 二、原因 三、总结 一、问题 需求&#xff1a;经过多次旋转、平移等变换后&#xff0c;希望恢复到初次渲染的角度、位置。结果发现&#xff1a; three.js oribtControls调用 一次reset方法 无法完全复原;需要多次调用后才能复原。 this.orbitControls.reset…...

前端为什么要工程化

前端为什么要工程化 文章目录 前端为什么要工程化传统开发的弊端一个常见的案例更多问题 工程化带来的优势开发层面的优势团队协作的优势统一的项目结构统一的代码风格可复用的模块和组件代码健壮性有保障团队开发效率高 求职竞争上的优势 现在前端的工作与以前的前端开发已经完…...

软件测试/测试开发/人工智能丨视觉与图像识别自动化测试

视觉与图像识别在软件自动化测试领域中的应用是越来越重要的一项技术&#xff0c;它使得测试可以更全面、准确地模拟用户对图形用户界面&#xff08;GUI&#xff09;的交互。以下是视觉与图像识别在软件自动化测试中的主要应用&#xff1a; 1. 自动化 GUI 测试 视觉与图像识别…...

nvm的下载与使用

1.如果已经安装nodejs , 先卸载nodejs; 从控制面板中 卸载程序 卸载nodejs win r打开cmd ,管理员运行 where node 查看是否删除干净nodejs 2.下载nvm 从github 下载nvm , 下载nvm 3.nvm 和node安装路径最好写在同一个路径下 &#xff0c;如D盘 ,D\a\nvm , D\a\nodejs 4.…...

拼多多官方开放平台接口app商品详情接口获取实时商品详情数据演示

拼多多开放平台提供了一种名为“商品详情接口”的API接口&#xff0c;它允许卖家从自己的系统中快速获取商品信息&#xff0c;如商品标题、描述、价格、库存等&#xff0c;并将这些信息展示在自己的店铺中。通过该接口&#xff0c;卖家可以更好地管理自己的商品库存和销售&…...

STM32F4系列单片机GPIO概述和寄存器分析

第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中&#xff0c;IO口&#xff0c;以数字进行分组&#xff08;P0~P3&#xff09;&#xff0c;每一组里面又有8个IO口。 在ST…...

【LeetCode刷题】--9.回文数

9.回文数 class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int tmp x, sum 0;boolean flag false;while(x ! 0){sum sum * 10 x % 10;x / 10;}if(sum tmp){flag true;}return flag;} }...

大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)

告警解释 系统安装完成后会检查元数据是否有周期备份到第三方服务器的任务&#xff0c;然后每1小时会检查一次。如果元数据未配置周期备份到第三方服务器的任务&#xff0c;将发送严重告警。 在用户创建元数据周期备份到第三方服务器的任务后&#xff0c;告警消除。 告警属性…...

毅速丨嫁接打印在模具制造中应用广泛

在模具行业中&#xff0c;3D打印随形水路已经被广泛认可&#xff0c;它可以提高冷却效率&#xff0c;从而提高产品良率。然而&#xff0c;全打印模具制造的成本相对较高&#xff0c;因为需要使用金属3D打印机和专用材料。为了节省打印成本&#xff0c;同时利用3D打印的优势&…...

『亚马逊云科技产品测评』活动征文|基于next.js搭建一个企业官网

『亚马逊云科技产品测评』活动征文&#xff5c;基于next.js搭建一个企业官网 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方…...

如何快速突破iOS限制:终极降级完全手册

如何快速突破iOS限制&#xff1a;终极降级完全手册 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 你是否曾想过让旧款iPhone重获新生&#xff1f;是否对苹果系统的版本限制感到困扰&…...

Phi-4-mini-reasoning与IDEA集成开发:提升Java代码推理与注释生成效率

Phi-4-mini-reasoning与IDEA集成开发&#xff1a;提升Java代码推理与注释生成效率 1. 引言&#xff1a;当AI遇见Java开发 作为一名Java开发者&#xff0c;你是否经常遇到这样的困扰&#xff1a;接手一个复杂项目时&#xff0c;面对层层嵌套的代码逻辑感到无从下手&#xff1b…...

下篇:那个听声辨位的侦探后来破了大案——AI中隐马尔可夫模型的类型与作用,以及它为什么还在被使用

我们说了隐马尔可夫模型是一个“只能听声、不能见人”的侦探&#xff0c;靠着一串声音推理出隔壁房间在发生什么。现在的问题是&#xff1a;它到底有哪些具体的“形态”&#xff1f;不同类型的隐马尔可夫模型分别擅长什么&#xff1f;这个“老古董”在今天还能干什么&#xff1…...

Qwen-Turbo-BF16数据库课程设计:智能问答系统开发

Qwen-Turbo-BF16数据库课程设计&#xff1a;智能问答系统开发 想象一下&#xff0c;你正在上一门数据库课程。老师布置了一个课程设计&#xff1a;开发一个学生信息管理系统。你需要设计表结构&#xff0c;写SQL查询&#xff0c;还要做个简单的界面。你埋头苦干&#xff0c;终…...

Qwen3-4B极速体验:流式输出+多轮记忆,打造丝滑文本交互

Qwen3-4B极速体验&#xff1a;流式输出多轮记忆&#xff0c;打造丝滑文本交互 在当今AI技术快速发展的背景下&#xff0c;文本交互模型已经成为日常工作和创作的重要助手。Qwen3-4B-Instruct-2507作为阿里通义千问系列中的纯文本优化版本&#xff0c;通过移除视觉模块冗余&…...

springboot+vue基于web的社区维修平台

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点扩展性设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 注册与登录&#xff1a;支…...

销售易发布AI原生CRM NeoAgent 2.0,引领行业迈入AI CRM 2.0时代

3月27日&#xff0c;在2026腾讯云城市峰会首站上海站&#xff0c;腾讯旗下CRM销售易重磅发布新一代营销服全场景AI原生CRM——NeoAgent 2.0。这不仅是产品迭代&#xff0c;更是销售易基于全新架构打造的智能体产品矩阵&#xff0c;标志着CRM开始从“管理工具”向“企业数字员工…...

别等电脑挂了后悔,教你现在就查看Bitlocker密钥

网管小贾 / sysadm.cc陈主任晃了晃脑袋&#xff0c;皱着眉冲着刘晓白说道&#xff1a;“简历我看过了&#xff0c;就算请我吃饭&#xff0c;恐怕也很难办啊&#xff01;” 刘晓白则一呲牙&#xff1a;“我说老舅&#xff0c;要进你们公司&#xff0c;还不是您一句话的事儿嘛&am…...

网站SEO优化与网站内容更新的关系_企业网站SEO优化与行业特点的关系

<h3 id"seo_seo">网站SEO优化与网站内容更新的关系_企业网站SEO优化与行业特点的关系</h3> <p>在当今数字化时代&#xff0c;网站的SEO优化与内容更新之间有着密切的关系。这不仅关系到企业网站的流量&#xff0c;还直接影响企业的品牌形象和市场竞…...

春季2021亚马逊研究奖获奖者公布

春季 2021 某机构研究奖获奖者公布 2021年7月&#xff0c;某机构通知申请人已成为2021年春季某机构研究奖的获得者。该奖项旨在为跨多个学科领域开展研究课题的学术研究人员提供无限制资金和某云平台服务积分。今天&#xff0c;我们正式公布26位获奖者&#xff0c;他们来自11个…...