使用 Nginx 实现 HTTPS 网站设置

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
Digicert DV 证书 单域名,20个 3个月
简介: HTTPS 其实是有两部分组成:HTTP + SSL/TLS,也就是在 HTTP 的基础上又加了一层处理加密信息的模块。服务端和客户端的信息传递都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

使用 Nginx 实现 HTTPS 网站设置



一、HTTPS 简介


二、Nginx 实现 HTTPS 网站设置


1.安装 Nginx

2.创建服务器证书密钥文件

3.创建服务器证书的申请文件

4.生成证书文件

5.修改 Nginx 主配置文件


前言:


首先在这里简单说一下为什么现在都在使用 HTTPS 协议:


其实使用 HTTPS 协议最大的原因就是因为 HTTP 协议不安全,因为 HTTP 数据传输时是:明文传输数据 也就是说当客户端在输入用户名和密码时,都会显示出来。而 HTTPS 协议的话则是 密文传输数据 就是在传输数据时会进行加密。


HTTPS 解决数据传输安全问题的方案:就是使用加密算法,具体来说就是混合加密算法,也就是对称加密算法和非对称加密算法的混合使用。


加密算法:


  • 对称加密:加密和解密都是使用同一密钥(常见的加密算法为 DES、3DES 和 AES 等)
  • 非对称加密:加密和解密需要使用两个不同的密钥,公钥和私钥(常见的加密算法为 RSA)


一、HTTPS 简介



HTTPS 其实是有两部分组成:HTTP + SSL/TLS,也就是在 HTTP 的基础上又加了一层处理加密信息的模块。服务端和客户端的信息传递都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。


HTTPS 协议原理:


image.png


  1. 客户端通过 HTTPS 协议来请求服务端的 443 端口;
  2. 接着服务端向客户端进行回应,并且发送证书,也就是公钥;
  3. 客户端在收到证书后,便会向 CA 发送请求,来判断证书是否有效;
  4. 如果无效,那么客户端就会提示警告信息,提示此证书不安全;证书有效的话,客户端就会生成一个随机值;
  5. 接着客户端会使用服务端发送过来的证书向随机值进行加密并发送给服务端;
  6. 服务端收到后,会使用本地的私钥进行解开,从而得到客户端的随机值;
  7. 当服务端再发送数据时,会使用随机值对发送的数据进行加密;相当于说再生成一个公钥,而随机值就是私钥;
  8. 最后当客户端收到服务端发送过来的数据后会使用随机值进行解密,从而成功传输数据。


二、Nginx 实现 HTTPS 网站设置



1.安装 Nginx


[root@Nginx ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@Nginx ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz
[root@Nginx ~]# ls
anaconda-ks.cfg  nginx-1.18.0.tar.gz
[root@Nginx ~]# tar zxf nginx-1.18.0.tar.gz -C /usr/src/
[root@Nginx ~]# cd /usr/src/nginx-1.18.0/
[root@Nginx nginx-1.18.0]# useradd -M -s /sbin/nologin nginx
[root@Nginx 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@Nginx nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@Nginx nginx-1.18.0]# cd
[root@Nginx ~]# nginx
[root@Nginx ~]# netstat -anpt | grep 80


2.创建服务器证书密钥文件


[root@Nginx ~]# openssl genrsa -des3 -out server.key 1024
...
Enter pass phrase for server.key:                       # 输入密码
Verifying - Enter pass phrase for server.key:                 # 确认密码


3.创建服务器证书的申请文件


[root@Nginx ~]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:                       # 输入前面创建的密码
...
Country Name (2 letter code) [XX]:CN                      # 国家代号. 中国输入 CN
State or Province Name (full name) []:BeiJing                 # 省的全名. 拼音
Locality Name (eg, city) [Default City]:BeiJing                 # 市的全名. 拼音
Organization Name (eg, company) [Default Company Ltd]:Coco            # 公司英文名
Organizational Unit Name (eg, section) []:                    # 可以不输入
Common Name (eg, your name or your server's hostname) []:www.Coco.com     # 域名
Email Address []:ChenZhuang1217@163.com                     # 电子邮箱. 可随意填
...
A challenge password []:                            # 可以不输入
An optional company name []:                          # 可以不输入


备份一份服务器密钥文件


[root@Nginx ~]# cp server.key server.key.org


去除文件口令


[root@Nginx ~]# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:                     # 输入密码


4.生成证书文件


[root@Nginx ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=Coco/CN=www.Coco.com/emailAddress=ChenZhuang1217@163.com
Getting Private key


5.修改 Nginx 主配置文件


[root@Nginx ~]# mkdir -p /usr/local/nginx/conf/ssl
[root@Nginx ~]# cp server.crt server.key /usr/local/nginx/conf/ssl/
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
    listen 443;                             # 监听端口
    ssl on;                               # 开启 SSL
    ssl_certificate ssl/server.crt;                   # PS:我这里是相对路径. 你们可以使用绝对路径
    ssl_certificate_key ssl/server.key;                 # 系统会在 /usr/local/nginx/conf/ 目录中寻找
    server_name  www.Coco.com;                      # 证书对应的域名
    ...
}
[root@Nginx ~]# nginx -s reload                     # 重启 Nginx 服务


  • nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl":因为版本高于 1.15 不过可以正常启动。


验证:访问刚才设置的域名 https://www.Coco.com/


image.png


实现客户端访问 http 往 https 跳转:


这里说一下为什么要往配置文件里面再添加一个server,因为 http 协议使用的是 80 端口,而 https 协议使用的则是 443 端口


那么如果想要实现 http 跳转到 https,则需要配置两个虚拟主机(基于不同端口),然后使用 rewrite 来进行跳转。


错误配置:


  • 在同一个 server 中开启多个端口,逻辑上来说其实并没有什么问题,但是当配置 rewrite 时,那么问题就出现了。
  • 问题:当客户端访问 http 是会进行跳转,但是访问 https 也会跳转,这就导致了重定向次数过多。


server {
    listen 80;
    listen 443;
    server_name www.Coco.com;
    root html;
    index index.html index.htm;
    rewrite ^(.*)$ https://$host$1 permanent;
}


image.png


正确配置:


将 80 端口和 443 端口区分开,简单来说就是配置基于不同端口的虚拟主机。


这样即可实现访问 80 端口进行跳转,而访问 443 端口,则直接进行访问。


[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
    listen 80;
    server_name  www.Coco.com;
    rewrite ^(.*)$ https://$host$1 permanent;
    ...
}
server {
    listen 443;
    ssl on;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.key;
    server_name  www.Coco.com;
    ...
}
[root@localhost ~]# nginx -s reload


验证:访问 http://www.Coco.com


image.png

相关文章
|
8天前
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
20天前
|
安全 应用服务中间件 网络安全
检查一个网站是否启用了HTTPS
检查一个网站是否启用了HTTPS
103 5
|
19天前
|
存储 安全 搜索推荐
https网站
https网站
44 1
|
28天前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
51 2
|
2月前
|
缓存 负载均衡 应用服务中间件
Nginx 代理管理器强势登场!轻松设置反向代理,为你的网络安全与高效护航,快来探索!
【8月更文挑战第23天】Nginx 代理管理器(NPM)是一款强大的工具,用于简化反向代理的设置流程。反向代理能隐藏后端服务器的真实IP,提升安全性,实现负载均衡与缓存等功能。用户需先安装Nginx 代理管理器,然后通过其Web界面添加代理主机,指定代理名称、协议类型、服务器地址及端口等信息。对于HTTPS协议,还需上传SSL证书/密钥。完成设置后,可通过浏览器测试反向代理是否正常工作。Nginx 代理管理器还支持高级特性,如负载均衡、缓存及访问控制等。
65 1
|
3月前
|
负载均衡 应用服务中间件 网络安全
|
2月前
|
应用服务中间件 Linux nginx
【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理
【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理
|
2月前
|
Ubuntu 应用服务中间件 Linux
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
15 0
|
2月前
|
网络安全 Apache Windows
网站⭐Windows下,将xampp升级为https
网站⭐Windows下,将xampp升级为https
|
2月前
|
缓存 算法 应用服务中间件
nginx搭建https服务器
nginx搭建https服务器
下一篇
无影云桌面