目录
1.基于https协议的静态网站
1.1.概念解释
1.2 HTTPS安全通信机制
1.3.使用Apache+mod ssl组件的加密认证网站
1.3.5 实验1 http+ssl加密认证
1.3.6.实验2 组建多个子目录网站
拓展:ftp证书:
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议: 安全套接字层超文本传输协议HTTPS。
HTTPS (全称: Hyper Text Transfer Protocol over Secure Socket Layer 或 HypertextTransferProtocol 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传输层安全协议)
1.1.1 SSL协议分为两层:
·SSL记录协议 (SSL Record Protocol) : 它建立在可靠的传输协议 (如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能
SSL握手协议 (SSL Handshake Protocol): 它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等1.1.2 SSL协议提供的服务
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取维护数据的完整性,确保数据在传输过程中不被改变
数字证书:
HTTPS安全通信机制:
1.2.2.过程
(1)客户端(通常是浏览器)向服务端发送加密通信的请求,然后连接到服务端的443
端口,这被叫做ClientHello请求,客户端主要向服务器提供以下信息支持的协议版本,比如TLS 1.0版o
一个客户端生成的随机数1,稍后用于生成”会话密钥”
支持的加密方法,比如RSA公钥加密0
支持的压缩方法。
(2)服务端回应 (SeverHello),接收到信息之后给予客户端响应握手信息,服务器的回应包含以下内容:
确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致服务器关闭加密通信一个服务器生成的随机数2,稍后用于生成”会话密钥”
确认使用的加密方法,这个加密算法一定是client发送给server加密算法的子集,比如RSA公钥加密
服务器证书:可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通a过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,传送的证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名等除此之外,如果服务器需要使用双向认证,就会再包含一项请求,要求客户端提供”客户端证0书”。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书
(3)客户端回应:客户端收到服务器回应以后进行证书解析,首先会验证证书是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机数3(预主密钥"pre-master key”),接下来是通过随机值1、随机值2和随机数3组装会话秘钥。然后通过服务器端证书的公钥加密会话秘钥,传送加密信息,内容如下:
一个随机数C。该随机数用服务器公钥加密,防止被窃听
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容9的hash值,用来供服务器校验
(4)服务器的最后回应: 服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”(对称密钥) 。然后,向客户端最后发送下面信息编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用“会话密钥”加密内容。
大致分为三个阶段:
(1) (2)认证服务器: 浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。(3) (4)协商会话密镇:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
加密通讯: 此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性
PKI(Public Key lnfrastructure) 公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架管理密和证书可以建立一个安全的网络环境
PKI 主要包括四个部分:X509 格式的证书(X509 V3) 和证书废止列表CRL (X509 V2)CA 操作协议;CA管理协议;CA政策制定
X.509通用的证书格式包含三个文件: key,csr,crt。key是私钥文件
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
1.3.1.概念:
mod_ssl组件:是apache的一个模块,以openssl的工具箱为基础专门为apache提供密码保护的一种组件模块
1.3.2.安装
[root@server ~]# yum insta11 mod_ss1-V
1.3.3.配置文件:
主配置文件: /etc/httpd/conf.d/ssl.conf
证书文件: /etc/pki/tls/certs/xxxx.crt
私钥文件: /etc/pki/tls/private/xxxx.key
搭建http+ssl加密认证的web服务器
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewa11d
[root@server ~]# yum instal1 httpd mod_ssl
[root@server ~]# systemct1 start httpd
[root@server ~]# systemctl enable httpd
第二步:创建验证证书真实性的私钥文件
[root@server ~]# cd /etc/pki/tIs/private/
[root@server private]# openssl genrsa -aes128 2048 > zy.key # 创建私钢文件
密钥类型:genrsa 密钥长度:2048位
Enter PEM pass phrase: # 设置私钥文件加密的密码123456
Verifying - Enter PEM pass phrase: # 在输入一遍
第三步:创建数字证书
[root@node2 ~]# cd /etc/pki/tls/certs/
[root@node2 certs]# openssl req -utf8 -new -key /etc/pki/tls/private/zy.key -x509 -days 365 -out zy.crt
[root@node2 certs]# openssl req -utf8 -new -key /etc/pki/tls/private/zy.key -x509 -days 365 -out zy.crt Enter pass phrase for /etc/pki/tls/private/zy.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]:86 # 国家代码:86 State or Province Name (full name) []:shannxi # 省份:陕西 Locality Name (eg, city) [Default City]:xi'an # 城市:西安 Organization Name (eg, company) [Default Company Ltd]:openlab # 公司名:openlab Organizational Unit Name (eg, section) []:RHCE # 部门:RHCE Common Name (eg, your name or your server's hostname) []:server # 主机名:server Email Address []:[email protected] # 邮箱:[email protected] [root@node2 certs]#
# 面试题: 数字证书的包含信息有:
# 国家代码: 86
# 省份: shanxi
# 城市: xi'an
# 公司: openlab
# 部门: RHCE
# 主机名: server
# 邮箱: [email protected]
第四步:修改ssl配置文件
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
主要内容:
sslengine on Sslcertificatefile /etc/pki/tls/certs/zy.crt sslcertificatekeyfile /etc/pki/tls/private/zy.key servername 192.168.17.132 documentroot /zy allowoverride none require all granted
# 设置虚拟主机区域配置
sslengine on # 证书开启ssl
SSLCertificateFile /etc/pki/tls/certs/zy.crt # 证书储存路径SSLCertificateKeyFile /etc/pki/tls/private/zy.key # 私钥文件路径
servername 191.168.17.132 # 主机名或域名
documentroot /zy # 启动目录
# 目录权限
allowoverride none
require all greanted
第五步:创建网站文件
[root@node2 ~]# mkdir /zy
[root@node2 ~]# echo "xhxhdwsacwfsdcx" > /zy/index.html
第六步:重启并进行测试
root@server ~]# systemctl restart httpd # 需要输入证书私的加密密码123456
Enter TlS private key passphrase for 192.168.48.130:443 (RsA):******在浏览器上使用 https://IP地址 进行访问测试。
点击继续访问就会进入你所制作的网站。
目的: 组建多个子目录网站www.openlab.com,该网站有2个子目录www.openlab.com/file 和www.openlab.com/ftp 要求file数据使用http读取,ftp使用https读取
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewa11d
[root@server ~]# yum instal1 httpd mod_ssl
[root@server ~]# systemct1 start httpd
[root@server ~]# systemctl enable httpd
第二步:新建一个存储网页的目录
[root@node2 ~]# mkdir -p /www/file
[root@node2 ~]# mkdir -p /www/ftp
[root@node2 ~]# echo "file" > /www/file/index.html
[root@node2 ~]# echo "ftp" > /www/ftp/index.html
第三步:修改本地hosts映射
[root@node2 ~]# vim /etc/hosts
192.168.17.132 www.openlab.com # 只能通过IP映射到主站
第四步:修改配置文件,新建file子目录网站
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
documentroot /www/file # 启动目录 alias /file /www/file # 别名访问 指名主域名后若根/file就相当于访问/www/file servername 'file' allowoverride none require all granted 注意:访问主域名下的子目录要通过别名来访问,如下:
documentroot /www/file # 启动目录
alias /file /www/file # 别名访问 指名主域名后若根/file就相当于访问/www/file/
第五步:建立https的ftp网站
创建私钥文件:
[root@node2 ~]# openssl genrsa -aes128 2048 > /etc/pki/tls/private/ftp.key
Enter PEM pass phrase: # 私钥文件加密密码:123456
Verifying - Enter PEM pass phrase:
创建数字证书:
[root@node2 ~]# openssl req -utf8 -new -key /etc/pki/tls/private/ftp.key -x509 -days 365 -out /etc/pki/tls/certs/ftp.crt
# 指名该证书用到的私钥文件:-key /etc/pki/tls/private/ftp.key
Enter pass phrase for /etc/pki/tls/private/ftp.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]:86
State or Province Name (full name) []:shanxi
Locality Name (eg, city) [Default City]:baoji
Organization Name (eg, company) [Default Company Ltd]:openlab
Organizational Unit Name (eg, section) []:node1
Common Name (eg, your name or your server's hostname) []:ftp
Email Address []:[email protected]
修改ssl配置文件:(也可以写入主配置文件中)
[root@node2 ~]# vim /etc/httpd/conf.d/ssl.conf
sslengine on SSLCertificateFile /etc/pki/tls/certs/ftp.crt SSLCertificateKeyFile /etc/pki/tls/private/ftp.key servername 'ftp' documentroot /www/ftp alias /ftp /www/ftp allowoverride none require all granted
第六步:重启服务并测试
[root@node2 ~]# systemctl restart httpd
Enter TLS private key passphrase for ftp:443 (RSA) : ******测试:打开 浏览器输入
http://192.168.17.132
https://192.168.17.132
在Linux上使用firefox 命令,打开浏览器用域名访问
http://www.openlab.com/file/
https://www.openlab.com/ftp/ # 该网站具体内容如下: