6.Web服务器(2)

目录

1. 基于https协议的静态网站

1.1. 概念解释

1.1.1. SSL协议分为两层:

1.1.2. SSL协议提供的服务:

1.2. HTTPS安全通信机制

1.2.1. 图:

1.2.2. 过程:

1.3. 使用nginx的http_ssl模块建立加密认证网站

1.3.1. 查看

1.3.2. 配置文件:

1.3.3. ssl配置文件的主要参数

1.3.4. 实验1

1.3.5. 实验2

2. 项目:使用LNMP搭建私有云存储

2.1. 准备工作

2.1.1. 恢复快照,关闭安全软件

2.1.2. 搭建LNMP环境

2.1.3. 上传软件

2.1.4. 设置nextcloud安装命令权限

2.1.5. 设置数据库

2.1.6. 重启数据库

2.1.7. 配置nginx

2.1.8. 重启httpd服务

2.1.9. 安装

2.1.10. 内网穿透

2.1.11. 花生壳的域名信任


1. 基于https协议的静态网站

1.1. 概念解释

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。

HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了 解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。

HTTPS(全称:Hyper Text Transfer Protocol overSecure Socket Layer 或 Hypertext TransferProtocolSecure,超文本传输安全协议),是以安全为目标的HTTP通道。

HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间

6.Web服务器(2)_第1张图片

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协议提供的服务:

认证用户和服务器,确保数据发送到正确的客户机和服务器

加密数据以防止数据中途被窃取

维护数据的完整性,确保数据在传输过程中不被改变

1.2. HTTPS安全通信机制

1.2.1. 图:

6.Web服务器(2)_第2张图片

1.2.2. 过程:

(1)客户端(通常是浏览器)向服务端发送加密通信的请求,然后连接到服务端的443端口,这被叫做ClientHello请求,客户端主要向服务器提供以下信息

1.支持的协议版本,比如TLS 1.0版。

2.一个客户端生成的随机数1,稍后用于生成"会话密钥"。

3.支持的加密方法,比如RSA公钥加密。

4.支持的压缩方法。

(2)服务端回应(SeverHello),接收到信息之后给予客户端响应握手信息,服务器的回应包含以下内容:

1.确认使用的加密通信协议版本,比如TLS 1.0版本,。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

2.一个服务器生成的随机数2,稍后用于生成"会话密钥"。

3.确认使用的加密方法,这个加密算法一定是client发送给server加密算法的子集,比如RSA公钥加密服务器证书:可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,传送的证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名等

4.除此之外,如果服务器需要使用双向认证,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供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通用的证书格式包含三个文件:keycsrcrt

key是私钥文件

csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名

crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

1.3. 使用nginx的http_ssl模块建立加密认证网站

1.3.1. 查看

[root@server ~]# nginx -V
# 看是否有--with-http_ssl_module模块,否则需要装mod_ssl

6.Web服务器(2)_第3张图片

1.3.2. 配置文件:

证书文件:/……/xxxx.crt

私钥文件:/……/xxxx.key

1.3.3. ssl配置文件的主要参数

[root@server ~]# vim /etc/nginx/nginx.conf
# 主配置文https段,默认为注释,可以取消注释
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2; # 监
听443端口
# listen [::]:443 ssl http2;
# server_name _; #域名
# root /usr/share/nginx/html;
# 网页默认
#
# ssl_certificate
"/etc/pki/nginx/server.crt"; # 证书路径
# ssl_certificate_key
"/etc/pki/nginx/private/server.key"; # 私钥
文件路径
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the
default server block.
# include
/etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504
/50x.html;
# location = /50x.html {
# }

6.Web服务器(2)_第4张图片

1.3.4. 实验1

搭建nginx+ssl的加密认证web服务器

第一步:准备工作

# 恢复快照
[root@server ~]# setenforce 0

[root@server ~]# systemctl stop firewalld

[root@server ~]# systemctl disable  firewalld

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

[root@server ~]# systemctl start nginx #启动httpd

[root@server ~]# systemctl enable nginx #设置开机启动

第二步:新建存储网站数据文件的目录

[root@server ~]# mkdir -p /www/zy
# 私用xftp将windows的zy网站数据文件上传到/www/zy目录中

第三步:制作证书

# 在/etc/nginx目录下制作整数所用的私钥文件zy.key
[root@server ~]# openssl genrsa -aes128 2048 > /etc/nginx/zy.key
Generating RSA private key, 2048 bit long
modulus (2 primes)
............+++++
............................................
............................................
............................................
............................................
......................+++++
e is 65537 (0x010001)
Enter pass phrase: # 输入加密私钥的密码123456
Verifying - Enter pass phrase: # 再输一遍

# 制作证书
[root@server ~]# openssl req -utf8 -new -key /etc/nginx/zy.key -x509 -days 365 -out /etc/nginx/zy.crt
Enter pass phrase for /etc/nginx/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,
18 If you enter '.', the field will be left
blank.
-----
# 注意:下列证书信息项目,在面试时常问
Country Name (2 letter code) [AU]:86   # 国家代码
State or Province Name (full name) [SomeState]:shanxi  # 省份
Locality Name (eg, city) []:xi'an      # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab     # 公司
Organizational Unit Name (eg, section)[]:RHCE # 部门
Common Name (e.g. server FQDN or YOUR name)[]:server  # 主机名
Email Address []:[email protected]      # 邮箱

# 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
[root@server ~]# cd /etc/nginx
[root@server nginx]# cp zy.key zy.key.org
[root@server nginx]# openssl rsa -in zy.key.org -out zy.key   
Enter pass phrase for zy.key.org:      # 输入加密私钥的密码
writing RSA key

6.Web服务器(2)_第5张图片

6.Web服务器(2)_第6张图片

6.Web服务器(2)_第7张图片

第五步:修改配置文件

[root@server nginx]# cd ~
[root@server ~]# vim /etc/nginx/nginx.conf

6.Web服务器(2)_第8张图片

第六步:重启服务

[root@server nginx]# cd ~
[root@server ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx: the configuration file
/etc/nginx/nginx.conf syntax is ok
nginx: configuration file
/etc/nginx/nginx.conf test is successful
[root@server nginx]# systemctl start nginx

第七步:测试

# 在windows端打开浏览器,输入https://192.168.223.129,点击高级->接受风险并继续

6.Web服务器(2)_第9张图片

1.3.5. 实验2

组建多个子目录网站www.openlab.com,该网站有2个子目录www.openlab.com/file和www.openlab.com/ftp,

要求:

(1)file数据使用http读取

(2)ftp数据使用https读取

第一步:准备工作

# 恢复快照
[root@server ~]# setenforce 0

[root@server ~]# systemctl stop firewalld

[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y

[root@server ~]# systemctl start nginx #启动httpd

[root@server ~]# systemctl enable nginx #设置开机启动

第二步:新建网页目录并建立网页

[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

6.Web服务器(2)_第10张图片

第三步:建立本地hosts域名映射

[root@server ~]# vim /etc/hosts # 添加如下内容
192.168.223.129   www.openlab.com

6.Web服务器(2)_第11张图片

第四步:建立file网站

[root@server ~]# vim /etc/nginx/nginx.conf
server {
		listen 80;
		server_name www.openlab.com;
		location /file {
						alias
							/www/file/;
						index
							index.html index.htm;
						}
		}

6.Web服务器(2)_第12张图片

第五步:建立https的ftp网站

# 制作私钥
[root@server ~]# openssl genrsa -aes128 2048 > /etc/nginx/ftp.key
Generating RSA private key, 2048 bit long
modulus (2 primes)
............+++++
............................................
............................................
............................................
............................................
......................+++++
e is 65537 (0x010001)
Enter pass phrase: # 输入加密私钥的密码123456 
Verifying - Enter pass phrase: # 再输一遍

# 制作证书
[root@server ~]# openssl req -utf8 -new -key /etc/nginx/ftp.key -x509 -days 365 -out /etc/nginx/ftp.crt
Enter pass phrase for /etc/nginx/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) [AU]:86
# 国家代码
State or Province Name (full name) [SomeState]:shanxi # 省份
Locality Name (eg, city) []:xi'an
# 城市
Organization Name (eg, company) [Internet
Widgits Pty Ltd]:openlab# 公司
Organizational Unit Name (eg, section)
[]:RHCE # 部门
Common Name (e.g. server FQDN or YOUR name)
[]:server # 主机名
Email Address []:[email protected]
# 邮箱

# 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
[root@server ~]# cd /etc/nginx
[root@server nginx]# cp ftp.key ftp.key.org
[root@server nginx]# openssl rsa -in ftp.key.org -out ftp.key
Enter pass phrase for ftp.key.org: # 输入加密私钥的密码
writing RSA key

[root@server ~]# vim /etc/nginx/nginx.conf  # 编辑配置文件
server {
listen 443 ssl http2;
server_name www.openlab.com;
location /ftp {
alias /www/ftp;
index index.html index.htm;
 }
ssl_certificate
"/etc/nginx/ftp.crt";
ssl_certificate_key
"/etc/nginx/ftp.key";
}

6.Web服务器(2)_第13张图片

第六步:重启服务

[root@server ~]# systemctl restart nginx

第七步:测试

# 输入www.openlab.com/file
# 输入https://www.openlab.com/ftp,点击高级->接受风险并继续

6.Web服务器(2)_第14张图片

2. 项目:使用LNMP搭建私有云存储

2.1. 准备工作

2.1.1. 恢复快照,关闭安全软件

[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld

2.1.2. 搭建LNMP环境

[root@server ~]# yum install nginx mariadb-server php* -y

2.1.3. 上传软件

使用xftp将nextcloud-25.0.1.zip软件压缩包上传到Linux

的根目录,并解压缩

[root@server ~]# cd /
[root@server /]# unzip /nextcloud-25.0.1.zip

2.1.4. 设置nextcloud安装命令权限

[root@server /]# chmod -Rf 777 /nextcloud

6.Web服务器(2)_第15张图片

2.1.5. 设置数据库

[root@server /]# systemctl start mariadb # 启动数据库
[root@server /]# mysql  # 数据库设置
MariaDB [(none)]> create database nextcloud; # 创建数据库
MariaDB [(none)]> create user 'nextcloud'@'localhost' identified by '123456'; # 创建用户及密码
MariaDB [(none)]> grant all on nextcloud.*  to  'nextcloud'@'localhost'; # 设置权限
MariaDB [(none)]> exit # 退出

6.Web服务器(2)_第16张图片

2.1.6. 重启数据库

[root@server /]# systemctl restart mariadb

2.1.7. 配置nginx

[root@server /]# vim /etc/nginx/nginx.conf
server {
listen 80;
server_name 192.168.48.130;
root /nextcloud;
}

6.Web服务器(2)_第17张图片

2.1.8. 重启httpd服务

[root@server /]# systemctl start nginx

2.1.9. 安装

打开浏览器后输入服务器IP地址,进入nextcloud安装向导

管理员的用户名即密码自定

存储与数据库:选择MySQL/MariaDB,设置数据库用户

为nextcloud,密码:123456,数据库名:nextcloud,

主机名:localhost

6.Web服务器(2)_第18张图片

点击安装

6.Web服务器(2)_第19张图片

2.1.10. 内网穿透

2.1.11. 花生壳的域名信任

6.Web服务器(2)_第20张图片

[root@server ~]# vim /nextcloud/config/config.php
# 按照下面的内容对源文件进行修改
 'ocif3g9giiwc',
'passwordsalt' =>
'nzXf5wrB2QmOcw35btycuIbEGQ8DAq',
'secret' =>
'D0EUghErW/BBmULBe/OwC1Ui+r9I+SsGLaRu8IpGNSp
oEe1b',
'trusted_domains' =>
array (
0 => '192.168.48.130',
1 => '40a09234i8.imdo.co', # 添加花生壳给的域名,不要https或www等前缀
 ),
'datadirectory' => '/nextcloud/data',
'dbtype' => 'mysql',
'version' => '25.0.1.1',
'overwrite.cli.url' =>'https://40a09234i8.imdo.co:443', # 修改为花生壳给的域名,前面要有https,后面要有端口号
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => '123456',
'installed' => true,
'overwritehost' =>'40a09234i8.imdo.co:443', # 添加,域名更换为花生壳给的域名
'overwriteprotocol' => 'https', # 添加
 );

6.Web服务器(2)_第21张图片

6.Web服务器(2)_第22张图片

你可能感兴趣的:(RHCE,运维)