Charles代理SSL证书被浏览器拒绝

7
我使用 Charles proxy(在OS X 10.9.3,Mavericks下)修改 Origin header,以便我连接到的开发中的API接受来自开发环境的请求。我通过一个简单的重写规则实现了这个目标,一切正常运行,直到今天。
当前的问题是浏览器无法连接到Charles设置的代理。请求中的“Failure”字段显示:“未发出请求。可能拒绝了SSL证书。”,在下面的笔记中:“您可能需要配置浏览器信任Charles CA SSL证书。”
我已经尝试过设置,而且它完美地工作。自那时以来,我没有更改过Charles的配置。为了让它工作,我尝试了以下几种方法:
  1. 卸载和重新安装 Charles 证书
  2. 在以下浏览器中尝试相同的操作:Chrome Canary,Chrome stable,Safari和Firefox
  3. 使用 HTTP 代理而不是更高级的 SOCKS 代理。
我还确保始终信任Charles证书,无论默认设置如何。

keychain access

我不确定这是否是解决方案的线索,但当我在开启Charles的情况下直接访问API时,我看到了这个: warning

API确实托管在Windows Azure平台上,但我不明白为什么Charles证书(因为Charles充当中间人,向浏览器显示其证书)是针对*.azurewebsites.com而不是实际主机。

需要注意的是,实际主机(比如api.example.com)拥有一个有效的购买通配符证书,用于*.example.com。

如果有人知道如何解决这个问题或者具体发生了什么,我会非常感激她的建议。

谢谢。

附注:如果我调整直接请求以具有适当的Origin头(已修改/清除敏感信息),则:

GET /xxx HTTP/1.1
主机: api.example.com
连接: keep-alive
缓存控制: max-age=0
接受: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
用户代理: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
接受编码: gzip,deflate,sdch
接受语言: en-US,en;q=0.8,hu;q=0.6
Cookie: ...
来源: https://acceptable.host.com

我得到了以下回复:

HTTP/1.1 400 Bad Request
内容长度 46
内容类型 application/json; charset=utf-8
服务器 Microsoft-IIS/8.0
X-Powered-By ASP.NET
设置Cookie ARRAffinity=secret-token;Path=/;Domain=api.example.com
日期 Wed, 21 May 2014 07:58:02 GMT


“当我在打开 Charles 的情况下直接导航到 API 时,你是什么意思?”第一个案例有什么区别,因为在这两种情况下都打开了 Charles?” - dirkgroten
抱歉,我的表述不够清晰。在第一种情况下,我先导航到http://localhost:8000,然后从那里向API(上面的https://api.example.com)发出XHR请求。而在第二种情况下,我直接导航到API服务器的根目录,即https://api.example.com。 - Balint Erdi
是的,我非常确定,如果直接请求给出此警告,您将通过XHR请求获得错误。 如果您在Firefox中打开开发人员调试控制台,则应该能够看到错误。 - dirkgroten
那不是响应,而是你的请求头(GET、Connection、Accept都是请求头)。在Charles中还有另一个选项卡可以显示响应头。 - dirkgroten
抱歉,太晚了,我猜 :) 我现在也添加了响应头。 - Balint Erdi
显示剩余5条评论
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接