为本地 HTTP/2 代理生成证书
Posted
技术标签:
【中文标题】为本地 HTTP/2 代理生成证书【英文标题】:Generating a Certificate for Local HTTP/2 Proxy 【发布时间】:2015-07-08 00:25:45 【问题描述】:我试图让 Firefox 每晚使用安全的 HTTP/2 代理,但它拒绝接受自签名证书。
代理由 nghttp2 作为 HTTP/2 前端和一个简单的 Twisted 代理作为后端组成。 Twisted 代码来自https://wiki.python.org/moin/Twisted-Examples,它自己作为 HTTP/1.1 代理工作。 nghttp2 使用
调用nghttpx -s -flocalhost,8443 -b127.0.0.1,8080 server.pem server.pem -L INFO
Firefox 将其用作https://nghttp2.org/documentation/nghttpx-howto.html#http-2-proxy-mode 中指定的代理。
我使用
为 localhost 创建了 server.pemopenssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
当我尝试通过代理加载像 http://www.something.com 这样的通用网站时,Firefox 会显示“此连接不受信任”警告。但是,如果我告诉它添加并存储异常,它只会再次显示警告。据我所知,它永远不会通过 nghttp2 前端到达 Twisted 代理。
我应该为安全代理证书做一些不同的事情吗?除了 nghttp2 声明之外,我在网上找不到很多东西,“请注意,Firefox nightly 和 Chromium 都需要有效的证书才能安全代理。”
【问题讨论】:
它似乎与 Chrome 一起工作,所以我假设这是 Firefox 的问题。 看来我谈论 Chrome 的时间太早了。 Chrome 当前错误地实现了 HTTP/2 CONNECT:code.google.com/p/chromium/issues/detail?id=433784 【参考方案1】:Patrick McManus 在Firefox bugzilla a while ago 中几乎完全回答了这个问题 - 原因是 Firefox 中仍然缺少 UI:
你可以为代理案例做一个TOFU例外,但你必须这样做 有点不同。
在 Firefox 中关闭代理使用。
在地址栏中输入https://PROXYNAME:PROXYPORT/(使用与您在 PAC 中配置的名称和端口号相同的名称和端口号 - 您不能使用 ip地址或默认端口..你不能使用ip地址,因为 PKI 无法验证它们,并且每个端口都存储异常。
覆盖证书警告和权限。存储异常。你得到的回应将毫无意义,因为你现在正在解决 代理端口,就好像它是一个端点 重新打开代理并使用它。
【讨论】:
以上是关于为本地 HTTP/2 代理生成证书的主要内容,如果未能解决你的问题,请参考以下文章
sh 笔记:OpenSSL生成「自签名」证书,配置Nodejs本地HTTPS服务 - 12.不需要单独创建文件,重新生成证书的方法
sh 笔记:OpenSSL生成「自签名」证书,配置Nodejs本地HTTPS服务 - 11.通过v3.ext对证书进行重新生成