Rust 如何实现 HTTPS 连接,要求拿到原始 socket 而不是加密后的 socket

2024-03-14 16:15:38 +08:00
 vituralfuture

计网课程设计的一个要求是只能使用 socket ,即 TCP 以上需要自己实现,目前已经实现了一个类似 python 的 requests 的 HTTP 请求库,但我发现在访问我的博客时,因为开启了 HSTS ,自动 301 到 HTTPS ,导致无法访问

在网上搜索了一番,这方面的情况reddit 这篇帖子 总结的很好。不过我并没有找到那种能由我自己控制握手,协商等整个 HTTPS 流程的,基本上是提供加密后的 socket (暂时称呼它为 securit socket),如tokio-rustls,openssl 提供的一个例子我觉得比较接近答案了,但仍然有不符合课设要求的嫌疑

总的来说,需求如下

  1. rust 实现,因为我使用了 flutter-rust-bridge ,这也是作为一个亮点
  2. 至少能够在 linux,windows,android 上使用
  3. 必须自己操作原始的 socket
  4. 不要太复杂!我目前对 TLS 并不是很熟悉,计网课程也是完全没讲 TLS

当然我也有点觉得课程的要求有点无理了,所以我会花有限的时间摸索一下

2250 次点击
所在节点    Rust
9 条回复
rrfeng
2024-03-14 16:32:36 +08:00
不用 tls 库你手搓 RSA DH ECDSA ?扯淡呢。
vituralfuture
2024-03-14 16:35:17 +08:00
@rrfeng 加密算法应该还是可以用库的,只要自己实现握手,协商这一系列流程,然后拿到秘钥,把 http 报文加密一下就行
zwy100e72
2024-03-14 17:01:08 +08:00
不要难为你自己了,考虑到这个课程设计的范围,直接用 http 服务吧
libook
2024-03-14 17:46:17 +08:00
课题没要求支持 HTTPS 的话,你就只做支持 HTTP 的是不是就行了。

除非你们老师就是想让你们自己实现 TLS 协议。
PTLin
2024-03-15 09:30:55 +08:00
照着 rustls 抄一个吧,要不然 tls 的好几次握手,证书校验,密钥协商生成密钥等等,够你喝好几壶的了。
不过按照我的经验老师可能也半懂不懂你的意思吧,没想让你自己实现整个 tls 。
RTSmile
2024-03-17 11:06:58 +08:00
有一说一,我感觉你老师压根没仔细看你写的那一段话,只是单纯的看了说要用第三方库就觉得不可以。
课设让自己实现 TLS 意义不大,不光繁琐,还没有任何的实用意义。实际生产使用的 tls 库都是要通过严格的安全审计的,课设这种就算自己设计出来了一个 tls 估计也是一堆漏洞。
bli22ard
2024-03-18 17:58:39 +08:00
什么实力,自己实现 tls
hanyuwei70
2024-03-22 16:05:37 +08:00
如果只是作业,你可以用一个带 HTTP 的服务。
uiiytwyfsdtr
2024-04-19 20:56:31 +08:00
自己原生撸一遍 TLS 你也是够勇气的少年...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1023655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX