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协议的发展

SSL(安全套接层)最初在1994年创建,作为http的扩展,后来逐步发展为独立协议,并更新了三个版本(v1.0、v2.0、v3.0),后来在v3.0基础上标准化了该协议,并命名为TLS(传输层安全协议v1.0)。因此,TLS可以理解为SSL协议的升级版。
(4) CA机构颁发证书过程
在数据进行加密与解密过程中,如何确认双方身份?此时就需要有一个权威机构来验证双方身份。那么这个权威机构就是
CA机构
。以下是CA机构颁发证书的过程。我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过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) 证书的类别

(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实战

(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