day45 nginx HTTPS

nginx HTTPS

1. rewrite

1. rewrite中的flag

​ 协议间的跳转,不做任何修改: return
​ 地址做改写 rewrite

跳转
    redirect    302     临时跳转     旧网站无影响,新网站无排名
    permanent   301     永久跳转     新跳转网站有排名,旧网站排名清空
    
    http  ---> https   302      浏览器不会记住新域名
    http  ---> https   301      浏览器会记录新域名
server {
    listen 80;
    server_name url.oldxu.com;
    return ^/$ https://$http_host$request_uri;  
}

  • last #本条规则匹配完成后,继续向下匹配新的location URI规则
    break #本条规则匹配完成即终止,不再匹配后面的任何规则

当rewrite规则遇到break后,本location{}与其他location{}的所有rewrite/return规则都不再执行。
当rewrite规则遇到last后,本location{}里后续rewrite/return规则不执行,但重写后的url再次从头开始执行所有规则,哪个匹配执行哪个。

server {
    listen 80;
    server_name url.oldxu.com;
    root /code;

    location / {
        rewrite /1.html /2.html 
    break;
        rewrite /2.html /3.html;
    }

    location /2.html {
        rewrite /2.html /a.html;
    }

    location /3.html {
        rewrite /3.html /b.html;
    }
} 

1.什么是Https

​ HTTPS全称超文本传输安全协议,是以安全为目标的http通道,简单来说就是http的安全版。

image.png

2.为什么要使用Https

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

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

3.模拟不使用Https的劫持和篡改?

#1.web端
server {
    listen 80;
    server_name s.oldxu.com;
    root /code;
    location / {
        index index.html;
    
    }

}
#2.代理端
server {
    listen 80;
    server_name s.oldxu.com;
    location / {
        proxy_pass http://10.0.0.7;
        sub_filter '<h1>' 'img src="**图片地址**" >';
        include proxy_params;
    }
}

4.Https通讯是如何确定双方的身份?

​ 那么在数据进行加密与解密过程中,如何确定双方的身份,此时就需要有一个权威机构来验证双方省份。那么这个权威机构则是CA机构。那CA机构又是如何颁发证书。

  • 证书申请流程
image.png

我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过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获取,证书是否有效。

5.Https证书类型、购买指南、注意事项?

image.png
  • .HTTPS证书购买指南 oldxu.com

  • HTTPS注意事项
      Https不支持续费,证书到期需重新申请新并进行替换。
      Https不支持三级域名解析,如 test.m.oldboy.com。
      Https显示绿色,说明整个网站的url都是https的,并且都是安全的。
      Https显示黄色,说明网站代码中有部分URL地址是http不安全协议的。
      Https显示红色,要么证书是假的,要么证书已经过期。

6.如何实现单台Https、又如何实现集群Https?

  • 1.环境准备
#nginx必须有ssl模块
[root@Nginx ~]# nginx -V
 --with-http_ssl_module
 
#创建存放ssl证书的路径
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key
  • 2.使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
[root@Nginx ssh_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 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) []:WH
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:edu    
Organizational Unit Name (eg, section) []:SA
Common Name (eg, your name or your servers hostname) []:bgx
Email Address []:bgx@foxmail.com


# req  -->用于创建新的证书
# new  -->表示创建的是新证书
# x509 -->表示定义证书的格式为标准格式
# key  -->表示调用的私钥文件信息
# out  -->表示输出证书文件信息
# days -->表示证书的有效期
  • 4.证书申请完成后需要了解Nginx如何配置Https
#启动ssl功能
Syntax: ssl on | off;
Default: ssl off;
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 ~]# cat /etc/nginx/conf.d/ssl.conf
server {
    listen 443;
    server_name s.oldboy.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 ~]# mkdir -p /code
[root@Nginx ~]# echo "Https" > /code/index.html
[root@Nginx ~]# systemctl restart nginx

  • 6.浏览器输入https://s.oldboy.com访问, 由于该证书非第三方权威机构颁发,而是我们自己签发的,所以浏览器会警告

    image.png

  • 7.以上配置如果用户忘记在浏览器地址栏输入 https:// 那么将不会跳转至https,建议配置将用户访问 http请求强制跳转https

[root@Nginx ~]# cat /etc/nginx/conf.d/ssl.conf 
server {
    listen 443;
    server_name s.oldboy.com;
    ssl on;
    ssl_certificate   ssl_key/server.crt;
    ssl_certificate_key  ssl_key/server.key;
    location / {
        root /code;
        index index.html;
    }
}
server {
        listen 80;
        server_name s.oldboy.com;
        rewrite ^(.*) https://$server_name$1 redirect;  #rewrite跳转方式
        #return 302 https://$server_name$request_uri;   #return跳转方式   
}

7.如何将Https集成集群架构实现全站Https?

image.png

  • 负载均衡配置HTTPS
[root@lb01 conf.d]# cat proxy_blog.oldxu.com.conf 
upstream blog {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    server_name blog.oldxu.com;
    
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    location / {
        proxy_pass http://blog;
        proxy_next_upstream error timeout http_500 http_502 http_503;
        include proxy_params;
    }
}

server {
    listen 80;
    server_name blog.oldxu.com;
    return 302 https://$http_host$request_uri;
}
  • 将原来的博客网站设为HTTPS
[root@web02 conf.d]# cat blog.oldxu.com.conf 
server {
    listen 80;
    server_name blog.oldxu.com;
    root /code/wordpress;

    client_max_body_size 100m;
    location / {
        index index.php;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;
        include fastcgi_params;
    }
}

8.案例

  • 1.需求: 部分URL走https,部分不走https?
 s.oldxu.com/login  ---> https
 
[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf 
upstream webs {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    server_name s.oldxu.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}
server {
    listen 80;
    server_name s.oldxu.com;
    
    if ($request_uri ~* "^/login") {
        return 302 https://$http_host$request_uri;
    }

    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}
  • 2.需求: 当用户请求s.oldxu.com/abc时走http,其他的所有都走https?
        s.oldxu.com/       ---> https
    s.oldxu.com/abc    ---> http

[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf 
upstream webs {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    server_name s.oldxu.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}
server {
    listen 80;
    server_name s.oldxu.com;
    
    if ($request_uri !~* "^/abc") {
        return 302 https://$http_host$request_uri;
    }

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

9.https优化相关的参数?

server {
    listen 443 ssl;
    server_name nginx.bjstack.com;
    
    ssl_certificate ssl_key/1524377920931.pem;
    ssl_certificate_key ssl_key/1524377920931.key;
    ssl_session_cache shared:SSL:10m;   #在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,是不需要在次建立握手,可以复用之前的连接
    ssl_session_timeout 1440m;           #ssl连接断开后的超时时间
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的TLS版本协议
    ssl_prefer_server_ciphers on;        #Nginx决定使用哪些协议与浏览器进行通讯
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #配置加密套间

l   ocation / {
        root /soft/code;
        index index.html index.htm;
    }
}
server {
        listen 80;
        server_name nginx.bjstack.com;
        return 302 https://$server_name$request_uri;
}

10.阿里云申请免费的证书------->真实
s.xuliangwei.com

image.png

29.SLB+ECS配置Https

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 起风的时候 我努力的仰起头 很想,用眼睛看破风的轨迹 期许,它也曾遇到过你 夹带着信 信中是你的气息 信中还有你呢...
    愿我照你心明阅读 209评论 3 3
  • 劳苦奔波让我急于上床躺下,虽能让我旅途中劳累的躯体好好歇息,但思维却开始了新的征程,身体休息,心却无法停留——节选...
    沉默猪阅读 700评论 0 3
  • 马拉松比赛 你比想象中的优秀,是的,我比想象中的优秀,我们都比想象中的优秀,新的挑战,新的开始,安于现状,原地踏步...
    遇见继承阅读 176评论 0 0
  • 雨淅淅沥沥地飘落 站在窗前的我 望着行走在雨中的你 感受最美的画景 雨中的你 依旧着朴素的衣裳 然在我心中 华丽而...
    惜吾瑄阅读 208评论 4 1