6、基于https协议的静态网站

RHCE板块

欢迎来到我的博客,这里是Linux板块,配合之前RHCSA进阶,希望我的博客可以帮助到您,感谢您的阅读,有什么问题还希望一起探讨交流,感谢各位的支持,感谢!

  1. 使用Linux搭建一个简单的论坛
  2. RHCE——一、安装部署及例行性工作
  3. RHCE——二、时间服务器
  4. RHCE——三、远程连接服务器
  5. RHCE——四、Web服务器(理论篇
  6. RHCE——五、Web服务器及内网穿透(实验篇
  7. RHCE——六、基于https协议的静态网站
  8. RHCE——七、搭建云存储器
  9. RHCE——八、DNS域名解析服务器
  10. RHCE——九、SELinux
  11. RHCE——十、防火墙、iptables、firewalld
  12. RHCE——十一、NFS服务器
  13. RHCE——十二、Mysql服务
  14. RHCE——十三、Shell自动化运维编程基础
  15. RHCE——十四、变量和引用
  16. RHCE——十五、shell条件测试
  17. RHCE——十六、流程控制之条件判断、循环
  18. RHCE——十七、文本搜索工具-grep、正则表达式
  19. RHCE——十八、shell编程之sed
  20. RHCE——十九、shell编程之awk
  21. RHCE——二十、Ansible及安装与配置
  22. RHCE——二十一、Ansible模块

一、概念解释

  • 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。
  • HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
  • HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext TransferProtocol 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、SSL协议分为两层

  • SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等

2、SSL协议提供的服务

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器
  • 加密数据以防止数据中途被窃取
  • 维护数据的完整性,确保数据在传输过程中不被改变

二、HTTPS安全通信机制

1、图解

2、过程

  • (1)客户端(通常是浏览器)向服务端发送加密通信的请求,然后连接到服务端的443端口,这被叫做ClientHello请求,客户端主要向服务器提供以下信息
    • 支持的协议版本,比如TLS 1.0版。
    • 一个客户端生成的随机数1,稍后用于生成"会话密钥"。
    • 支持的加密方法,比如RSA公钥加密。
    • 支持的压缩方法。
  • (2)服务端回应(SeverHello),接收到信息之后给予客户端响应握手信息,服务器的回应包含以下内容:
    • 确认使用的加密通信协议版本,比如TLS 1.0版本,。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
    • 一个服务器生成的随机数2,稍后用于生成"会话密钥"。
    • 确认使用的加密方法,这个加密算法一定是client发送给server加密算法的子集,比如RSA公钥加密
    • 服务器证书:可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,传送的证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名等
    • 除此之外,如果服务器需要使用双向认证,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书
  • (3)客户端回应:客户端收到服务器回应以后进行证书解析,首先会验证证书是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机数3(预主密钥"pre-master key"),接下来是通过随机值1、随机值2和随机数3组装会话秘钥。然后通过服务器端证书的公钥加密会话秘钥,传送加密信息,内容如下:
    • 一个随机数C。该随机数用服务器公钥加密,防止被窃听。
    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
  • (4)服务器的最后回应:服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"(对称密钥)。然后,向客户端最后发送下面信息。
    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
  • 至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。
  • 大致分为三个阶段:
    • (1)(2)认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
    • (3)(4)协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
    • 加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有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)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

三、使用Apache+mod_ssl组件的加密认证网站

1、概念

  • mod_ssl组件:是apache的一个模块,以openssl的工具箱为基础专门为apache提供密码保护的一种组件模块

2、安装

[root@server ~]# yum  install  mod_ssl  -y

3、配置文件

  • 主配置文件:/etc/httpd/conf.d/ssl.conf
  • 证书文件:/etc/pki/tls/certs/xxxx.crt
  • 私钥文件:/etc/pki/tls/private/xxxx.key

4、ssl配置文件的主要参数

[root@server ~]# vim  /etc/httpd/conf.d/ssl.conf   # 打开主配置文件
# 常用参数如下:
5 Listen 443 https   # 监听的端口号
18 SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog # 存储证书的密码信息
23 SSLSessionCache   shmcb:/run/httpd/sslcache(512000)   # ssl的缓存,位置
24 SSLSessionCacheTimeout  300  # 换存的超时时长
40 <VirtualHost _default_:443>  # 重要,定义虚拟主机的信息
48 ErrorLog logs/ssl_error_log  # 错误日志
49 TransferLog logs/ssl_access_log  # 传输日志
50 LogLevel warn  # 日志等级
54 SSLEngine on  # ssl引擎开启
66 SSLHonorCipherOrder on  # 协商算法
85 SSLCertificateFile /etc/pki/tls/certs/localhost.crt  # 证书存储路径
93 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key  # 私钥文件路径
202 </VirtualHost>  # 虚拟主机结束定义

四、实验

1、搭建https+ssl的加密认证web服务器

  • 第一步:准备工作
# 恢复快照
[root@server ~]# setenforce  0           
[root@server ~]# systemctl stop  firewalld
[root@server ~]# systemctl disable  firewalld
[root@server ~]# yum  install  httpd  mod_ssl -y
[root@server ~]# systemctl start  httpd   # 启动httpd
[root@server ~]# systemctl enable  httpd  # 设置开机启动

在这里插入图片描述

  • 第二步:新建存储网站数据文件的目录
[root@server ~]# mkdir  -p  /www/zy
# 私用xftp将windows的zy网站数据文件上传到/www/zy目录中
  • 第三步:在/etc/pki/tls/private目录中生成私钥文件(创建验证证书真实性的私钥文件)
[root@server ~]# cd  /etc/pki/tls/private   # 进入私钥文件存储目录
[root@server private]# openssl  genrsa  -aes128  2048 > zy.key # 建立私钥文件,必须是.key文件
Enter PEM pass phrase:               # 密码123456
Verifying - Enter PEM pass phrase:   # 再输一遍密码123456

在这里插入图片描述

  • 第四步:在/etc/pki/tls/certs目录中生成证书
[root@server private]# cd  /etc/pki/tls/certs
[root@server 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:  # 输入私钥加密密码123456
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]:xi'an                     # 城市
Organization Name (eg, company) [Default Company Ltd]:openlab     # 公司
Organizational Unit Name (eg, section) []:RHCE                    # 部门
Common Name (eg, your name or your server's hostname) []:server   # 主机名
Email Address []:andy@qq.com                                      # 邮箱

# 输入内容时,若输入错误,使用ctrl+退格 进行删除


#面试题:数字证书的包含信息有:
#国家代码:86
#省份:shanxi
#城市:xi'an
#公司:openlab
#部门:RHCE
#主机名:server
#邮箱:andy@qq.com

在这里插入图片描述

  • 第五步:修改ssl配置文件
[root@server certs]# cd  ~
[root@server ~]# vim  /etc/httpd/conf.d/ssl.conf 
# 定位第一行,输入以内内容
<virtualhost  192.168.13.134:443>  #设置虚拟主机区域配置
        sslengine on   #开启ssl
        SSLCertificateFile /etc/pki/tls/certs/zy.crt #证书存储路径
        SSLCertificateKeyFile /etc/pki/tls/private/zy.key #私钥文件路径
        servername      192.168.13.134 #主机名或域名
        documentroot    /www/zy #启动目录
        
        <directory /www/zy>   #目录权限
        	allowoverride  none
        	require all     granted
		</directory>
</virtualhost>

在这里插入图片描述

  • 第六步:重启服务
[root@server ~]# systemctl  restart  httpd
🔐 Enter TLS private key passphrase for 192.168.13.134:443 (RSA) : ******   # 需要输入私钥的密码123456               
  • 第七步:测试
# 在windows端打开浏览器,输入https://192.168.13.134,点击高级->接受风险并继续

2、组建含多子目录的网站

  • 组建多个子目录网站www.openlab.com,该网站有2个子目录www.openlab.com/file和www.openlab.com/ftp,要求:
    • file数据使用http读取
    • ftp数据使用https读取
  • 第一步:准备工作
# 恢复快照
[root@server ~]# setenforce  0           
[root@server ~]# systemctl stop  firewalld
[root@server ~]# systemctl disable  firewalld
[root@server ~]# yum  install  httpd  mod_ssl -y
[root@server ~]# systemctl start  httpd   # 启动httpd
[root@server ~]# systemctl enable  httpd  # 设置开机启动
  • 第二步:新建网页目录并建立网页
[root@server ~]# mkdir  -p  /www/file
[root@server ~]# mkdir  -p  /www/ftp
[root@server ~]# echo  "file"  >  /www/file/index.html  # 写入网站数据
[root@server ~]# echo  "ftp"  >  /www/ftp/index.html
  • 第三步:建立本地hosts域名映射
[root@server ~]# vim  /etc/hosts   # 添加如下内容
192.168.48.130  www.openlab.com   
#注:只能是主域名,不能是www.openlab.com/file等子目录网站
  • 第四步:建立http的file网站
[root@server ~]# vim  /etc/httpd/conf/httpd.conf 
<virtualhost  192.168.48.130>
        documentroot    /www/file
        alias  /file  /www/file   #给/www/file建立一个别名/file,当访问/file时,跳转到/www/file
        servername      'file'
        
        <directory  /www/file>
        	allowoverride  none
        	require  all  granted
		</directory>  
</virtualhost>


  • 第五步:建立https的ftp网站
[root@server ~]# openssl  genrsa  -aes128  2048 > /etc/pki/tls/private/ftp.key    # 设置私钥文件
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
[root@server ~]# openssl req -utf8 -new -key /etc/pki/tls/private/ftp.key -x509 -days 365 -out /etc/pki/tls/certs/ftp.crt   # 设置证书
Enter pass phrase for /etc/pki/tls/private/ftp.key:  # 输入私钥密码123456
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]:xi'an
Organization Name (eg, company) [Default Company Ltd]:openlab
Organizational Unit Name (eg, section) []:RHCE
Common Name (eg, your name or your server's hostname) []:server
Email Address []:andy@qq.com

#vim到/etc/httpd/conf/httpd.conf进行配置也可以,因为有include导入
[root@server ~]# vim  /etc/httpd/conf.d/ssl.conf 
# 定位第一行,输入以下内容:
<virtualhost 192.168.48.130:443>
        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        # 设置别名访问二级目录
        
        <directory  /www/ftp>
        	allowoverride  none
        	require all granted
		</directory>
</virtualhost>

  • 第六步:重启服务
[root@server ~]# systemctl  restart  httpd
🔐 Enter TLS private key passphrase for ftp:443 (RSA) : ******                # 输入私钥的密码123456
  • 第七步:测试
# 虚拟机中打开火狐浏览器,输入www.openlab.com/file
# 虚拟机中打开火狐浏览器,输入https://www.openlab.com/ftp,点击高级->接受风险并继续
d
		</directory>
</virtualhost>

  • 第六步:重启服务
[root@server ~]# systemctl  restart  httpd
🔐 Enter TLS private key passphrase for ftp:443 (RSA) : ******                # 输入私钥的密码123456
  • 第七步:测试
# 虚拟机中打开火狐浏览器,输入www.openlab.com/file
# 虚拟机中打开火狐浏览器,输入https://www.openlab.com/ftp,点击高级->接受风险并继续
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值