第一节:HTTPS基础知识
- https含义:是以安全为目标的HTTP通道,简单讲是HTTP的安全版
- http端口:80 https端口:443
- 作用:用于加密用户与网站之间的数据传输
- HTTPS和HTTP的区别主要为以下四点:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
域名证书类型 | 域名 |
---|---|
单域名证书 | www.mysun.com |
多域名证书 | www.mysun.com ,www.myqu.com |
通配符域名 | *.mysun.com |
工作中选择域名过程:
1.先收集好所有的域名
2.过滤分析一共有几种类型的域名
*.www.mysun.com
*.mysun.com
[root@lb01 ~]# sed -nr 's#^([a-Z0-9]+).(.*$)#\2#gp' name.txt |sort|uniq -c|sort
2 www.mysun.com
3 mysun.com
第二节: 简单nginx配置https
1.检查Nginx是否有SSL模块
nginx -V 进行查看是否有:
--with-http_ssl_module
2.创建证书目录并生成证书
mkdir /etc/nginx/ssl_key
cd /etc/nginx/ssl_key
openssl genrsa -idea -out server.key 2048
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
3.创建nginx配置文件
[root@web01 /etc/nginx/conf.d]# cat ssl.conf
server {
listen 443 ssl;
server_name ssl.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /code;
index index.html;
}
}
4.重启nginx
nginx -t
systemctl restart nginx
5.写入测试文件
echo "web01 SSL" > /code/index.html
第三节: 强制http跳转到https
1.配置nginx配置文件
[root@web01 /etc/nginx/conf.d]# cat ssl.conf
server {
listen 80;
server_name ssl.oldboy.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name ssl.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /code;
index index.html;
}
}
第四节:Nginx集群配置https
1.复制已经创建好的证书到其他的web服务器
cd /etc/nginx/
scp -r ssl_key 10.0.0.8:/etc/nginx/
scp -r conf.d/ssl.conf 10.0.0.8:/etc/nginx/conf.d/
echo "$(hostname) SSL" > /code/index.html
2.复制已经创建好的证书到lb服务器
cd /etc/nginx/
scp -r ssl_key 10.0.0.5:/etc/nginx/
3.第一种情况:lb服务器http强制跳转https并代理到后端的https
lb服务器配置:
[root@lb01 /etc/nginx/conf.d]# cat ssl.conf
upstream ssl_pools {
server 172.16.1.7:443;
server 172.16.1.8:443;
}
server {
listen 80;
server_name ssl.oldboy.com ;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name ssl.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass https://ssl_pools;
include proxy_params;
}
}
web服务器配置:
[root@web02 /etc/nginx/conf.d]# cat ssl.conf
server {
listen 443 ssl;
server_name ssl.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /code;
index index.html;
}
}
4.第二种情况:lb服务器负责https加解密,后端web服务器还是80端口
1.lb服务器配置
[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.conf
upstream ssl_pools {
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name ssl.oldboy.com ;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name ssl.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://ssl_pools;
include proxy_params;
}
}
2.web服务器配置
[root@web01 /etc/nginx/conf.d]# cat ssl.conf
server {
listen 80;
server_name ssl.oldboy.com;
location / {
root /code;
index index.html;
}
}
第五节:wordpress配置https
lb服务器配置
1.配置nginx配置文件
[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.conf
upstream ssl_pools {
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name blog.mysun.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name blog.mysun.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://ssl_pools;
include proxy_params;
}
}
2.配置fastcgi的https相关参数
echo "fastcgi_param HTTPS on;" >> /etc/nginx/fastcgi_params
web服务器配置:(2台web服务器都需要配置)
3.web服务器nginx配置
[root@web01 ~]# cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.mysun.com;
root /code/wordpress;
index index.php index.html;
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4.重启nginx
nginx -t
systemctl restart nginx
第六节:常见报错总结:
1.hosts文件条目重复(杂乱)
2.hosts文件地址写错
3.lb服务器的地址池端口没有给成443
4.web02服务器没有配置server_name导致访问到web02的默认首页
第七节:HTTPS的非对称加密原理
我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过CSR发给CA,CA中心通过后,CA中心会生成一对公钥和私钥,那么公钥会在CA证书链中保存,公钥和私钥证书订阅人拿到后,会将其部署在WEB服务器上
1.当浏览器访问我们的https站点时,它会去请求我们的证书
2.Nginx这样的web服务器会将我们的公钥证书发给浏览器
3.浏览器会去验证我们的证书是否是合法和有效的。
4.CA机构会将过期的证书放置在CRL服务器,那么CRL服务的验证效率是非常差的,所以CA又推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过期,所以浏览器可以直接查询OCSP响应程序,但OCSP响应程序性能还不是很高。
5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取,证书是否有效