web服务如何调试https请求
来源:互联网 发布:网络销售是什么工作啊 编辑:程序博客网 时间:2024/05/17 01:12
web服务调试https请求
- web服务调试https请求
- 背景
- 免费安装https证书
- fiddler设置
- charles设置
- nginx设置
- web服务调试https请求
背景
最近公司内部加大了安全力度,要求对于外网接口全部切换成https,之前我们使用fiddler或者charles只能抓取到http的请求数据,所以针对改造,开发与测试的线下环境也需要相应的进行升级。
免费安装https证书
首先客户端和服务器端都需要安装https证书,一般有效的证书都需要花钱认证,因为是线下测试环境,所以我们只要生成一个免费的证书测试即可.
要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择。HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上。
SSL使用证书来创建安全连接。有两种验证模式:
- 仅客户端验证服务器的证书,客户端自己不提供证书;
- 客户端和服务器都互相验证对方的证书。
显然第二种方式安全性更高,一般用网上银行会这么搞,但是,普通的Web网站只能采用第一种方式。
客户端如何验证服务器的证书呢?服务器自己的证书必须经过某“权威”证书的签名,而这个“权威”证书又可能经过更权威的证书签名,这么一级一级追溯上去,最顶层那个最权威的证书就称为根证书。根证书直接内置在浏览器中,这样,浏览器就可以利用自己自带的根证书去验证某个服务器的证书是否有效。
如果要提供一个有效的证书,服务器的证书必须从VeriSign这样的证书颁发机构签名,这样,浏览器就可以验证通过,否则,浏览器给出一个证书无效的警告。
申请一个证书签名的费用是一年几十~几百刀不等,所以如果只是出于管理目的,可以创建自签名证书,保证管理员通过浏览器安全连接到服务器。
下面简单介绍如何创建一个自签名的SSL证书。
创建自签名证书需要安装openssl,使用以下步骤:
1.创建Key;
2.创建签名请求;
3.将Key的口令移除;
4.用Key签名证书。
为HTTPS准备的证书需要注意,创建的签名请求的CN必须与域名完全一致,否则无法通过浏览器验证。
以上步骤命令繁琐,所以我做了一个shell脚本,能一次性把证书搞定。脚本如下:
#!/bin/sh # create self-signed server certificate:read -p "Enter your domain [www.example.com]: " DOMAINecho "Create server key..."openssl genrsa -des3 -out $DOMAIN.key 1024echo "Create server certificate signing request..."SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csrecho "Remove password..."mv $DOMAIN.key $DOMAIN.origin.keyopenssl rsa -in $DOMAIN.origin.key -out $DOMAIN.keyecho "Sign SSL certificate..."openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crtecho "TODO:"echo "Copy $DOMAIN.crt to /etc/nginx/ssl/$DOMAIN.crt"echo "Copy $DOMAIN.key to /etc/nginx/ssl/$DOMAIN.key"echo "Add configuration in nginx:"echo "server {"echo " ..."echo " listen 443 ssl;"echo " ssl_certificate /etc/nginx/ssl/$DOMAIN.crt;"echo " ssl_certificate_key /etc/nginx/ssl/$DOMAIN.key;"echo "}"
运行脚本,假设你的域名是www.test.com,如果是IP,需要将服务器的端口加上,比如:196.88.1.100:8888那么按照提示输入:
$ ./gencert.sh Enter your domain [www.example.com]: 196.88.1.100:8888 Create server key...Generating RSA private key, 1024 bit long modulus.................++++++.....++++++e is 65537 (0x10001)Enter pass phrase for www.test.com.key:输入口令Verifying - Enter pass phrase for www.test.com.key:输入口令Create server certificate signing request...Enter pass phrase for www.test.com.key:输入口令Remove password...Enter pass phrase for www.test.com.origin.key:输入口令writing RSA keySign SSL certificate...Signature oksubject=/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=www.test.comGetting Private keyTODO:Copy www.test.com.crt to /etc/nginx/ssl/www.test.com.crtCopy www.test.com.key to /etc/nginx/ssl/www.test.com.keyAdd configuration in nginx:server { ... ssl on; ssl_certificate /etc/nginx/ssl/196.88.1.100:8888.crt; ssl_certificate_key /etc/nginx/ssl/196.88.1.100:8888.key;}
红色部分是输入,注意4次输入的口令都是一样的。
在当前目录下会创建出4个文件:
196.88.1.100:8888.crt:自签名的证书
196.88.1.100:8888.csr:证书的请求
196.88.1.100:8888.key:不带口令的Key
196.88.1.100:8888.key:带口令的Key
Web服务器需要把196.88.1.100:8888.crt发给浏览器验证,然后用196.88.1.100:8888.key解密浏览器发送的数据,剩下两个文件不需要上传到Web服务器上。
以Nginx为例,需要在server {…}中配置:
server { ... ssl on; ssl_certificate /etc/nginx/ssl/www.test.com.crt; ssl_certificate_key /etc/nginx/ssl/www.test.com.key;}
如何在应用服务器中配置证书呢?例如Tomcat,gunicorn等。正确的做法是不配置,让Nginx在应用服务器前面作转发处理HTTPS,然后通过proxy以HTTP连接后端的应用服务器,相当于利用Nginx作为HTTPS到HTTP的安全代理,这样即利用了Nginx的HTTP/HTTPS处理能力,又避免了应用服务器不擅长HTTPS的缺点。
fiddler设置
fiddler可以通过代理将https的请求转成http请求 转发给应用服务器
使用fiddler autoResponder 将域名转发到指定服务器上,具体操作如图:
设置之后,通过Tools->Fiddler Options 将Fiddler Option中的https勾选
手机上安装证书
用手机浏览器打开http:/172.20.197.19:8888(IP是你电脑的IP,8888是Fiddler的端口)
在页面上下载FiddlerRoot certificate(文件名FiddlerRoot.cer)
安装成功后,绑定fiddler代理,就可以请求接口了
charles设置
暂时还没有研究,待续
nginx设置
也可以不通过fiddler转发,nginx也可以通过反向代理来实现向应用服务器转发请求.
- 需要在nginx.conf打开ssl开关,如后设置转发地址 配置如下:
server { listen 8278 default backlog=1024; listen 8378 ssl; server_name 196.88.1.100 ***********; more_set_headers 'Server: Apache'; # error_page 400 403 404 500 501 502 503 504 505 /server_errors/; ssl on; ssl_certificate /home/users/yangzhuo02/project/phpproject/ssl/196.88.1.100.crt;//证书所在位置 ssl_certificate_key /home/users/yangzhuo02/project/phpproject/ssl/196.88.1.100.key; //证书所在位置 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; set $product orp; set $subsys orp; if ($http_x_bd_product) { set $product $http_x_bd_product; } if ($http_x_bd_subsys) { set $subsys $http_x_bd_subsys; } set_real_ip_from 10.0.0.0/8; real_ip_header X-Real-IP; location / { #设置代理的地址 proxy_pass http://sh01-orp-app0156.sh01:8260; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X_Real_IP $remote_addr; proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for; }}
- web服务如何调试https请求
- 基于https的web服务
- NodeJS如何发送HTTPS请求
- NodeJS如何发送HTTPS请求
- 【JAVA WEB】使用HTTPS请求外部接口
- 如何调试服务
- 如何调试 Windows 服务
- 如何调试windows服务
- 如何调试服务
- Web服务请求异步化
- Web服务请求异步化
- web服务(Centos7)之配置https
- centos系统web服务开启https
- Charles如何抓取http/https请求
- 如何添加SSL证书实现https请求
- Web服务无法启动调试
- 如何调试web项目
- 如何在 IIS 中设置 HTTPS 服务
- 【一步步学OpenGL 25】-《Skybox天空盒子》
- 将开源项目导入到自己工程中出现Error:(1, 1)
- Theano深度学习笔记(三)多层感知器
- linux系统磁盘分区以及建立一个swap文件增加虚拟内存
- PAT甲级1104
- web服务如何调试https请求
- c语言判断一个数是否为素数
- 立方尾不变(简单算法)
- ZCMU-1812-K好数
- linux 笔记day03(补充版)
- 剖析为什么在多核多线程程序中要慎用volatile关键字?
- Android系统所有可申明权限(原文)
- leetcode 344 Reverse String
- linux 笔记day05