使用然后删除自签名证书 localhost

问题描述

问题背景:

作为计算机网络课程作业的一部分,我的任务是实现一个代理服务器(使用 python socketssl 模块)来处理浏览器和源服务器(我的浏览器想要与之通信的真实服务器)。

到目前为止我做了什么:

我已经使用 ssl 套接字实现了上述要求,并且还生成了自签名 'cert.pem' 'key.pem' 文件

我需要做什么:

现在我只需要告诉我的浏览器(kubuntu 20.04 上的 chrome 89)接受这个自签名证书,然后测试我的代理服务器的工作。

this stackoverflow question 读取,我可以看到我必须: (1) 成为我自己的 CA (2) 然后将我的 SSL 证书签名为 CA。 (3) 然后将 CA 证书(不是 SSL 证书,进入我的服务器)导入 Chrome。

我的困惑/问题:

因此,如果我这样做,当我最终完成这项任务时,我如何撤消所有这些步骤,以使浏览器处于我进行所有这些更改之前的先前状态。另外,如何反转“成为您自己的 CA”并删除由我的 CA 签名的 SSL 证书。 基本上,我希望我的系统恢复到我进行所有这些更改之前的状态。

更新:

我已经完成了之前概述的步骤,但现在出现错误

这是我的代码片段:

serv_socket = socket(AF_INET,SOCK_STREAM)
serv_socket.bind(('',serv_port))
serv_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context = context.load_cert_chain('cert.pem','key.pem')
context.set_ciphers('EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH')

serv_socket.listen(10)

socket_to_browser,addr = serv_socket.accept()

conn_socket_to_browser = context.wrap_socket(socket_to_browser,server_side=True)

最后一行 conn_socket_to_browser = context.wrap_socket(socket_to_browser,server_side=True) 抛出异常:[SSL: HTTPS_PROXY_REQUEST] https 代理请求 (_ssl.c:1123)

我做错了什么?

解决方法

就像“成为你自己的 CA”一样迷人,使用 openssl 基本上归结为创建一个自签名证书,然后创建一个目录来存储一些特定于 CA 的配置(我不完全记得细节,但我认为这只是一些与 CN 和序列号相关的文件)所以基本上反转“成为你自己的 CA”步骤就像删除这个目录以及你正在使用的私钥和自签名证书一样平凡CA。就是这样,CA 不复存在了。

对于返回到先前状态的 chrome,您只需转到添加 CA 证书的 CA 列表,选择它并删除它。 Chrome 将停止接受由您的 CA 签署的证书。

关于您的新问题...在我看来,您已经开发了某种反向代理(意味着您希望正常的 HTTPS 请求然后重定向到真实服务器),但您已将 Chrome 配置为将其用作转发代理人。在这种情况下,Chrome 不会向其发送正常的 HTTPS 请求,而是发送一个特殊的非加密 CONNECT 命令,只有在收到非加密响应后,才会协商 TLS 连接。这就是为什么 openssl 会说“https 代理请求”,因为它检测到了“https 代理请求”(一个 CONNECT 命令)而不是正常的 TLS 协商。

你可以看看How can a Python proxy server (using SSL socket) pretend to be an HTTPS server and specify my own keys to get decrypted data?

它是 python,但我想你会明白