简单的说,就是伪造一个 api.twitter.com 出来,然后修改 hosts 文件,将 api.twitter.com 指到我们搭建的反向代理上。由于需要走 https 连接,还需要我们伪造一个 api.twitter.com 的证书。
1. 首先,伪造一个 api.twitter.com 的证书
1.1 创建 CA 的私钥
openssl genrsa -out ca.key 4096
1.2 创建 CA 证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
1.3 创建服务器私钥
openssl genrsa -out server.key 4096
1.4 创建服务器证书签名请求(注意 Common Name 填 api.twitter.com)
openssl req -new -key server.key -out server.csr
1.5 用 CA 证书签名
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
这样,一个伪造的证书就创建好了,下面把 server.crt 和 server.key 复制到 /etc/nginx/ssl 里面(或者其他的路径,只要跟配置文件里面一致就可以了)
2. 配置反向代理(注意 server_name 填 api.twitter.com)
server {
listen 443;
server_name api.twitter.com;
charset utf-8;
access_log /var/log/nginx/t.anbutu.com.access.log main;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass https://api.twitter.com:443;
proxy_set_header Host $host;
}
}
3. 修改 hosts 文件,将 api.twitter.com 指到我们代理的IP上
205.185.127.127 api.twitter.com
4. 导入 CA 证书
这时候直接访问 api.twitter.com 还是不行的,因为我们是伪造的证书,肯定会报证书错误的,还需要将我们的 CA 证书(ca.crt) 设为可信。其他平台就不说了,简单说一下 iphone 上如何导入证书。苹果官方有一个 iPhone Configuration Utility 的软件,可以用来导入证书。其实这里还有一个更简单的办法,把你的证书放在网上,然后用 iphone 上的 Safari 访问一下证书的 URL,就可以将这个证书导入了。证书导入以后,由这个 CA 签署的所有证书就都变为可信了。
关于自签证书,可以参考:http://log.dongsheng.org/2009/09/07/https-certificate/
你也不怕ip被滥用,然后把你地址封掉。
好吧,我把 CA 证书删掉了
弄了好久反向代理就是没弄成功,原來ssl證書還要僞造成twitter官方的啊= =||
要是我想把twitter.com , oauth.twitter.com ,***.twitter.com都反向代理過去,是不是只要把server_name全寫上就行了?SSL證書怎麽辦?
我也曾经试图只给api.twitter.com做代理,但是只能登录,获取tweets的时候会出错,一直没找到原因。
此方法失效了么?请问你现在用的是什么方法?
有没有更好的解决办法?
没有失效
更简单的办法是用iptables进行端口转发