https://xxx.com:8080走的是443端口还是8080端口?

2024-11-05 22:23

我自己搭建了一个OJ系统,只能走8080端口,但是有要求配置SSL,又要用HTTPS协议,那请问走的是443还是8080端口?

图片

图片

8080端口。

客户端,浏览器或者APP,拿到的请求指令URI(Uniform Resource Identifier)解析如下:

  1. 与侦听TCP 8080端口的服务器(xxx.com),建立TCP连接。发送TCP Connect()之前需要使用DNS将服务器域名(xxx.com)解析为IP地址。

  2. TCP连接Established之后,使用该Connection ID建立TLS Session,SNI=“xxx.com”。

  3. 服务器进程通过调用TLS库函数,完成与客户端的TLS Session。在TLS Handshake阶段需要出示SNI=“xxx.com”请求的数字证书,以及上一级证书。客户端成功验证证书链(基于本地信任Root CA),双方完成Key Exchange,TLS Session成功建立。

  4. 客户端的网页请求就可以在TLS Session上加密传输。

网页请求出问题,发生在TLS阶段。由于TLS从SSL 3.0进化而来,SSL 3.0 – > TLS 1.0 -- > TLS 1.1 --> TLS 1.2 -- > TLS 1.3。每个版本都无法与前一个版本兼容。故客户端可能会尝试一个版本几次,失败了再试下一个。如果服务器与客户端支持的TLS版本没有交集,那么无论尝试多少次都会失败。

如果服务器为了最大兼容性,所有版本都支持,就会牺牲安全性

鱼和熊掌不可兼得!

假设客户端、服务器支持所有版本,中间人只要将TLS 1.0、1.1 、1.2、1.3的Client Hello报文丢了,客户端可能会尝试SSL 3.0,最后双方成功建立SSL Session,3.0版本。

由于SSL 3.0版本的Key的长度依然停留在美国出口(Export)管制阶段的40位,破解难度大大降低。

此外,上文提到不仅要出示服务器的证书,给服务器签发证书的上一级证书也要出示。顶层的根证书,由于客户端预装并信任,可以不用发给客户端,发不发都没有问题。

以上。

更多补充阅读,请继续。

URI解析

图片

  • URI = scheme ":" ["//" authority] path ["?" query] ["#" fragment]

  • authority = [userinfo "@"] host [":" port]

  • userinfo =username:password

参照以上解析,题主的URI=” https://xxx.com:8080”,解析得到信息如下:

  • scheme=”https”

  • host = “xxx.com”

  • port =”8080”

  • path = “”

  • username=”Anonymous”

在解析前,客户端会做一个URI格式标准化(Normalization)。

host字符全部小写。

如果authority后没有“/”,自动添加“/”。

“/”与"?"之间的所有,即为path

故,标准化后的URI=”https://xxx.com:8080/

再来看一个例子

URI=”https://www.Zhihu.com/hot”

标准化后的URI=”https://www.zhihu.com/hot”

  • scheme=”https”

  • host = “zhihu.com”

  • port =”443”

  • path = “hot”

  • username=”Anonymous”

客户端拥有这些解析信息,就可以DNS、TCP、TLS、HTTP Request、Authentication。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: