一、实验要求
网站需求:
1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!!
2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息,www.openlab.com/data网站访问教学资料,网站访问缴费网站(http://www.openlab.com/money网站访问缴费网站)。
3.要求
(1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。
(2)访问缴费网站实现数据加密基于https访问。
二、知识点总结
1、web服务器简介
(1)什么是www
www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。
(2)网址及HTTP简介
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页。
-
网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>
-
浏览器常支持的协议有:http、https、ftp等。
-
主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
-
端口号(port):http为80,https为443 (IANA:互联网数字分配机构)
-
0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)
-
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
-
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
-
-
-
http请求方法:在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。
-
状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
状态码范围 作用描述 100 - 199 用于指定客户端相应的某些动作 200 - 299 用于表示请求成功 300 - 399 用于己经移动的文件,并且常被包含在定位头信息中指定新的地址系信息 400 - 499 用于指出客户端的错误 500 - 599 用于指出服务端的错误 -
MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)最初是为了解决在 不同的电子邮件系统之间搬移报文时存在的问题。后来http也支持了这个功能,用它来描述数据并 标记不同的数据内容类型。 当web服务器响应http请求时,会为每一个http对象数据加一个MIME类型。当web浏览器获 取到服务器返回的对象时,会去查看相关的MIME类型,并进行相应的处理。 MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象 类型和一个特定的子类型。常见的MIME类型:
MIME类型 文件类型 text/html html、htm、shtml文本类型 text/css css文本类型 text/xml xml文本类型 image/gif gif图像类型 image/jpeg jpeg、jpg图像类型 application/javascript js文本类型 text/plain txt文本类型 application/json json文本类型 video/mp4 mp4视频类型 video/quicktime mov视频类型 video/x-flv flv视频类型 video/x-ms-wmv wmv视频类型 video/x-msvideo avi视频类
(3)http协议请求的工作流程
(1)终端客户在web浏览器地址栏输入访问地址域名售卖 (2)web浏览器请求DNS服务器把域名www.ceshi.com解析成web服务器的IP地址 (3)web浏览器将端口号(默认是80)从访问地址(URL)中解析出来 (4)web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接 (5)建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文 (6)web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。 (7)web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。
Apache: http服务器是一个模块化的服务器,可以运行几乎所有广泛使用的计算机平台上。属于应用服务器。Apache支持模块多,性能稳定,apache本身是静态解析,但也可以通过扩展脚本、模块等支持动态页面。(apache可以支持phpcgiperl,但是使用java的话需要tomcat在apache后台支持,将java请求由apache转给tomcat处理)
tomcat:应用(java)服务器,他只是一个servlet容器,可以认为是apache的扩展,但是可以独立用于apache运行。
nginx:相对一Apache占用更少的内存及资源一个轻量级服务器,是一个高性能的http和反向代理服务器,同时也是一个IMPA/POP3/SMTP代理服务器。
2.https简介
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)。
SSL协议分为两层:
-
SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
-
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器 2)加密数据以防止数据中途被窃取 3)维护数据的完整性,确保数据在传输过程中不被改变
1.请求连接,tcp三次握手 确认版本
2.秘钥套件的协商,开始身份认证(非对称算法)证书验证 协商对称算法[客户端验证服务器身份]
3.建立ssl 会话链接
4.加密会话交互
5.断开会话链接
TLS完整的通信流程
第一阶:段客户端端申请建立https连接
第二阶段:客户端和服务器确认加密版本,加密套件
1.浏览器向服务器发送一个clientHello的报文
客户端产生一个随机数Random(ClientRandom)
会话ID:第一次肯定为空
Cipher suite: 加密套件(秘钥交换,完整性校验算法,对称机密算法 ,算法列表)
2.服务端向客户端回复一个ServerHello(确认使用的TLS的版本,以及加密套件)
Random随机数:服务产生的(ServerRandom)
SessionID: 0
Cipher suite:确认使用加密套件
Compression method: null 不压缩
Extension: 扩展字段
第三阶段:证书发送验证 (客户端验证证书取出公钥,用公钥加密生成的对称秘钥发送个服务器通知改变加密信息传递)
3.服务器向客户端发送Certificate (服务器的身份证,证书由第三方权威机构颁发)
4.服务器向客户端发送serverkey Exchange(通过和客户端协商的密码算法套件发送Pubkey结合HD算法生成Premastersecret(最终加密的会话秘钥))
5.certificate Request 可选报文(认证可以是单向也可以是双向,一般都是单向客户端验证服务端身份,服务端验证客户端客户端也需要发送证书)
6.ServerHello Done 服务端发送握手信息完毕
7.客户端回复服务器报文Certificate 如果有第五阶段则提交客户端的证书进行认证
8.ClientKey Exchange 秘钥交换信息和步骤4类似
9.ChangeCiper Spec: 通知消息(消息改变通知,及后面消息要进行加密了)
10.Encrypted Handshake Messges 校验数据包的完整性MD5(hash)将数据包的值进行散列最后和服务端的散列值进行比较一致意味着沟通过程中没有第三者的介入
第四阶段:服务收到消息,用私钥解密取,确认对称秘钥通知客户端ssl通道建立完成
11.服务器向客户端回包:NewSession Ticket(建立会话票据,提供会话票据)
12.change cipher Spec: 改变密码通知加密发送信息
13.encrypted Handshake message (Finished)
第五阶段:客户端和服务端可以通过加密通道开始数据通信
Application Data(http)客户端和服务端可以通过加密通道开始数据通信
第六阶段:客户端断开连接
三、实验思路
首先主机上需要安装nginx服务以及http服务
1、在nginx的主配置文件‘vim /etc/nginx/nginx.conf’主配置文件中由于有include /etc/nginx/conf.d/*.conf;他会将/etc/nginx/conf.d/目录下的所有以.conf结尾的子配置文件导入到主配置文件中加载,所以只需在/etc/nginx/conf.d/目录下创建子配置文件配置即可。2、创建/www/openlab/ 主目录存放网页文件以及创建主目录下的子目录/student/ /data/ 子界面网页文件 按照要求单独在/www 放money的子网页文件3、创建子配置文件进行编写内容4、安装htppd-tools,配置用户认证,并在子配置文件进行编写5、创建https所需的密钥和数据证书,并在子配置文件对其路径进行编写
四、实验步骤
安装服务并启动这里关闭selinux和防火墙
[root@server ~]# yum install nginx http -y
[root@server ~]# systemctl start nginx
systemctl stop firewalld # 关闭防火墙
setenforce 0 # 关闭selinux
创建文件
[root@server ~]# cat /www/
money/ openlab/
[root@server ~]# cat /www/openlab/
data/ index.html student/
配置文件主页文件地址
[root@server ~]# vim /etc/nginx/conf.d/openlab.conf
server {listen 192.168.1.14:80;server_name www.openlab.com;root /www/openlab;location / {index index.html;}
}
写入主页内容
[root@server ~]# echo welcome to openlab > /www/openlab/index.html
查看主页信息
[root@server ~]# curl www.openlab.com
welcome to openlab
编辑子界面信息
server {listen 192.168.1.14:80; --> 要监听服务器的IP地址及端口号server_name www.openlab.com; 服务器名称root /www/openlab; 主页存放路径
#学生信息location /student { #location 定义用户请求的url,并返回相应的资源文件index index.html; 索引文件的文件名alias /www/openlab/student;auth_basic on;auth_basic_user_file /etc/nginx/users;}
#教学资料location /data {index index.html;alias /www/openlab/data;}
}#缴费网站
server {listen 192.168.1.14:443 ssl;server_name www.openlab.com;root /www/money/;ssl_certificate "/etc/pki/tls/certs/openlab.crt";ssl_certificate_key "/etc/pki/tls/private/openlab.key";location /money {index index.html;alias /www/money/;}
}
写入子文件内容
[root@server ~]# echo this id data > /www/openlab/data/index.html
[root@server ~]# echo this id money > /www/money/index.html
[root@server ~]# echo this id student > /www/openlab/student/index.html
查看子界面信息(其他两个也是一样的方法)
[root@server ~]# echo this id data > /www/openlab/data/
按照要求
1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。
添加用户认证
[root@openEuler ~]# htpasswd -c /etc/nginx/conf.d/users song # 第一次创建加-c创建文件
New password: # 输入密码用户
Re-type new password: # 再次输入确认
Adding password for user song
[root@openEuler ~]# htpasswd /etc/nginx/conf.d/users tian # 第二次不加-c,否则覆盖上一次信息
New password:
Re-type new password:
Adding password for user tian
结果
配置子配置文件,添加用户认证信息及认证的目录文件
在学生信息处添加两行配置
2)访问缴费网站实现数据加密基于https访问。
创建秘钥和证书
重启服务并验证
因为www.openlab.com未备案注册,想要以域名访问需在windows或者linux的hosts文件添加映射关系,
windows:修改hosts文件方法
使用管理员打开记事本文件
最后一行添加映射
或者linux:修改hosts
vim /etc/hosts,在最后一行添加映射关系