我正在本地计算机上测试 SSL 隧道代理,并且我的公司使用代理访问公共互联网。这意味着,客户端(curl,本地)-> 代理 1(apache2.2,ssl 隧道)-> ProxyAgent(127.0.0.1:mmmm,本地)<-> Proxy2(yy.yy.yy.yy:aaaa)-> 公共互联网
这是我的 apache 设置(虚拟主机)。
Listen local.ip.address:5000
NameVirtualHost local.ip.address:5000
<VirtualHost *:5000>
ServerName test-server:5000
ProxyRequests On
AllowCONNECT 443
ProxyPass / http://127.0.0.1:mmmm/
ProxyPassReverse / http://127.0.0.1:mmmm/
CustomLog logs/internalproxy_access_log combined
ErrorLog logs/internalproxy_error.log
</VirtualHost>
我使用这个命令来测试:
卷曲-vhttps://www.google.com-U 用户名:密码 -xhttp://本地ip地址:5000
响应如下:
* 6 在 0 毫秒内过期(传输 0x989e70)
* 尝试 xx.xx.xx.xx... * TCP_NODELAY 设置 * 4 在 200 毫秒内过期(传输 0x989e70) * 连接到 xx.xx.xx.xx (xx.xx.xx.xx) 端口 5000 (#0) * 分配连接缓冲区! * 建立到 www.google.com:443 的 HTTP 代理隧道 * 使用 Basic 和用户 'xxxxxx' 进行代理身份验证 > 连接 www.google.com:443 HTTP/1.1 > 主机:www.google.com:443 > 代理授权:基本 XXXXXXXXXXXXXXXXXXXXXX > 用户代理:curl/7.64.0 > 代理连接:保持活动 > * 错误:1408F10B:SSL 例程:ssl3_get_record:版本号错误 * 关闭连接 0 curl:(35)错误:1408F10B:SSL 例程:ssl3_get_record:版本号错误
正确的回应是这样的:
* 代理对 CONNECT 请求回复 200 * 连接阶段完成! * ALPN,提供 h2 * ALPN,提供 http/1.1 * 成功设置证书验证位置: * CA文件:M:\tools\curl\bin\curl-ca-bundle.crt CApath:无 * TLSv1.3 (OUT)、TLS 握手、客户端问候 (1): * 连接阶段完成! * 连接阶段完成! * TLSv1.3(IN),TLS 握手,服务器问候(2): * TLSv1.2 (IN),TLS 握手,证书 (11): * TLSv1.2(IN),TLS 握手,服务器密钥交换(12): * TLSv1.2 (IN),TLS 握手,服务器完成(14): * TLSv1.2(OUT),TLS 握手,客户端密钥交换(16): * TLSv1.2 (OUT),TLS 更改密码,更改密码规范 (1): * TLSv1.2(OUT),TLS 握手,完成(20): * TLSv1.2 (IN),TLS 握手,完成(20): * 使用 TLSv1.2 / ECDHE-ECDSA-CHACHA20-POLY1305 的 SSL 连接 * ALPN,服务器接受使用 h2 * 服务器证书: * 主题:C=美国;ST=加利福尼亚;L=山景城;O=Google LLC;CN=www.google.co 米 * 开始日期:2019 年 1 月 23 日 09:15:00 GMT * 到期日期:2019 年 4 月 17 日 09:15:00 GMT * subjectAltName:主机“www.google.com”与证书的“www.google.com”匹配 * 发行人:C=US;O=Google Trust Services;CN=Google Internet Authority G3 * SSL 证书验证成功。 * 使用HTTP2,服务器支持多用途 * 连接状态已改变(HTTP/2 已确认) * 升级后将流缓冲区中的 HTTP/2 数据复制到连接缓冲区:len=0
是不是我的设置有什么地方不对呢?
谢谢你!