12-Nginx_HTTPS

1、HTTPS安全证书基本概述

(1) 为什么要使用HTTPS?

    因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中的加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。

(2) HTTPS概述

    HTTPS是HTTP+SSL协议,所以在实现https时,需要了解SSL协议,但我们现在使用更多的是TLS加密协议。
    那么TLS是怎么保护明文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,我们的表示层,是SSL协议所发挥作用的一层,它通过(握手、交换密钥、告警、加密)等方式,使应用层http协议没有感知的情况下做到了数据的安全加密。


HTTP默认端口:80 HTTPS默认端口:443
http通信风险:

  • 冒充风险:冒充他人身份参与通信
  • 窃听风险:通信内容被获取
  • 篡改风险:通信内容被修改
(3) TLS/SSL协议的发展
12-Nginx_HTTPS

    SSL(安全套接层)最初在1994年创建,作为http的扩展,后来逐步发展为独立协议,并更新了三个版本(v1.0、v2.0、v3.0),后来在v3.0基础上标准化了该协议,并命名为TLS(传输层安全协议v1.0)。因此,TLS可以理解为SSL协议的升级版。

(4) CA机构颁发证书过程

    在数据进行加密与解密过程中,如何确认双方身份?此时就需要有一个权威机构来验证双方身份。那么这个权威机构就是CA机构。以下是CA机构颁发证书的过程。
12-Nginx_HTTPS    我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过CSR(证书签名申请)发给CA,CA中心通过后,CA中心会生成一对公钥和私钥,那么公钥会在CA证书链中保存,公钥和私钥证书订阅人拿到后,会将其部署在WEB服务器上。

  • 1.当浏览器访问我们的https站点时,它会去请求我们的证书
  • 2.Nginx这样的web服务器会将我们的公钥证书发给浏览器
  • 3.浏览器会去验证我们的证书是否是合法和有效的。
  • 4.CA机构会将过期的证书放置在CRL服务器,那么CRL服务的验证效率是非常差的,所以CA又推出了OCSP响应程序,〇CSP响应程序可以查询指定的一个证书是否过期,所以浏览器可以直接查询OCSP响应程序,但OCSP响应程序性能还不是很高。
  • 5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取,证书是否有效。
(5) 证书的类别
12-Nginx_HTTPS
(6)HTTPS证书购买选择
  • 保护1个域名   www.zxc.com
  • 多个5个域名  www images cdn test csdn
  • 通配符域名 *.zxc.com
(6)HTTPS注意事项
  • HTTPS不支持续费,证书到期需重新申请并进行替换
  • HTTPS不支持三级域名解析,如test.m.oldboy.com
  • HTTPS显示绿色,说明整个网站的URL都是HTTPS的
  • HTTPS显示黄色,因为网站代码中包含HTTP的不安全连接。
  • HTTPS显示红色,要么证书是假的,要么证书过期。

2、Nginx单台实现HTTPS实战

(1) 环境准备
#nginx必须有ssl模块
[root@Nginx-5 ~]# nginx -V
 --with-http_ssl_module
 
#创建存放ssl证书的路径
[root@Nginx-5 ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx-5 ~]# cd /etc/nginx/ssl_key
(2) 使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
[root@Nginx-5 ssl_key]# openssl genrsa -IDEA -out server.key 2048
Generating RSA private key, 2048 bit long modulus
............+++
#记住配置密码,我这里是1234
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
(3)  生成自签证书,同时去掉私钥的密码
[root@Nginx-5 ssl_key]# openssl req -days 36500 -x509 
> -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ShangHai
Locality Name (eg, city) [Default City]:ShangHai
Organization Name (eg, company) [Default Company Ltd]:zxc
Organizational Unit Name (eg, section) []:zuoxc
Common Name (eg, your name or your server's hostname) []:www.zxc.com
Email Address []:123@qq.com


#req  -->用于创建新的证书
#new  -->表示创建新的是证书
#x509  -->表示定义证书的格式为标准格式
#key  -->表示调用的私钥文件信息
#out  -->表示输出证书文件信息
#days  -->表示证书的有效期
(4)  证书申请完成后需要了解Nginx如何配置HTTPS
#启用SSL功能
Syntax:  ssl on|off;
Default: -
Context: http,server

#证书文件
Syntax:  ssl_certificate file;
Default: -
Context: http,server

#私钥文件
Syntax:  ssl_certificate_key file;
Default: -
Context: http,server
(5)  配置Nginx-HTTPS实例
[root@Nginx-5 ~]# cat /etc/nginx/conf.d/ssl.zxc.com.conf
server {
 listen 443;
 server_name ssl.zxc.com;
 ssl on;
 ssl_certificate ssl_key/server.crt;
 ssl_certificate_key ssl_key/server.key;
 location / {
  root /code;
  index index.html;
 }
}
#如果希望http的流量全部导入到https上
server {
        listen 80;
        server_name ssl.zxc.com;
        return 302 https://$server_name$request_uri;
}

#准备对应的站点目录,并重启Nginx服务
[root@Nginx-5 ~]# mkdir -p /code
[root@Nginx-5 ~]# echo "HTTPS" > /code/index.html
[root@Nginx-5 ~]# systenmctl restart nginx

3、Nginx全站实现HTTPS实战

12-Nginx_HTTPS
(1) 环境准备
     主机名     应用环境    IP地址        角色
    Nginx-5     Nginx+PHP   192.168.2.5  Web01
    Nginx-6     Nginx+PHP   192.168.2.6  Web02
  7-Proxy1-8      Nginx     192.168.2.8  Proxy
(2) 配置Web01
[root@Nginx-5 ~]# cat /etc/nginx/conf.d/ssl.zxc.com.conf
server {
 listen 80;
 server_name ssl.zxc.com;
 ssl on;
 ssl_certificate ssl_key/server.crt;
 ssl_certificate_key ssl_key/server.key;
 location / {
  root /code;
  index index.html;
 }
}
#准备对应的站点目录,并重启Nginx服务
[root@Nginx-5 ~]# mkdir -p /code
[root@Nginx-5 ~]# echo "Web01-HTTPS" > /code/index.html
[root@Nginx-5 ~]# systemctl restart nginx
(3) 配置Web02
[root@Nginx-6 ~]# cat /etc/nginx/conf.d/ssl.zxc.com.conf
server {
 listen 80;
 server_name ssl.zxc.com;
 ssl on;
 ssl_certificate ssl_key/server.crt;
 ssl_certificate_key ssl_key/server.key;
 location / {
  root /code;
  index index.html;
 }
}
#准备对应的站点目录,并重启Nginx服务
[root@Nginx-6 ~]# mkdir -p /code
[root@Nginx-6 ~]# echo "Web02-HTTPS" > /code/index.html
[root@Nginx-6 ~]# systemctl restart nginx
(3) 配置Proxy
upstream website {
        server 192.168.2.5:80;
        server 192.168.2.6:80;
}

server {
        listen 443;
        server_name ssl.zxc.com;
        ssl on;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
                proxy_pass http://website;
                proxy_set_header Host $http_host;
                }
}

server {
        listen 80;
        server_name ssl.zxc.com;
        return 302 https://$server_name$request_uri;
}
#直接访问ssl.zxc.com 快速刷新会出现Web01-HTTPS和Web02-HTTPS。

3、解决实现HTTPS后其他项目出现的问题

(1) 解决wordpress开启HTTPS后 会出现破图,不显示样式。
#1. 配置web01
[root@Nginx-5 conf.d]# cat wordpress.zxc.com.conf
 server {
        listen 80;
        server_name wordpress.zxc.com;
        root /code/wordpress;
        client_max_body_size 100m;
        location / {
                index index.php index.html;
        }

        location ~ .php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param HTTPS on;   #开启HTTPS,这样之后就不会出现问题。
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}
# web02配置一样


#2. 配置Proxy
upstream node1 {
        server 192.168.2.5:80;
        server 192.168.2.6:80;
}
server {
        listen 443;
        server_name wordpress.zxc.com;
        ssl on;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;

        location / {
                proxy_pass http://node1;
                include proxy_params;
        }
}

server {
        listen 80;
        server_name wordpress.zxc.com;
        return 302 https://$server_name$request_uri;
}
(2) 其他项目同理 加上fastcgi_param HTTPS on;即可。

原文始发于微信公众号(运维库):12-Nginx_HTTPS

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/64279.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!