文章目录
- 一、基于https协议的静态网站
- 1.概念解释
- 2. SSL协议提供的服务:
- 3.web服务的配置详解
- web服务的常用种类
- nginx的基本配置参数
- 4.使用nginx的http_ssl模块建立加密认证网站
- 查看
- 配置文件:
- ssl配置文件的主要参数
- 实验一:搭建nginx+ssl的加密认证web服务器
- 代码解释:
- 实验二:组建多个子目录网站www.openlab.com
一、基于https协议的静态网站
1.概念解释
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”的缩写,中文叫做“安全套接层”
2. SSL协议提供的服务:
**
-
认证用户和服务器,确保数据发送到正确的客户机和服务器
-
加密数据以防止数据中途被窃取
-
维护数据的完整性,确保数据在传输过程中不被改变
注:关于https的安全通信机制,我会专门出一篇博文来介绍,这里不做过多赘述
3.web服务的配置详解
web服务的常用种类
Apache
Nginx
openresty
大厂自研
nginx的基本配置参数
nginx全局配置
http {
include /etc/nginx/mime.types; #可解析的静态资源类型
default_type application/octet-stream; #用来配置Nginx响应前端请求默认的MIME类
型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #访问日志
sendfile on; # Nginx服务器是否使用sendfile()传输文件
#tcp_nopush on; # 当包累计到一定大小后就发送,默认0.2s一次
keepalive_timeout 65; # 长连接超时时间
子配置文件
3.5.Nginx配置
3.5.1.nginx虚拟主机
默认情况下nginx只能发布一个站点
如果要发布多个站点需要搭建多台nginx来满足,如果这样会浪费太多资源
为解决上述问题,启用nginx的虚拟主机即可
虚拟主机有两种模式,基于IP或者基于域名
3.5.2基于IP的虚拟主机
#gzip on; #可以使网站的css、js 、xml、html 等静态资源在传输时
进行压缩
include /etc/nginx/conf.d/*.conf; #指定子配置文件
}
子配置文件
/etc/nginx/conf.d/default.conf
server {
listen 80; #监听端口
server_name localhost; #服务器的名字
location / {
root /usr/share/nginx/html; #默认发布目录
index index.html index.htm; #默认发布文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #访问出错呈现错误页面
location = /50x.html {
root /usr/share/nginx/html;
}
}
4.使用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 {
# }
实验一:搭建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,
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 172.25.254.101;
root /www/zy;
ssl_certificate /etc/nginx/zy.crt;
ssl_certificate_key /etc/nginx/zy.key;
}
server { # 输入http跳转到https
listen 80;
server_name 172.25.254.101;
return 301 https://172.25.254.101;
}
第六步:重启服务
[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://172.25.254.101,点击高级->接受风险并继续
代码解释:
openssl genrsa -aes128 2048 > /etc/nginx/zy.key
这条命令 openssl genrsa -aes128 2048 > /etc/nginx/zy.key 是用来生成一个带有AES-128加密的2048位RSA私钥,并将结果输出到 /etc/nginx/zy.key 文件中。
具体来说:
openssl genrsa: 这是 OpenSSL 命令,用于生成RSA私钥。
-aes128: 这个选项指定生成的私钥使用AES-128位加密。
2048: 这个参数指定生成的RSA密钥长度为2048位。
/etc/nginx/zy.key: 这部分将生成的私钥输出到 /etc/nginx/zy.key 文件中。
生成的私钥文件 /etc/nginx/zy.key 将会被用作Nginx配置中的 ssl_certificate_key 指令所指定的SSL证书私钥文件。这对于建立安全的HTTPS连接至关重要,确保通信的保密性和完整性。
server {
listen 443 ssl http2; # 服务器监听在443端口上,使用SSL加密和HTTP/2协议
server_name 192.168.48.130; # 服务器名设置为IP地址192.168.48.130
root /www/zy; # 网站的根目录设置为/www/zy
ssl_certificate /etc/nginx/zy.crt; # SSL证书文件路径设置为/etc/nginx/zy.crt
ssl_certificate_key /etc/nginx/zy.key; # SSL证书私钥文件路径设置为/etc/nginx/zy.key
}
实验二:组建多个子目录网站www.openlab.com
组建多个子目录网站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,点击高级->接受风险并继续