【计算机网络】域名劫持无处遁形:基于HTTPDNS打造可靠且安全的域名解析体系

3.3 添加域名

  1. 点击进入平台服务功能页,然后展开左侧的HTTPDNS菜单,点击概览进入HTTPDNS产品首页。可以看到Account ID以及免费解析量等信息。
    在这里插入图片描述
  2. 点击左侧的域名列表,然后点击添加域名按钮,填写合法的具体域名或泛域名后,点击确定按钮即可保存。

示例:添加*.aliyun.com,aliyun能匹配所有以aliyun.com结尾的域名,比如aliyun.comwww.aliyun.comemas.console.aliyun.com
在这里插入图片描述

3.4 自定义解析域名(可选)

在HTTPDNS的基础上,引入自定义解析功能,可以实现:

  • 客户端自定义参数输入。
  • 服务端结合自定义函数处理能力,支持实现复杂的自定义解析功能。
  • 返回自定义解析结果。

使用自定义域名解析使用频次较低,不再赘述,方法请参见概述

3.5 快速验证

到这里,就可以对设置好的域名进行快速验证了,以确认我们配置的域名是生效的。
方法:浏览器访问测试URL:https://203.107.1.33/Account ID/d?host=待解析域名

需要将**Account ID替换为HTTPDNS产品首页看到的Account ID,将待解析域名**替换为控制台添加的域名。

预期返回类似下面的结果,就表示验证成功了:
在这里插入图片描述

4. 阿里云HTTPDNS集成接入

HTTPDNS提供了简洁的HTTP(S) API接口供用户访问,接入代码较为简单;同时HTTPDNS也为Android和iOS移动端用户提供了SDK进行集成。

4.1 SDK接入

SDK下载请参考下面截图,选择对应平台和SDK包后下载即可。
在这里插入图片描述
在这里插入图片描述
SDK服务接入请参考各自平台的参考文档进行,不再赘述:

4.2 HTTP(S) API非鉴权直接接入(不推荐)

HTTP(S) API早期无需鉴权,拿到Account ID之后即可直接使用,非常方便(所以注意保密Account ID)。但为了避免可能存在的盗刷问题,后面又支持了鉴权机制接入,大大提高了安全性,保护了数字资产。

阿里云HTTPDNS支持单域名解析和多域名解析,本文只演示单域名解析的使用方法,多域名解析请自行参考官方文档

4.2.1 请求API

HTTPDNS通过HTTP接口对外提供域名解析服务,服务接入直接使用IP地址(不使用域名访问就避免了使用传统DNS解析阿里云HTTPDNS域名带来的劫持问题),服务IP有多个(请提工单或加入钉钉群35248489获取),这里以203.107.1.33这个服务IP为例,说明HTTPDNS服务的访问方式。

请求方式:HTTP GETHTTPS GET
HTTP服务URL:http://203.107.XXX.XXX/{account_id}/d
HTTPS服务URL:https://203.107.XXX.XXX/{account_id}/d

其中的{account_id}需要替换为用户的HTTPDNS服务的Account ID,在HTTPDNS控制台上可以获得这个ID。

URL参数说明:

名称是否必须描述
host必须要解析的域名
ip可选用户的来源IP,如果没指定这个参数,默认使用请求连接的源IP。
query可选指定解析结果IP的类型,可以选择6(IPv6)或4(IPv4)。默认值为4。

访问HTTPDNS服务时,一次请求只能解析一个域名。

请求示例(假设Account ID为100000):

  • 示例1(默认来源IP):http://203.107.1.33/100000/d?host=www.aliyun.com
  • 示例2(指定来源IP):http://203.107.1.33/100000/d?host=www.aliyun.com&ip=42.120.XX.XXX
  • 示例3(指定解析类型):http://203.107.1.33/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
  • 示例4 (支持IPv6):http://[2401:b180:2000:XXXX:XXXX]/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
4.2.2 服务IP

考虑到服务IP防攻击之类的安全风险,为保障服务可用性,HTTPDNS同时提供多个服务IP,当某个服务 IP在异常情况下不可用时,可以使用其他服务IP进行重试。上述文档中使用的203.107.1.33是其中一个服务IP。

如果使用场景特殊(比如嵌入式设备开发),无法使用SDK,需要直接访问HTTP API接口,请提工单联系官方获取服务IP列表。

4.2.3 API响应说明
  • 请求成功

请求成功时,HTTP响应的状态码为200,响应结果用JSON格式表示,示例如下:

{
"host":"www.aliyun.com",
"ips":[
"192.168.XX.234"
],
  "ipsv6":[
"2400:3200:1300:0:0:0:XX:XX"
],
"ttl":57,
"origin\_ttl":120
}

返回字段说明:

名称描述
host请求解析的域名
ips该域名的IPv4解析结果,是一个列表,可能包括0个、1个或多个IP地址;仅当query=4时返回这个字段。
ipsv6该域名的IPv6解析结果,是一个列表,可能包括0个、1个或多个IP地址;仅当query=6时返回这个字段。
ttl该域名解析结果的TTL缓存时间。
origin_ttl域名原始TTL,即权威NS上配置的域名TTL值。重要:因服务后端对不同域名的解析方式不同,可能没法获得域名的这个TTL值,此时不返回这个字段。

请求成功时,返回结果中的ips字段可能是空列表,即没有获得该域名的IP地址,这里主要有两个原因:

  • 该域名没有在HTTPDNS控制台中添加,请前往控制台添加。
  • 该域名不存在对应IP,域名未注册,或者没有配置IP地址。
    ips字段为空的返回结果示例:
{
"host":"www.aliyun.com",
"ips":[],
"ttl":300
}

返回结果中包含TTL缓存时间,为避免频繁进行域名解析,用户应该按这个TTL时间,对域名解析结果进行缓存。在TTL过期之前,直接使用缓存的IP;TTL过期后,再去请求HTTPDNS服务,获得最新的解析结果。

  • 请求失败

请求失败时,HTTP响应的状态码为4xx/5xx,同时也返回具体的错误码,响应结果用JSON格式表示。

请求失败的响应示例:

{
	"code":"MissingArgument"
}

错误码列表如下:

错误码HTTP状态码描述
MissingArgument400缺少必要参数。
InvalidHost400域名格式不合法。
TooManyHosts400单域名解析接口传递了多个待解析域名。
SdnsNotSupported400海外暂不支持SDNS服务。
InvalidAccount403无效账户或账户不存在。
MethodNotAllowed405不支持的HTTP方法。
InternalError500服务端内部错误。
  • 错误处理说明

用户业务使用HTTPDNS时,应做好异常情况下的出错兼容逻辑,主要包括异步请求重试降级

+ **异步请求**  
 访问HTTPDNS服务时,应该使用异步请求的策略,避免解析延迟太大而对业务造成影响,特别是在网络环境异常或HTTPDNS服务IP异常不可用时,如果用同步访问,需要等待网络超时后才会返回解析失败,这个超时时间较大,可能对业务的使用体验造成很大影响。

 异步请求策略:解析域名时,如果当前缓存中有TTL未过期的IP,可直接使用;如果没有,则立刻让此次请求降级走原生LocalDNS解析,同时另起线程异步地发起HTTPDNS请求进行解析,更新缓存,这样后续解析域名时就能命中缓存。
+ **重试**  
 访问HTTPDNS服务解析域名时,如果请求HTTPDNS服务端失败,即HTTP请求没有返回,可以进行重试。

 大部分情况下,这种访问失败是由于网络原因引起的,重试可以解决。
+ **降级**  
 当通过HTTPDNS服务无法获得域名对应的IP时,都必须**降级**:使用标准的DNS解析,通过Local DNS去解析域名。

 请求HTTPDNS但没有返回IP时,主要是因为“域名没有在控制台添加”或“域名本身不存在”,无论什么原因,如果通过HTTPDNS没有解析出IP,为保证业务请求正常,必须**降级**使用标准的DNS,作为兜底方案。

4.3 HTTP(S) API鉴权机制接入(推荐)

在非鉴权直接接入的基础上,为了避免可能存在的盗刷问题,后面又支持了鉴权机制接入,大大提高了安全性,保护了数字资产。

4.3.1 请求API
  • 签名生成算法及示例

新鉴权接口

+ `http://203.107.1.33/{account_id}/sign_d`
+ `http://203.107.1.33/{account_id}/sign_resolve`

其中,

  • {account_id} 需要替换为用户的HTTPDNS Account ID,在HTTPDNS控制台上可以获得这个ID。
  • 鉴权接口可以添加IP参数,是否添加该参数及参数内容不影响签名的计算。
  • 服务IP列表请提工单或加入钉钉群35248489获取。
4.3.2 鉴权方案
**签名算法**
`sign = md5sum( host-secret-timestamp )`

**鉴权字段说明**
字段 |描述
---|---
host|需要被解析的host,与URL中的host参数取同样的值。
secret|由服务器负责生成,查看方式:`控制台 > 鉴权配置 > 鉴权secret key`。
timestamp|签名失效时间,1970年1月1日以来的秒数(整型正数,固定长度10)。

**说明**
* 签名最长有效时间不超过24小时。

**签名示例**
-   示例1(普通解析API接口):

    -   原请求:`http://203.107.1.33/{account_id}/d?host=www.aliyun.com`
    
    -   假设密钥为:`IAmASecret`,希望在北京时间2018-08-15 15:00:00失效(时间戳`1534316400`)
    
  	  -   sign = `md5sum(“www.aliyun.com-IAmASecret-1534316400”) = 60c71e98b6d7fcbb366243e224eab457`
    
	 -   鉴权请求:`http://203.107.1.33/{account_id}/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457`
    
-   示例2(批量解析API接口):

  	-   原请求:`http://203.107.1.33/{account_id}/resolve?host=www.aliyun.com,www.taobao.com`
    
   	-   假设密钥为:`IAmASecret`,希望在北京时间2018-08-15 15:00:00失效(时间戳`1534316400`)
    
   	-   sign = `md5sum(“www.aliyun.com,www.taobao.com-IAmASecret-1534316400”) = 12a3f6b1b14a46ca813ca6439beb59a4`
    
  	-   鉴权请求:`http://203.107.1.33/{account_id}/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4`

**此方案优缺点**
-   **缺点**
	-   客户端时间不同。
	-   密钥放在客户端丢失有风险。
    
-   **优点**
	-   无需去服务器拉取。

4.3.3 鉴权响应
  • 鉴权成功时,HTTP响应的状态码为200,响应结果同原HTTPDNS响应,各字段含义不再赘述,请参考第三章。
{
"code": "OK",
"host":"www.aliyun.com",
"ips":[
"192.168.XX.234"
],
  "ipsv6":[
"2400:3200:1300:0:0:0:XX:XX"
],
"ttl":57,
"origin\_ttl":120
}

  • 鉴权失败时,HTTP响应的状态码为403400,响应结果同时也返回具体的错误码,响应结果用JSON格式表示。
 { "code": "InvalidSignature" }

3.3 状态码说明

HTTP状态码错误码描述
403SignatureExpired时间戳已过期
403InvalidSignature签名不正确

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

存中…(img-fJIK8BpU-1715630668807)]

[外链图片转存中…(img-7aRK1Ns9-1715630668808)]

[外链图片转存中…(img-bVqtGkB5-1715630668809)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值