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

55 天前
 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

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

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

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

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

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

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

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

© 2021 V2EX