10.11 HTTPS
没有HTTPS的抓包截图
HTTPS=HTTP + TLS/SSL
https 实现过程如下 1.客户端发起HTTPS请求 rewrite www.baidu.com https://www.baidu.com 客户端访问某个web端的https地址,一般都是443端口 2.服务器端的配置 采用https协议的服务器必须有一套证书 证书就是一个公钥和私钥 你可以将公钥送给别人用来加密文件,只有你的私钥可以打开,就保证了数据的安全 证书:需要从一些CA组织颁发,CA被各大浏览器厂商所认可 也可以自己颁发, 3.传送证书 服务端给客户端传递证书,其实就是公钥,包含了(颁发机构,过期时间等) 4.客户端解析证书 这部分是由客户端完成的,首先验证公钥的有效性,比如颁发机构和过期时间等, 如果发现异常则会弹出警告框提示证书可能存在问题, 如果证书没有问题就生成一个随机值,然后用证书对该随机值进行加密, 5.传送4步骤的加密数据 将用证书加密后的随机值传递给服务器,目的就是为了让服务器得到这个随机值,以后客户端和服务器端的通知就可以通过这个随机值进行加密解密了 6.服务器端解密信息 服务器端用私钥解密第5步加密后的随机值之后,得到了客户端传过来的随机值(私钥) 然后把内容通过该值进行对称加密(就是将信息和私钥通过算法混合在一起), 这样除非你知道私钥,不然是无法获取其内部的内容,而正好客户端和服务器端都知道这个私钥,只要机密算法足够复杂就可以保证数据的安全性 7.传输加密后的信息 服务器端将用私钥加密后的数据传递给客户端,在客户端可以被还原出数据内容 8.客户端解密信息 客户端用之前生成的私钥解密服务端传递过来的数据,由于数据一直是加密的,所以第三方获取也无法知道其详细内容
配置参数
配置参数 listen 443 ssl; ssl_certificate *.crt; ssl_certificate_key *.key; 私钥 ssl_protocols [SSLv2|SSLv3|TLSv1|TLSv1.1|TLSv1.2];ssl协议版本 ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m;
自签证书
[root@centos7 conf.d]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt Generating a 4096 bit RSA private key ................................................................++ .......................................................++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:cn State or Province Name (full name) []:guangdong Locality Name (eg, city) [Default City]:shenzhen Organization Name (eg, company) [Default Company Ltd]:nginx Organizational Unit Name (eg, section) []:tech Common Name (eg, your name or your server's hostname) []:www.nginx.com Email Address []:
nginx配置
server { listen 443 ssl; server_name www.nginx.com; ssl_certificate ca.crt; ssl_certificate_key ca.key; # ssl_protocols SSLv2 ; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
反向代理
server { listen 81; server_name localhost; location / { proxy_pass http://10.211.55.20:80; proxy_set_header X-Forwarded-For $remote_addr; #IP转发 } }
配置nginx status
location /status { stub_status on; //开启状态模块功能 allow 192.168.0.1; //只允许本机查看(实验环境不需要添加) deny all; //拒绝所有人查看(实验环境不需要添加) } Active connections: //当前活动的连接数量 accepts //已经接受客户端的连接总数量 handled //已经处理客户端的连接总数量 requests //客户端发送的请求数量 Reading //当前服务器正在读取客户端请求头的数量 Writing //当前服务器正在响应客户端的信息数量 Waiting //当前客户端正在等待服务器的响应数量