概述
一、www服务器
1.什么是www:
www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。
与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。
(1)www所用的协议:
浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
(2)主流的Web服务器是
www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的Internet信息服务器(Internet Information Services,IIS)和unix nginx。
(3)服务器提供的最主要数据
服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
(4)客户端收到服务器的数据
收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的chrome浏览器。
2.网址的意义:
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在/var/www/html。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。
(1)URL:
Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
<协议>://<主机地址或主机名>[:port]/<目录资源,路径>
(2)浏览器常支持的协议有:
http、https、ftp等。
(3)主机地址或者主机名:
主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
(4)端口:
http为80。https为443。
IANA:互联网数字分配机构
0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听);
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口;
(5)浏览器与服务器之间传递数据的方法:
(6)状态代码
由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx:指示信息 —— 表示请求已接收,继续处理。
2xx:成功 —— 表示请求已被成功接收、理解、接受。
3xx:重定向 —— 要完成请求必须进行更进一步的操作。
4xx:客户端错误 —— 请求有语法错误或请求无法实现。
5xx:服务器端错误 —— 服务器未能实现合法的请求。
(7)常见状态代码、状态描述的说明
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
3.www服务器的类型:
(1)仅提供用户浏览的单向静态网页
单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。
(2)提供用户互动接口的动态网站
这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。
另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计。
(3)搭建动态网站的需求:
. 可支持的操作系统:让所有需要的软件都能够进行安装。
. 可运行的www服务器:例如Apache。
. 网页程序语言:Perl(Practical Extraction and Report Language,实用报表提 取语言)、PHP(Hypertext Preprocessor,超文本预处理器,是一种通用 开源脚本语言)、JSP(Java Server Pages,java服务器页面)、CGI(Common Gateway Interface,公共网关接口)、ASP(Active Server Pages,动态服 务器页面)。
. 数据存储的数据库系统 :MySQL、MSSQL、Oracle等。
LAMP(linux+Apache+MySQL+PHP)
Apache主要提供www的服务器平台
MySQL:传统的文件读取是很麻烦的,如果你只要读取该文件当中的一小部分,系统还是会将整个文件读出来,若又有人同时读取同一个文件时,那就会造成效率与系统上的问题,所以才会有数据库系统的推出。数据库其实是一种特殊格式的文件,这种文件要通过特殊接口(数据库软件)来进行读写。由于这个特殊接口已经针对数据的查询、写入做过优化设计,因此很适合多人同时写入与查询工作。
PHP:PHP可以被用来建立动态网页,PHP程序代码可以直接在HTML网页当中嵌入,就像编辑HTML网页一样简单。PHP是一种“程序语言”,这种程序语言可以直接在网页当中编写,不需要经过编译即可执行。
4.www服务器基本配置
(1)搭建静态网站——基于http协议的静态网站
. 服务器端:在linux上面实现网页服务器需要Apache这套服务器软件,httpd 提供Apache主程序。
. 挂载镜像:
[root@localhost 桌面]# mount /dev/sr0 /mnt
[root@localhost 桌面]# vim /etc/yum.repos.d/ce.repo
[id]
name=ce
baseurl=file:///mnt
enable=1
gpgcheck=0
. 安装软件:
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# rpm -ql httpd
. /etc/httpd/conf/httpd.conf 主要的配置文件 。
. /etc/httpd/conf.d/.conf 额外的参数文件。如果你不想要修改原始配置文件 httpd.conf的话,那么你可以将你自己的额外参数文件独立出来,例如你想要 有自己的额外设置值,可以将它写入/etc/httpd/conf.d/zhuji.conf(注意,扩展 名一定是.conf),而启动Apache时,这个文件就会被读入主要配置文件当中 了。
. /var/www/html/这就是默认的首页所在目录,当输入网址时所显示的数据,就是 放在这个目录当中的首页文件(默认为index.html)。
. /var/www/cgi-bin/默认给一些可执行的CGI(网页程序)程序放置的目录,当输 入网址/cgi-bin/时所显示的数据所在。
. /var/log/httpd/默认的Apache日志文件都放在这里,对于流量比较大的网站来说, 一个星期的日志文件的数据可以达到1GB左右。
. 主配置文件内容
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
31 ServerRoot “/etc/httpd” http服务的顶级目录为/etc/httpd
42 Listen 80监听在80端口,80为web服务器的默认端口
56 Include conf.modules.d/.conf 包括/etc/httpd/conf.modules.d/*.conf的所有 文件
66 User apache服务的用户(ps -ef | grep httpd,先以root用户把/usr/sbin/httpd服 务启动起来)。启动服务后转换的身份,在启动服务时通常以root身份,然 后转换身份,这样增加系统安全
67 Group apache
86 ServerAdmin root@localhost你的邮箱,有事的时候给你发邮件
95 #ServerName www.example.com:80 ServerName 0.0.0.0:80匹配任意IP地址, 监听端口在80端口
默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果 解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定 ip地址,当这项不正确的时候服务器不能正常启动。解决办法就是启动该项 把www.example.com:80修改为自己的域名或者直接修改为localhost
102 目录为根,<>为起始标志,</>为结束标志
103 AllowOverride none 不允许这个目录下的访问控制文件来改变这里的 配置,这也意味着不用查看这个目录下的访问控制文件。
104 Require all denied 拒绝访问根
105 和是一组标签,目录控制容器
119 DocumentRoot "/var/www/html"网页文件存放的目录
124 <Directory “/var/www”>
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128
131 <Directory “/var/www/html”>
144 Options Indexes FollowSymLinks 索引,跟踪软链接
151 AllowOverride None
156 Require all granted
157
163 加载一个目录模块
164 DirectoryIndex index.html
165
171 <Files “.ht*”>不能访问
172 Require all denied
173
182 ErrorLog “logs/error_log”
189 LogLevel warn
191 日志配置模块 /var/log/httpd,日志模块:通过时间节点去记录(man date)
196 LogFormat “%h %l %u %t “%r” %>s %b “%{ Referer}i” “%{User-Agent}i”” combined
197 LogFormat “%h %l %u %t “%r” %>s %b” com mon
198
199
201 LogFormat “%h %l %u %t “%r” %>s %b " %{Referer}i” “%{User-Agent}i” %I %O" combi nedio
202
217 CustomLog “logs/access_log” combined
218
220 别名模块
247 ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
248
249
cgi(通用网关接口)是web服务器运行时外部程序的规范,按cgi编写的程 序可以扩展服务器的功能。cgi应用程序能与浏览器进行交互,还可通过数 据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数 据
255 <Directory “/var/www/cgi-bin”>
256 AllowOverride None
257 Options None
258 Require all granted
259
261 多用途互联网邮件扩展模块
266 TypesConfig /etc/mime.types
283 AddType application/x-compress .Z
284 AddType application/x-gzip .gz .tgz
305 AddType text/html .shtml
306 AddOutputFilter INCLUDES .shtml
307
mime多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程 序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应 用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件 打开方式。
316 AddDefaultCharset UTF-8 默认字符集
318
324 MIMEMagicFile conf/magic
325
348 EnableSendfile on
353 IncludeOptional conf.d/*.conf
. 重启服务:[root@localhost ~]# systemctl restart httpd
. 查看状态:[root@localhost ~]# systemctl status httpd | less
. 编辑httpd的主配置文件:vim /etc/httpd/conf/httpd.conf
将ServerName 改成0.0.0.0:80
重启服务
看状态显示正常
在客户端:curl http://ip地址
通过浏览器访问http://ip地址
实验一:
搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面。
[root@localhost ~]# echo hello world > /var/www/html/index.html
[root@localhost ~]# curl 192.168.126.140
hello world
实验二:
建立两个基于ip地址访问的网站,要求如下:
1、该网站ip地址的主机位为100,设置DocumentRoot为/www/ip/100,网页内容为:this is 100。
2、该网站ip地址主机位为200,设置DocumentRoot为/www/ip/200,网页内容为:this is 200
. 挂载镜像,配置yum源
[root@localhost 桌面]# mount /dev/sr0 /mnt
[root@localhost 桌面]# vim /etc/yum.repos.d/ce.repo
[id]
name=ce
baseurl=file:///mnt
enable=1
gpgcheck=0
. 安装httpd包:
[root@localhost ~]# yum install httpd -y
. 添加ip地址
[root@localhost 桌面]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.100/24 ipv4.gateway 192.168.126.1 ipv4.method manual connection.autoconnect yes
[root@localhost 桌面]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.200/24
[root@localhost 桌面]# nmcli connection up eno16777736
. 创建目录/www/ip/100和/www/ip/200
[root@localhost 桌面]# mkdir -pv /www/ip/{100,200}
. 在网页文件的根目录中,定义网页内容
[root@localhost 桌面]# echo this is 100 > /www/ip/100/index.html
[root@localhost 桌面]# echo this is 200 > /www/ip/200/index.html
. 关闭防火墙
[root@localhost 桌面]# systemctl stop firewalld.service
[root@localhost 桌面]# setenforce 0
[root@localhost 桌面]# getenforce
. 定义基于不同ip地址来访问网站的配置文件
[root@localhost 桌面]# vim /etc/httpd/conf.d/host.conf
. 重启httpd服务
[root@localhost 桌面]# systemctl restart httpd
. 测试
[root@localhost 桌面]# curl 192.168.126.100
[root@localhost 桌面]# curl 192.168.126.200
实验三:
建立两个基于不同端口访问的网站,要求如下:
1、建立一个使用web服务器默认端口的网站,设置DocumentRoot为/www/port/80,网页内容为:the port is 80。
2、建立一个使用10000端口的网站,设置DocumentRoot为/www/port/10000,网页内容为:the port is 10000。
. 挂载镜像,配置yum源
[root@localhost 桌面]# mount /dev/sr0 /mnt
[root@localhost 桌面]# vim /etc/yum.repos.d/ce.repo
[id]
name=ce
baseurl=file:///mnt
enable=1
gpgcheck=0
. 安装httpd包:
[root@localhost ~]# yum install httpd -y
. 创建目录/www/port/80和/www/port/10000
. 在网页文件的根目录中,定义网页内容
[root@localhost 桌面]# echo the port is 80 > /www/port/80/index.html
[root@localhost 桌面]# echo the port is 10000 > /www/port/10000/index.html
. 写配置文件
[root@localhost 桌面]# vim /etc/httpd/conf.d/host.conf
. 重启服务
[root@localhost 桌面]# systemctl restart httpd
. 测试
[root@localhost 桌面]# curl 192.168.126.10
[root@localhost 桌面]# curl 192.168.126.10:10000
实验四:
基于域名的网站,需要用到域名解析。域名------->ip地址
浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
windows下的hosts文件路径:C:WindowsSystem32driversetchosts
Linux下的hosts文件路径:/etc/hosts
3、路由缓存:路由器也有DNS缓存。
4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。
建立两个基于域名访问的网站,要求如下:
1、新建一个网站,域名为www.ceshi.com,设置DocumentRoot为/www/name,网页内容为this is test。
2、新建一个网站,域名为rhce.first.day,同时可通过ce.first.day访问,设置DocumentRoot为/www/ce,网页内容为:today is first day of class。
. 挂载镜像,配置yum源
[root@localhost 桌面]# mount /dev/sr0 /mnt
[root@localhost 桌面]# vim /etc/yum.repos.d/ce.repo
[id]
name=ce
baseurl=file:///mnt
enable=1
gpgcheck=0
. 安装httpd包:
[root@localhost ~]# yum install httpd -y
. 创建两个网页文件根目录/www/name和/www/ce
[root@localhost 桌面]# mkdir -pv /www/{name,ce}
. 在网页文件的根目录中,定义网页内容
[root@localhost 桌面]# echo this is test > /www/name/index.html
[root@localhost 桌面]# echo today is first day of class > /www/ce/index.html
. 编辑配置文件
[root@localhost 桌面]# vim /etc/httpd/conf.d/host.conf
. 编辑hosts配置文件
[root@localhost 桌面]# vim /etc/hosts
. 关闭防火墙
[root@localhost 桌面]# systemctl stop firewalld.service
[root@localhost 桌面]# setenforce 0
[root@localhost 桌面]# getenforce
. 重启服务
[root@localhost 桌面]# systemctl restart httpd
.测试
(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)维护数据的完整性,确保数据在传输过程中不被改变。
. 如何证明公开密钥本身是货真价实的公开密钥?
如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到 的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传 输过程中,真正的公开密钥已经被攻击者替换掉了。这个时候就需要第三方 公证单位来帮忙啦。
CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证 书数据并向CA单位注册,那么当客户端的浏览器在浏览时,该浏览器会主 动向CA单位确认该证书是否为合法注册过,如果是,那么该次连接才会建 立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接。所以说, 如此一来WWW服务器不但有公证单位的证书,用户在建立连接时也比较有 保障。
. 当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信:
(1)客户端浏览器向服务器端发送如下信息:
1、客户端支持的SSL /TLS协议的版本号。
2、Cipher Suite(密钥算法套件)。
3、客户端产生的随机数,稍后用于生成"对话密钥"。
(2)服务器端向客户端发送如下信息:
1、确认使用的加密通信协议版本,如果浏览器与服务器支持的版本不一 致,服务器关闭加密通信。
2、确认使用的加密方法。
3、服务器证书。
要使数字证书有用,它的结构必须采用一种可理解且可靠的形式,以便人们 可以轻松地检索并理解证书内的信息。例如,护照采用这样一种结构:人们 可以轻松地理解以前从未见过的那一类护照中的信息。同样,只要数字 证书是标准化的,则无论颁发该证书的是哪个机构,人们都可以阅读并理解 该证书。
S/MIME 标准规定:
用于 S/MIME 的数字证书应遵守国际电信同盟 (ITU) X.509 标准。S/MIME 版本 3 明确要求数字证书应遵循 X.509 的第 3 版。由于 S/MIME 依赖于 已建立的数字证书结构公认标准,因此 S/MIME 标准建立在该标准的发展 之上,从而提高了它的认可度。
X.509 标准规定数字证书应包含标准化信息。具体地说,
X.509 版本3证 书包含下列字段:
版本号 证书所遵循的 X.509 标准的版本。
序列号 唯一标识证书且由证书颁发机构颁发的编号。
签名算法 CA用于对证书进行数字签名的hash算法。
颁发者名称 实际颁发该证书的证书颁发机构的标识。
有效期 数字证书保持有效的时间段并包含起始日期和过期日期。
使用者名称 数字证书所有者的姓名。
使用者公钥信息 与数字证书所有者关联的公钥以及与该公钥关 联的特定公钥算法。
颁发者唯一标识符 可以用来唯一标识数字证书颁发者的信息。
使用者唯一标识符 可以用来唯一标识数字证书所有者的信息。
扩充信息 与证书的使用和处理有关的其他信息。
证书颁发机构的数字签名 使用指纹算法中指定的HASH算法以 及证书颁发机构的私钥进行加密的数字签名。
4、服务器生成的随机数,稍后用于生成"对话密钥"。
(3)客户端利用服务器传过来的信息验证服务器的合法性。如果合法性验证没 有通过,通讯将断开;如果合法性验证通过,则可以知道认证服务器的公开 密钥的是真实有效的数字证书认证机构,并且服务器的公开密钥是值得信赖 的。(此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时, 如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会 事先在内部植入常用认证机关的公开密钥。)
(4)客户端随机产生一个用于后面通讯的对称密钥,然后用服务器的公钥对其 加密,然后将加密后的对称密钥传给服务器。
. HASH是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固 定长度的输出,该输出就是散列值。Hash算法特别的地方在于它是一种单向 算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值, 却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原 的密码存储、信息完整性校验等。
常见的HASH算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、 HMAC-MD5、HMAC-SHA1。
. 共享密钥加密(对称密钥加密):加密和解密使用相同密钥。
对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6 和AES。
. 公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一 把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而 公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文 的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己 的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也 不必担心密钥被攻击者窃听盗走。
. 常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、 DSA(数字签名用)。
. 但由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点, 使他们共同使用,而这也是HTTPS采用的加密方式。在交换密钥阶段使用 公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
. HTTPS的安全通信机制:
工作流程可大致分为三个阶段:
(1)认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA 机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如 果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中, 并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览 器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流 程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我 们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者 移除我们不信任的CA机构。
(2)协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该 公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端 往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的 服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两 个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中, 使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商 都会有不一样的结果,所以安全性也比较高。
(3)加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输 的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃 取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整 性。
. PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务 的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架 管理密钥和证书可以建立一个安全的网络环境。PKI 主要包括四个部分: X.509 格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA 操作 协议;CA 管理协议;CA 政策制定。
X.509通用的证书格式包含三个文件:key,csr,crt。
key是私钥文件。
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名。
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书, 包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息。
. mod_ssl是一种以openssl 的工具箱为基础专门为apache webserver 提供密码保 护的软件。
. 安装mod_ssl包
[root@localhost ~]# yum install mod_ssl -y
.
[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# make jiami.crt
. 编辑配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/host.conf
<VirtualHost 192.168.126.10:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
密码套件,列出允许客户端协商的密码。
SSLCertificateFile /etc/pki/tls/certs/jiami.crt 指定证书路径
SSLCertificateKeyFile /etc/pki/tls/certs/jiami.key 指定密钥文件路径
DocumentRoot /www/jiami
ServerName 192.168.126.10
. 关闭防火墙
. 重启服务
[root@localhost ~]# systemctl restart httpd
. 通过浏览器访问 https://ip地址
(3)基于虚拟目录和用户控制的web网站
. 添加可以访问的用户
[root@localhost 桌面]# htpasswd -c /etc/httpd/userfile A(-c表示创建)
[root@localhost ~]# htpasswd /etc/httpd/userfile B
[root@localhost ~]# htpasswd /etc/httpd/userfile C
. 创建验证目录
[root@localhost ~]# mkdir /usercontrol
. 写入信息
[root@localhost ~]# echo chenggong > /usercontrol/index.html
. 定义子配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
AllowOverride none
Require all granted
<Directory /usercontrol>
AuthType Basic
AuthName “Please enter your username:”
AuthUserFile /etc/httpd/userfile
Require user A B
<VirtualHost 192.168.126.10>
ServerName 192.168.126.10
DocumentRoot /usercontrol
ErrorLog /var/log/httpd/dummy-host2.example.com-error_log
Customlog /var/log/httpd/dummy-host2.example.com-access_log common
~
AuthType Basic 基本认证类型(账号)
AuthName “Please…:” 提示信息,双引号必须有,可以更换为其它提示信息
AuthUserFile /etc/httpd/userfile 用户认证文件的用户名和密码指定的文件位置
Require user A B 指定这两个用户可以访问该服务器
. 重启服务
[root@localhost ~]#systemctl restart httpd
. 测试
[root@localhost ~]#curl 192.168.227.140/ -u A
在浏览器中输入:http://192.168.126.10/
【登录成功后实际上访问的是/usr/local/mysecret/index.html的内容】
会弹出如下需要输入用户名和密码的窗口:
如果显示类似如下提示:
Unauthorized
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn’t understand how to supply the credentials required.
来自 http://192.168.126.10/
将下图中的“启用弹出窗口阻止程序”的勾去掉
. 增添虚拟目录
基于用户控制的web服务器就搭建好了,但通常用户控制与虚拟目录会联合起来用的。一般点开一个网页会显示该网站的首页,基于不同的用户为其增添属于其自己的操作界面此时就用到了虚拟目录。
… 创建目录与静态网页
在usercontrol目录下创建一个secret目录,并写入静态网页。
[root@localhost 桌面]# mkdir /usercontrol/secret
[root@localhost桌面]#cho you get secret > /usercontrol/secret/index.html
… 修改子配置文件
Alias /secret /usercontrol/secret 表示在输入浏览器访问的IP或域名后加上/secret,那么会自动访问到/usercontrol/secret路径下的文件。由于本次实验没有添加DNS,因此我们需要在IP后加。(紫色框为添加的内容)
…重启服务
[root@localhost 桌面]# systemctl restart httpd.service
…测试
(4)搭建动态网站
动态网站并不是指具有动画功能的网站,而是指网站内容可根据不同情况动态变更的网站,一般情况下动态网站通过数据库进行架构。 动态网站除了要设计网页外,还要通过数据库和编程序来使网站具有更多自动的和高级的功能。
动态网页:使用网页脚本语言,比如php、JSP等,通过脚本将网站内容动态存储到数据库,用户访问网站是通过读取数据库来动态生成网页的方法。
WSGI(Web Server Gateway Interface)是一个统一的Python接口标准(PEP 3333),该标准描述了Python应用如何与Web服务器通信,多个Python应用之间如何级联以处理请求。
[root@localhost ~]# yum install mod_wsgi -y
[root@localhost ~]#mkdir /var/www/alt
[root@localhost ~]# vim /etc/httpd/conf.d/host.conf
<Directory “/var/www/alt”>
AllowOverride None
Require all granted
<VirtualHost 192.168.126.222:80>
WSGIScriptAlias / /var/www/alt/webinfo.wsgi
python脚本内容[root@localhost ~]# vim /var/www/alt/webinfo.wsgi
def application(environ, start_response):
status = ‘200 OK’
output = ‘Hello World’
response_headers = [(‘Content-type’, ‘text/plain’),
(‘Content-Length’, str(len(output)))]
start_response(status, response_headers)
return [output]
重启httpd
Curl访问
在浏览器中输入地址
最后
以上就是拉长书包为你收集整理的www总结的全部内容,希望文章能够帮你解决www总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复