Nginx配置HTTPS以及HTTPS原理

本文涉及的产品
.cn 域名,1个 12个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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

目录
相关文章
|
16天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
23天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
214 0
|
4天前
|
安全 算法 网络安全
一张图就把HTTPS工作原理讲明白了!
【10月更文挑战第31天】
11 1
一张图就把HTTPS工作原理讲明白了!
|
9天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
2天前
|
安全 应用服务中间件 网络安全
49.3k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点
mkcert是一款由Filippo Valsorda开发的免费开源工具,专为生成受信任的本地SSL/TLS证书而设计。它通过简单的命令自动生成并安装本地信任的证书,使本地环境中的HTTPS配置变得轻松无比。mkcert支持多个操作系统,已获得49.2K的GitHub Star,成为开发者首选的本地SSL工具。
|
3天前
|
应用服务中间件 网络安全 PHP
八个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
Nginx 是一个高效的 HTTP 服务器和反向代理,擅长处理静态资源、负载均衡和网关代理等任务。其配置主要通过 `nginx.conf` 文件完成,但复杂设置可能导致错误。本文介绍了几个开源的 Nginx 可视化配置系统,如 Nginx UI、VeryNginx、OpenPanel、Ajenti、Schenkd nginx-ui、EasyEngine、CapRover 和 NGINX Agent,帮助简化和安全地管理 Nginx 实例。
|
4天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
13天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
33 7
|
22天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
24天前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
131 1