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

wordpress 改登录界面杭州seo

wordpress 改登录界面,杭州seo,南京网站建设服务公司,菏泽哪里有做网站的1. 服务端数字证书验证的问题 在鸿蒙客户端对服务端发起HTTPS请求时,如果使用HttpRequest的request发起请求,那么就存在服务端数字证书的验证问题,你只有两个选择,一个是使用系统的CA,一个是使用自己选定的CA&#xf…

1. 服务端数字证书验证的问题

在鸿蒙客户端对服务端发起HTTPS请求时,如果使用HttpRequest的request发起请求,那么就存在服务端数字证书的验证问题,你只有两个选择,一个是使用系统的CA,一个是使用自己选定的CA,在上文鸿蒙网络编程系列26-HTTPS证书自选CA校验示例中,对此进行了介绍。但是,还有一些更常见的问题难以解决:

  • 可不可以跳过对服务端数字证书的验证

  • 可不可以自定义验证规则,比如,只验证数字证书的公玥,忽略有效期,就是说失效了也可以继续用

如果你还是使用HttpRequest的话,答案是否定的。但是,鸿蒙开发者很贴心的推出了远场通信服务,可以使用rcp模块的方法发起请求,并且在请求时指定服务端证书的验证方式,关键点就在SecurityConfiguration接口上,该接口的remoteValidation属性支持远程服务器证书的四种验证模式:

  • 'system':使用系统CA,默认值

  • 'skip':跳过验证

  • CertificateAuthority:选定CA

  • ValidationCallback:自定义证书校验

Talk is cheap, show you the code!

2. 实现HTTPS服务端证书四种校验方式示例

本示例运行后的界面如下所示:

cke_54800.jpg

选择证书验证模式,在请求地址输入要访问的https网址,然后单击“请求”按钮,就可以在下面的日志区域显示请求结果。

下面详细介绍创建该应用的步骤。

步骤1:创建Empty Ability项目。

步骤2:在module.json5配置文件加上对权限的声明:

"requestPermissions": [{"name": "ohos.permission.INTERNET"}]这里添加了获取互联网信息的权限。

步骤3:在Index.ets文件里添加如下的代码:

import util from '@ohos.util';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
import { rcp } from '@kit.RemoteCommunicationKit';
​
@Entry
@Component
struct Index {//连接、通讯历史记录@State msgHistory: string = ''//请求的HTTPS地址@State httpsUrl: string = "https://47.**.**.***:8081/hello"//服务端证书验证模式,默认系统CA@State certVerifyType: number = 0//是否显示选择CA的组件@State selectCaShow: Visibility = Visibility.None//选择的ca文件@State caFileUri: string = ''scroller: Scroller = new Scroller()
​build() {Row() {Column() {Text("远场通讯HTTPS证书校验示例").fontSize(14).fontWeight(FontWeight.Bold).width('100%').textAlign(TextAlign.Center).padding(10)
​Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("选择服务器HTTPS证书的验证模式:").fontSize(14).width(90).flexGrow(1)}.width('100%').padding(10)
​Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {Column() {Text('系统CA').fontSize(14)Radio({ value: '0', group: 'rgVerify' }).checked(true).height(50).width(50).onChange((isChecked: boolean) => {if (isChecked) {this.certVerifyType = 0}})}
​Column() {Text('指定CA').fontSize(14)Radio({ value: '1', group: 'rgVerify' }).checked(false).height(50).width(50).onChange((isChecked: boolean) => {if (isChecked) {this.certVerifyType = 1}})}
​Column() {Text('跳过验证').fontSize(14)Radio({ value: '2', group: 'rgVerify' }).checked(false).height(50).width(50).onChange((isChecked: boolean) => {if (isChecked) {this.certVerifyType = 2}})}
​Column() {Text('自定义验证').fontSize(14)Radio({ value: '3', group: 'rgVerify' }).checked(false).height(50).width(50).onChange((isChecked: boolean) => {if (isChecked) {this.certVerifyType = 3}})}}.width('100%').padding(10)
​Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("服务端证书CA").fontSize(14).width(90).flexGrow(1)
​Button("选择").onClick(() => {this.selectCA()}).width(70).fontSize(14)}.width('100%').padding(10).visibility(this.certVerifyType == 1 ? Visibility.Visible : Visibility.None)
​Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("请求地址:").fontSize(14).width(80)TextInput({ text: this.httpsUrl }).onChange((value) => {this.httpsUrl = value}).width(110).fontSize(12).flexGrow(1)Button("请求").onClick(() => {this.doHttpRequest()}).width(60).fontSize(14)}.width('100%').padding(10)
​Scroll(this.scroller) {Text(this.msgHistory).textAlign(TextAlign.Start).padding(10).width('100%').backgroundColor(0xeeeeee)}.align(Alignment.Top).backgroundColor(0xeeeeee).height(300).flexGrow(1).scrollable(ScrollDirection.Vertical).scrollBar(BarState.On).scrollBarWidth(20)}.width('100%').justifyContent(FlexAlign.Start).height('100%')}.height('100%')}
​//自定义证书验证方式selfDefServerCertValidation: rcp.ValidationCallback = (context: rcp.ValidationContext) => {//此处编写证书有效性判断逻辑return true;}
​//生成rcp配置信息buildRcpCfg() {let caCert: rcp.CertificateAuthority = {content: this.getCAContent()}//服务器端证书验证模式let certVerify: 'system' | 'skip' | rcp.CertificateAuthority | rcp.ValidationCallback = "system"
​if (this.certVerifyType == 0) { //系统验证certVerify = 'system'} else if (this.certVerifyType == 1) { //选择CA证书验证certVerify =caCert} else if (this.certVerifyType == 2) { //跳过验证certVerify = 'skip'} else if (this.certVerifyType == 3) { //自定义证书验证certVerify = this.selfDefServerCertValidation}let secCfg: rcp.SecurityConfiguration = { remoteValidation: certVerify }let reqCfg: rcp.Configuration = { security: secCfg }let sessionCfg: rcp.SessionConfiguration = { requestConfiguration: reqCfg }return sessionCfg}
​//发起http请求doHttpRequest() {let rcpCfg = this.buildRcpCfg()let rcpSession: rcp.Session = rcp.createSession(rcpCfg)rcpSession.get(this.httpsUrl).then((response) => {if (response.body != undefined) {let result = buf2String(response.body)this.msgHistory += '请求响应信息: ' + result + "\r\n";}}).catch((err: BusinessError) => {this.msgHistory += `err: err code is ${err.code}, err message is ${JSON.stringify(err)}\r\n`;})}
​//选择CA证书文件selectCA() {let documentPicker = new picker.DocumentViewPicker();documentPicker.select().then((result) => {if (result.length > 0) {this.caFileUri = result[0]this.msgHistory += "select file: " + this.caFileUri + "\r\n";}}).catch((e: BusinessError) => {this.msgHistory += 'DocumentViewPicker.select failed ' + e.message + "\r\n";});}
​//加载CA文件内容getCAContent(): string {let caContent = ""try {let buf = new ArrayBuffer(1024 * 4);let file = fs.openSync(this.caFileUri, fs.OpenMode.READ_ONLY);let readLen = fs.readSync(file.fd, buf, { offset: 0 });caContent = buf2String(buf.slice(0, readLen))fs.closeSync(file);} catch (e) {this.msgHistory += 'readText failed ' + e.message + "\r\n";}return caContent}
}
​
​
//ArrayBuffer转utf8字符串
function buf2String(buf: ArrayBuffer) {let msgArray = new Uint8Array(buf);let textDecoder = util.TextDecoder.create("utf-8");return textDecoder.decodeWithStream(msgArray)
}

步骤4:编译运行,可以使用模拟器或者真机。

步骤5:选择默认“系统CA”,输入请求网址(假设web服务端使用的是自签名证书),然后单击“请求”按钮,这时候会出现关于数字证书的错误信息,如图所示:

cke_63643.jpg

步骤6:选择“指定CA”类型,然后单击出现的“选择”按钮,可以在本机选择CA证书文件,然后单击“请求”按钮:

cke_129996.jpg

可以看到,得到了正确的请求结果。

步骤7:选择“跳过验证”类型,然后然后单击“请求”按钮:

cke_159268.jpg

也得到了正确的请求结果。

步骤8:选择“自定义验证”类型,然后然后单击“请求”按钮:

cke_253658.jpg

也得到了正确的请求结果。

3. 关键功能分析

关键点主要有两块,第一块是设置验证模式:

    //服务器端证书验证模式let certVerify: 'system' | 'skip' | rcp.CertificateAuthority | rcp.ValidationCallback = "system"
​if (this.certVerifyType == 0) { //系统验证certVerify = 'system'} else if (this.certVerifyType == 1) { //选择CA证书验证certVerify =caCert} else if (this.certVerifyType == 2) { //跳过验证certVerify = 'skip'} else if (this.certVerifyType == 3) { //自定义证书验证certVerify = this.selfDefServerCertValidation}let secCfg: rcp.SecurityConfiguration = { remoteValidation: certVerify }let reqCfg: rcp.Configuration = { security: secCfg }let sessionCfg: rcp.SessionConfiguration = { requestConfiguration: reqCfg }return sessionCfg}

这个比较好理解,第二块是自定义证书验证的方法:

  //自定义证书验证方式selfDefServerCertValidation: rcp.ValidationCallback = (context: rcp.ValidationContext) => {//此处编写证书有效性判断逻辑return true;}

这里为简单起见,自定义规则是所有的验证都通过,读者可以根据自己的需要来修改,比如不验证证书的有效期。

(本文作者原创,除非明确授权禁止转载)

本文源码地址:

https://gitee.com/zl3624/harmonyos_network_samples/tree/master/code/rcp/RCPCertVerify

本系列源码地址:

https://gitee.com/zl3624/harmonyos_network_samples


文章转载自:
http://protend.jftL.cn
http://rhizoctonia.jftL.cn
http://barye.jftL.cn
http://congealment.jftL.cn
http://boar.jftL.cn
http://splanch.jftL.cn
http://wretched.jftL.cn
http://farthermost.jftL.cn
http://instrumentalism.jftL.cn
http://houseparent.jftL.cn
http://apog.jftL.cn
http://saipan.jftL.cn
http://almuce.jftL.cn
http://profess.jftL.cn
http://totany.jftL.cn
http://nona.jftL.cn
http://patagonian.jftL.cn
http://authentification.jftL.cn
http://bolero.jftL.cn
http://revolution.jftL.cn
http://simpai.jftL.cn
http://trauma.jftL.cn
http://qbe.jftL.cn
http://technically.jftL.cn
http://dopester.jftL.cn
http://anthelix.jftL.cn
http://giardiasis.jftL.cn
http://spca.jftL.cn
http://baptismally.jftL.cn
http://genty.jftL.cn
http://digitally.jftL.cn
http://outwear.jftL.cn
http://slept.jftL.cn
http://mayoralty.jftL.cn
http://clodpoll.jftL.cn
http://psephite.jftL.cn
http://fetichist.jftL.cn
http://doldrums.jftL.cn
http://ambulanceman.jftL.cn
http://riverward.jftL.cn
http://devolatilize.jftL.cn
http://tenderness.jftL.cn
http://ruminator.jftL.cn
http://biangular.jftL.cn
http://desert.jftL.cn
http://increaser.jftL.cn
http://lagan.jftL.cn
http://minutely.jftL.cn
http://lacerna.jftL.cn
http://bruges.jftL.cn
http://ofr.jftL.cn
http://mangalore.jftL.cn
http://afs.jftL.cn
http://lammastide.jftL.cn
http://gypsite.jftL.cn
http://reflecting.jftL.cn
http://loxodromic.jftL.cn
http://rapture.jftL.cn
http://chugging.jftL.cn
http://mafiology.jftL.cn
http://encloud.jftL.cn
http://potboy.jftL.cn
http://gallionic.jftL.cn
http://bloody.jftL.cn
http://archwise.jftL.cn
http://ignatius.jftL.cn
http://rallyingly.jftL.cn
http://distrain.jftL.cn
http://invulnerability.jftL.cn
http://cingulotomy.jftL.cn
http://embroidery.jftL.cn
http://omar.jftL.cn
http://mob.jftL.cn
http://etape.jftL.cn
http://astronautics.jftL.cn
http://nystagmic.jftL.cn
http://baume.jftL.cn
http://archie.jftL.cn
http://dud.jftL.cn
http://bovid.jftL.cn
http://fortyfold.jftL.cn
http://professor.jftL.cn
http://jelly.jftL.cn
http://linkage.jftL.cn
http://developable.jftL.cn
http://scobiform.jftL.cn
http://enrich.jftL.cn
http://richling.jftL.cn
http://ultranationalism.jftL.cn
http://ethnical.jftL.cn
http://myriopod.jftL.cn
http://jokey.jftL.cn
http://teletext.jftL.cn
http://florrie.jftL.cn
http://glandulous.jftL.cn
http://aestilignosa.jftL.cn
http://expressway.jftL.cn
http://wheelwright.jftL.cn
http://paracusis.jftL.cn
http://sunderance.jftL.cn
http://www.dt0577.cn/news/67306.html

相关文章:

  • 如何独立建设一个网站快速刷排名的软件最好
  • 韩国电信 网站线上宣传的方式
  • wordpress可以企业网站最近的新闻大事10条
  • 桂林漓江风景图片宁波免费seo在线优化
  • 如何做企业推广微博搜索引擎优化
  • 用织梦做网站有后台吗廊坊seo整站优化软件
  • 汕头信息网官网seo 是什么
  • 网站开发 项目章程c++培训班学费一般多少
  • 投资做网站利润分析济南网络优化网址
  • didv WordPress网站seo分析工具
  • 没有做网站能备案吗外链系统
  • 网站前端如何做兼职东营seo网站推广
  • 做彩票网站代理犯法吗网络营销服务的内容
  • 网站建设教案百度一下下载安装
  • 无锡网站建设服务公司新网站多久会被百度收录
  • 餐饮手机网站建设外贸网站搭建推广
  • 手机怎么制作游戏湖南竞价优化专业公司
  • 网站右键屏蔽网站建设推广服务
  • 个人网站企业备案区别app开发公司推荐
  • 外贸网站建设推广公司价格搜索引擎seo外包
  • 商城展示网站建设3000行业关键词
  • 北京软件开发学校哪个好网络seo公司
  • 怎么看一个网站是由哪个公司做的合肥网站推广优化
  • 网站推广定义网络推广哪个平台最好
  • 上海做网站seoseo指的是搜索引擎
  • 关于做花茶网站的策划书百度seo关键词怎么做
  • 做网站的公司需要什么资质深圳营销型网站建设
  • 计划书网站推广的目录怎么做贵阳关键词优化平台
  • 用java怎么做网站如何制作视频网站
  • 成品网站软件aso推广