问题:在浏览器中输入www.baidu.com之后发生了什么?
1.把www.baidu.com解析成ip-> 域名解析
a.计算机查看浏览器的dns缓存,如果没有则b
b.计算机的dns本地服务器,如果没有则c (此时开始从根目录开始依次询问)
c.先去请求根服务器——> www.bai.com——> .com的域名服务器在哪儿?
d.本地dns再去请求.com域名服务器——> baidu域名服务器在哪儿?
e.本地dns再去请求baidu域名服务器——> www域名服务器在哪儿?
f.本地dns去请求www服务器——> 如果www域名服务器,有这个ip返回给你,如果没有,未能解析
2. 进行tcp连接: 三次握手
3. 发送http请求(http/https)
4. 获取响应
5. 浏览器进行渲染解析
6. 断开连接的时候: tcp四次挥手
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
HTTPS并不是一个新协议,而是HTTP+SSL。原本HTTP和TCP组合通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
SSL协议:①SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
②SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务:①认证用户和服务器,确保数据发送到正确的客户端和服务端②加密数据以防止数据中途被窃取③维护数据的完整性,确保数据在传输过程中不被改变。
过程: 首先客户端向服务端发送请求:
①客户端支持的协议版本号
②客户端支持的加密算法(密钥,算法)
③客户端产生随机数random_client_num1
然后服务端在收到客户端发来的请求后回复:
①服务端发送协商好的协议版本
②服务端发送协商好的加密算法
③服务端发送服务器证书AC
④服务器产生随机数random_server_num1
客户端在接受服务端发送到数据后:
首先验证服务器证书AC合法性,如果不合法,通讯断开;如果合法,则可以从服务器证书中获取到公开的密钥。然后客户端通过证书里面的公钥产生一个对称密钥,然后用服务器公钥进行加密,并加密后的对称密钥传给服务器。
此时,服务端接受到客户端发来的对称密钥:
服务端通过用自己的私钥对客户端发来的对称密钥进行解密,并使用对称密钥进行文件传输。
第一阶段: 此时客户端向服务端发送ClientHello包,服务端回复一个SeverHello包,此时客户端产生一个随机数client_null(这个阶段是客户端和服务端通信为hello包)
第二阶段:此时服务端为唯一发送方,向客户端发送AC证书及其根连接发送给客户端,服务端会产生一个随机数server_null(Certificate[证书],Server Key Exchange[公钥],Certificate Request[验证客户端证书请求] 和ServerHello Done[hello结束])
第三阶段:客户端成为这个阶段的唯一发送方,服务端成为唯一接收方。客户端在接受服务端发来的信息交流过程中产生第三个随机数:pre_master,这个随机数是根据服务端(根据公钥产生的对称密钥)和客户端产生的client_num和server_num通过密钥交换算法产生的。客户端将pre_master和产生这个随机数的对称密钥发给服务器。(此时客户和服务端都掌握三个随机数,利用相同算法算出main_master--->这就是对称密钥)
第四阶段:此时服务端通过对称密钥将自己的算出的随机数发送给客户端,并达成SSL四次握手
搭建静态https的服务器://①使用yum下载文件包,进行httpd文件安装
[root@localhost ~]# yum install mod_ssl -y
//②配置创建连接的index.html文件(访问的目录)
[root@localhost www]# mkdir -pv https
[root@localhost www]# cd /www/https/
[root@localhost https]# vim index.html
// vim编辑index的文件
This is my first https page
//③配置更改阿帕奇登录页面的权限设置
[root@localhost certs]# cd /etc/httpd/conf.d
autoindex.conf host.conf README ssl.conf userdir.conf welcome.conf
[root@localhost conf.d]# vim host.conf
//为分配权限 (文件位置,允许人,给予权限)
AllowOverride none
Require all granted
//监听这个ip地址下的443端口
#listen 443
// 配置虚拟机(文档位置,服务名,ssl服务引擎打开,协议选择,密码选择套件,认证证书(公钥,信息),配置私钥)
documentRoot "/www/https"
ServerName 192.168.220.132
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGh:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
[root@localhost conf.d]# systemctl stop firewalld
//刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd
这个时候去访问(https://192.168.220.132显示为一个不安全的连接(原因:自己搭建的服务器没有获得AC认证))
基于https协议下搭建一个访问需要验证的网页://由于之前已经ym配置好centos
//首先设置密码和密码文件位置
[root@localhost usr]# htpasswd -c /usr/local/etc/passwords test
//passwd:123456
[root@localhost usr]# mkdir -pv /usr/local/mysecret
[root@localhost usr]# echo "My secret" >> /usr/local/mysecret/index.html
//转到密码文件的index.html 并将passwords存放在mysecret下
[root@localhost usr]# cd /etc/httpd/conf.d
[root@localhost usr]# vim host.conf
//设置为监听8001端口
listen 8001
AuthType Basic
AuthName "Hello"
AuthBasicProvider file
AuthUserFile "/usr/local/etc/passwords"
Require user test
alias "/mysecret" "/usr/local/mysecret"
ServerName 192.168.220.132
//alias为一个转移符,将如果访问文件"/mysecret",则会转移到"/usr/local/mysecret"
[root@localhost conf.d]# systemctl stop firewalld
//刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd
//此时可能会报错,需要修改文件的权限/usr/local/mysecret(chown +x /usr/local/mysecret)
此时如果需要访问这个带密码的文档时,需要在ip地址后加上端口号和这个文件位置 /mysecret
基于https协议下搭建一个CGI访问的网页(动态页面):WSGI(Web Server Gateway Interface)是一个统一的Python接口标准(PEP 3333),该标准描述了Python应用如何与Web服务器通信,多个Python应用之间如何级联以处理请求。
//首先配置cgi的文件
[root@localhost ~]# mkdir -p /www/cgi
[root@localhost ~]# cd /www/cgi
//在cgi文件内写入内容
[root@localhost ~]# vim cgi
#!/bin/bash
printf "Context-type:text/htmlnn"
printf "Hello World for CGI"
[root@localhost ~]# cd /etc/httpd/conf.d
[root@localhost conf.d]# vim host.conf
AllowOverride none
Options +ExecCGI
AddHandler cgi-script .cgi .py .pl
require all granted
listen 8002
scriptAlias /cgi /www/cgi
ServerName 192.168.233.200
[root@localhost conf.d]# chown +x /www/cgi
//给予执行权限
[root@localhost conf.d]# systemctl stop firewalld
//刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd



