第四章 Web服务器(2)
root@server ~]# vim/etc/nginx/nginx.conf# 主配置文https段,默认为注释,可以取消注释。Common Name (e.g. server FQDN or YOUR name) []:server# 主机名。Common Name (e.g. server FQDN or YOUR name) []:server# 主机名。
基于https协议的静态网站
概念解释
-
超文本传输协议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传输层安全协议)
SSL协议分为两层:
-
SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能
-
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
SSL协议提供的服务:
-
认证用户和服务器,确保数据发送到正确的客户机和服务器
-
加密数据以防止数据中途被窃取
-
维护数据的完整性,确保数据在传输过程中不被改变
HTTPS安全通信机制
图:

分为三个阶段:
-
认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
-
协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
-
加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有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)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
使用nginx的http_ssl模块建立加密认证网站
查看
[root@server ~]# nginx -V # 看是否有--with-http_ssl_module模块,否则需要安装mod_ssl
配置文件:
-
证书文件:/……/xxxx.crt
-
私钥文件:/……/xxxx.key
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 {
# }
实验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 # 启动 [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, If you enter '.', the field will be left blank. ----- # 注意:下列证书信息项目,在面试时常问 Country Name (2 letter code) [AU]:86 # 国家代码 State or Province Name (full name) [Some-State]: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 []:andy@qq.com # 邮箱 # 在加载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
-
第五步:修改配置文件
[[root@server nginx]# cd ~
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 443 ssl http2;
server_name 192.168.48.130;
root /www/zy;
ssl_certificate /etc/nginx/zy.crt;
ssl_certificate_key /etc/nginx/zy.key;
}
server { # 输入http跳转到https
listen 80;
server_name 192.168.48.130;
return 301 https://192.168.48.130;
}
-
第六步:重启服务
[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 [root@server nginx]# systemctl start nginx
-
第七步:测试
# 在windows端打开浏览器,输入https://192.168.48.130,点击高级->接受风险并继续

实验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 nginx -y [root@server ~]# systemctl start nginx # 启动nginx [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
-
第三步:建立本地hosts域名映射
[root@server ~]# vim /etc/hosts # 添加如下内容 192.168.48.130 www.openlab.com
-
第四步:建立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;
}
}
-
第五步:建立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) [Some-State]: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 []:andy@qq.com # 邮箱
# 在加载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";
}
-
第六步:重启服务
[root@server ~]# systemctl restart nginx
-
第七步:测试
# 输入www.openlab.com/file # 输入https://www.openlab.com/ftp,点击高级->接受风险并继续
项目:使用LNMP搭建私有云存储
准备工作
恢复快照,关闭安全软件
[root@server ~]# setenforce 0 [root@server ~]# systemctl stop firewalld
搭建LNMP环境
[root@server ~]# yum install nginx mariadb-server php* -y
上传软件
-
使用xftp将nextcloud-25.0.1.zip软件压缩包上传到Linux的根目录,并解压缩
[root@server ~]# cd / [root@server /]# unzip /nextcloud-25.0.1.zip
设置nextcloud安装命令权限
[root@server /]# chmod -Rf 777 /nextcloud
设置数据库
[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 # 退出
重启数据库
[root@server /]# systemctl restart mariadb
配置nginx
[root@server /]# vim /etc/nginx/nginx.conf
server {
listen 80;
server_name 192.168.48.130;
root /nextcloud;
}
重启nginx服务
[root@server /]# systemctl start nginx
安装
-
打开浏览器后输入服务器IP地址,进入nextcloud安装向导
-
管理员的用户名即密码自定
-
存储与数据库:选择MySQL/MariaDB,设置数据库用户为nextcloud,密码:123456,数据库名:nextcloud,主机名:localhost
内网穿透
cpolar的域名信任
[root@server ~]# vim /nextcloud/config/config.php # 按照下面的内容对源文件进行修改 <?php $CONFIG = array ( 'instanceid' => 'ocvy7jm0iqom', 'passwordsalt' => 'jLg0GXwJtlj8vowMsLpN5MbBSRsoiC', 'secret' => 'ayTVaC6dsHrSKgXazVP6llFMWdNVxjF582v5pAPKuyEecdTU', 'trusted_domains' => array ( 0 => '192.168.48.130', 1 => '2dc0afad.r17.cpolar.top', # 需添加 ), 'datadirectory' => '/nextcloud/data', 'dbtype' => 'mysql', 'version' => '25.0.1.1', 'overwrite.cli.url' => 'http://192.168.48.130', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbport' => '', 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextcloud', 'dbpassword' => '123456', 'installed' => true, ); # 保存退出后重试

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)