Nginx配置HTTPS以及HTTPS原理

简介: Nginx配置HTTPS以及HTTPS原理

一、HTTPS概述


(1)HTTPS简介


现在越来越多的公司都从HTTP转到了HTTPS,主要是为了数据安全,防止敏感信息被第三方获取


HTTPS是由两个部分组成的分别为HTTP和SSL和TLS,也就是说HTTPS就是在HTTP的基础上加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS和SSL进行加密, 也就是说使用HTTPS传输的数据都是经过加密的。SSL是服务器的加密,TLS是客户端的加密


(2)HTTPS原理


2021053109391488.png


客户端通过HTTPS协议访问服务端的443端口


服务端在能够使用HTTPS的情况下,是有公钥和私钥的,公钥就是证书。服务器端向客户端进行回应,并且发送证书,也就是公钥


客户端在收到证书后,会向CA请求判断证书是否有效,如果无效,客户端就会提示警告信息,提示此证书不安全


证书有效的话,客户端就会生成一个随即值


客户端会用服务端发送来的证书向随即值进行加密然后发送给服务端


服务端收到后,会使用本地的私钥解开,从而获得客户端的随即值。在服务端发送数据时,会使用随即值对发送的数据进行加密也就是再生成一个相当于是公钥,而随即值就是私钥。


加密使用对称加密算法,就是将信息和私钥通过某种算法混合在一起,只有持有私钥(随即值)的主机才可以获取数据。


服务端向客户端发送被加密的数据


客户端收到数据使用随即值进行解密,从而成功成功传送数据


CA: 是一个颁发证书的机构


二、Nginx实现HTTPS网站设置


(1)实验环境


系统 主机名 ip地址 nginx版本
Centos7.4 rzy 192.168.100.202 nginx-1.18.0



(2)实验目的


客户端使用浏览器可以访问https


(3)实验步骤


注意:一般生成的目录,应该放在nginx/conf/ssl目录

使用的模块: --with-http_ssl_module

******(1)先进行基础配置
[root@Centos7 ~]# hostnamectl set-hostname rzy
[root@Centos7 ~]# su
[root@rzy ~]# systemctl stop firewalld
[root@rzy ~]# setenforce 0
setenforce: SELinux is disabled
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)上传Nginx源码包进行安装
[root@rzy ~]#  yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
。。。。。。
完毕!
[root@rzy ~]# useradd -M -s /sbin/nologin  nginx
[root@rzy ~]# rz
z waiting to receive.**B0100000023be50
[root@rzy ~]# tar xf nginx-1.18.0.tar.gz  -C /usr/src/
[root@rzy ~]# cd /usr/src/nginx-1.18.0/
[root@rzy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install
[root@rzy nginx-1.18.0]# cd 
[root@rzy ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@rzy ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@rzy ~]# systemctl start nginx 
[root@rzy ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3786/nginx: master  
******(3)创建服务器证书密钥文件
[root@rzy ~]# openssl genrsa -des3 -out server.key 1024    #生成密钥
Generating RSA private key, 1024 bit long modulus
................++++++
............................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: #输入密码
Verifying - Enter pass phrase for server.key:  #确认密码
[root@rzy ~]# openssl req -new -key server.key -out server.csr #生成证书认证文件
Enter pass phrase for server.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]:CN  #国家
State or Province Name (full name) []:beijing  #省
Locality Name (eg, city) [Default City]:beijing  #市
Organization Name (eg, company) [Default Company Ltd]:baidu #公司
Organizational Unit Name (eg, section) []:  #邮箱,可以不输入
Common Name (eg, your name or your server's hostname) []:www.aaa.com  #域名,这个域名必须和nginx使用的域名相同
Email Address []:  #不用写
Please enter the following 'extra' attributes 
to be sent with your certificate request
A challenge password []:  #不用写
An optional company name []:  #不用写
[root@rzy ~]# ll
总用量 1028
-rw-------. 1 root root    1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 1039530 4月  19 10:03 nginx-1.18.0.tar.gz
-rw-r--r--  1 root root     627 4月  26 23:21 server.csr
-rw-r--r--  1 root root     951 4月  26 23:21 server.key
[root@rzy ~]# cp server.key server.key.org  #复制一份密码
[root@rzy ~]# openssl rsa -in server.key.org -out server.key  #删除密码,更安全
Enter pass phrase for server.key.org:  #之前的密码
writing RSA key
[root@rzy ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成公钥也就是证书
Signature ok
subject=/C=CN/ST=beijing/L=beijing/O=baidu/CN=www.aaa.com
Getting Private key
******(4)修改配置文件
[root@rzy ~]# cd /usr/local/nginx/conf/
[root@rzy conf]# cp nginx.conf nginx.conf.bak
[root@rzy conf]# sed -i '/#/d' nginx.conf
[root@rzy conf]# sed -i '/^$/d' nginx.conf
[root@rzy conf]# vim nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       443 default ssl;
 12         ssl On;
 13         ssl_certificate ssl/server.crt;  #指定证书路径
 14         ssl_certificate_key ssl/server.key; #指定私钥路径
 15         server_name  www.aaa.com; #指定域名,要和证书认证文件的域名相同
 16         location / {
 17             root   html;
 18             index  index.html index.htm;
 19         }
 20         error_page   500 502 503 504  /50x.html;
 21         location = /50x.html {
 22             root   html;
 23         }
 24     }
 25 }
[root@rzy conf]# cd 
[root@rzy ~]# mkdir -p /usr/local/nginx/conf/ssl
[root@rzy ~]# cp server.crt server.key /usr/local/nginx/conf/ssl/
[root@rzy ~]# systemctl restart nginx #重启服务器
[root@rzy ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3844/nginx: master  

进行测试,可以成功访问


20210531094000437.png

三、扩展


有些公司要求把http转到https上面,只需要修改一下配置文件即可


******(1)使用状态码进行跳转
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen 80;
 12         listen       443 default ssl;
 13         ssl On;
 14         ssl_certificate ssl/server.crt;
 15         ssl_certificate_key ssl/server.key;
 16         server_name  www.aaa.com;
 17         error_page 497 https://$server_name$1;
 18         location / {
 19             root   html;
 20             index  index.html index.htm;
 21         }
 22         error_page   500 502 503 504  /50x.html;
 23         location = /50x.html {
 24             root   html;
 25         }
 26     }
 27 }
[root@rzy ~]# systemctl restart nginx

访问测试

20210531094023894.png


******(2)使用虚拟主机进行重定向
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       443 default ssl;
 12         ssl On;
 13         ssl_certificate ssl/server.crt;
 14         ssl_certificate_key ssl/server.key;
 15         server_name  www.aaa.com;
 16         location / {
 17             root   html;
 18             index  index.html index.htm;
 19         }
 20     }
 21     server {
 22         listen 80;
 23         server_name www.aaa.com;
 24         location / {
 25             rewrite ^(.*) https://$server_name$1 redirect;
 26         }
 27     }
 28 }
[root@rzy ~]# systemctl restart nginx

20210531094037112.png

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
1天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
14 0
|
1天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
9 0
|
4天前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
17 0
|
7天前
|
域名解析 缓存 负载均衡
Nginx正向代理域名的配置
Nginx正向代理域名的配置
|
7天前
|
前端开发 JavaScript 应用服务中间件
修改Jeecg-boot context-path(附加图片+Nginx配置)
修改Jeecg-boot context-path(附加图片+Nginx配置)
16 0
|
10天前
|
运维 Java 应用服务中间件
Tomcat详解(七)——Tomcat使用https配置实战
Tomcat详解(七)——Tomcat使用https配置实战
26 4
|
14天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
14天前
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
11 0
|
18天前
|
域名解析 网络协议 应用服务中间件
阿里云SSL证书配置(HTTPS证书配置)
该内容是一个关于如何在阿里云上准备和购买SSL证书,以及如何为网站启用HTTPS的步骤指南。首先,需要注册并实名认证阿里云账号,然后在SSL证书控制台选择证书类型、品牌和时长进行购买。申请证书时填写域名信息,并进行DNS验证,这包括在阿里云域名管理板块添加解析记录。完成验证后提交审核,等待证书审核通过并下载Nginx格式的证书文件。最后,将证书配置到网站服务器以启用HTTPS。整个过程涉及账户注册、实名认证、证书购买、DNS设置和证书下载及安装。
87 0
|
18天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
25 0