ssl證書,有了ssl網站才能跳轉到https 網站http://換成https:// :s#http://#https://#g ssl證書購買 cdn
咱們使用瀏覽器訪問一個網站頁面,在瀏覽器的地址欄中咱們會看到一串URL,如圖php
網站的URL會分爲兩部分:通訊協議和域名地址。html
域名地址都很好理解,不一樣的域名地址表示網站中不一樣的頁面,而通訊協議,簡單來講就是瀏覽器和服務器之間溝通的語言。網站中的通訊協議通常就是HTTP協議和HTTPS協議。node
HTTP協議mysql
HTTP協議是一種使用明文數據傳輸
的網絡協議。一直以來HTTP協議都是最主流
的網頁協議,可是不安全linux
HTTPS協議nginx
HTTPS協議能夠理解爲HTTP協議的升級,就是在HTTP的基礎上增長了數據加密
。在數據進行傳輸以前,對數據進行加密,而後再發送到服務器。這樣,就算數據被第三者所截獲,可是因爲數據是加密的,因此你的我的信息讓然是安全的。這就是HTTP和HTTPS的最大區別。web
其實若是你足夠細心,你會發現如今不少大型互聯網網站,如百度、淘寶、騰訊很早就已經把HTTP換成HTTPS了。sql
HTTP和HTTPS的其餘不一樣數據庫
數據加密傳輸,是HTTP和HTTPS之間的本質性區別,其實除了這個以外,HTTPS網站和HTTP網站還有其餘地方不一樣。vim
當你使用Chrome瀏覽器訪問一個HTTP網站的時候,你會發現瀏覽器會對該HTTP網站顯示「不安全」的安全警告,提示用戶當前所訪問的網站可能會存在風險。
而假如你訪問的是一個HTTPS網站時,狀況倒是徹底不同。你會發現瀏覽器的地址欄會變成綠色,企業名稱會展現在地址欄中,地址欄上面還會出現一把「安全鎖」的圖標。這些都會給與用戶很大的視覺上的安全體驗。如下是EV證書
在不一樣瀏覽器中的展示。
除了瀏覽器視覺上不一樣之外,HTTPS網站和HTTP網站還有一個很重要的區別,就是對搜索排名的提高
,這也是不少站長所關注的地方。
百度和谷歌兩大搜索引擎都已經明確表示,HTTPS網站將會做爲搜索排名的一個重要權重指標。也就是說HTTPS網站比起HTTP網站在搜索排名中更有優點。
HTTPS網站相比起HTTP網站擁有着多種的優點,HTTP明顯已經不能適應當今這個互聯網時代,能夠預見到HTTP在不久的未來將會全面被HTTPS所取代。
對比 | 域名型 DV | 企業型 OV | 加強型 EV |
---|---|---|---|
綠色地址欄 | 小鎖標記+https | 小鎖標記+https | 小鎖標記+企業名稱+https |
通常用途 | 我的站點和應用; 簡單的https加密需求 | 電子商務站點和應用; 中小型企業站點 | 大型金融平臺; 大型企業和政府機構站點 |
審覈內容 | 域名全部權驗證 | 全面的企業身份驗證; 域名全部權驗證 | 最高等級的企業身份驗證; 域名全部權驗證 |
頒發時長 | 10分鐘-24小時 | 3-5個工做日 | 5-7個工做日 |
單次申請年限 | 1年 | 1-2年 | 1-2年 |
賠付保障金 | —— | 125-175萬美金 | 150-175萬美金 |
單域名證書,保護一個域名 www
多域名證書,保護五個域名 www images cdn test m
通配符域名,通配符域名 *.driverzeng.com
HTTPS注意事項 :
https不支持
續費
,證書到期須要從新申請並進行替換
https不支持三級域名解析
,如 test.m.driverzeng.com
https顯示綠色,說明整個網站的url都是https
的
https顯示黃色,由於網站代碼中包含http的不安全連接
https顯示紅色,那麼證書是假的或者證書過時或者某些不安全的連接
location / { sub_filter '<a href="http://127.0.0.1:8080/' '<a href="https://$host/'; sub_filter '<img src="http://127.0.0.1:8080/' '<img src="https://$host/'; sub_filter_once on; } Syntax: sub_filter string replacement; Default: — Context: http, server, location(?)
1.手寫server語句 [root@web01 conf.d]# cat test.conf server { listen 80; server_name jj.com; root /data/code; index index.html; charset utf-8; } 2.編輯HTML [root@web01 code]# vim index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>我是title</title> </head> <body> <article> <header> <h1>我是Article</h1> <p>建立時間:<time pubdate="pubdate">2018/8/10</time></p> </header> <p> <b>Aticle</b>第一次用h5寫文章,好他*的緊張... </p> <footer> <p><small>曾老溼版權全部!</small></p> </footer> </article> </body> </html> 3.重載nginx配置文件 nginx -sreload 4.本地域名解析 5.瀏覽器訪問 jj.com
1.使用sub模塊代理綿羊機 [root@web01 conf.d]# vim /etc/nginx/conf.d/jj.conf upstream jiechi { server 10.0.0.9:80; } server { listen 80; server_name www.linux.com; location / { proxy_pass http://jiechi; proxy_set_header Host $http_host; sub_filter '<h1>歡迎來到{{ 曾老溼 }}自定義網站</h1>' '<h1>歡迎來到{{ syy }}自定義網站</h1>'; sub_filter '<title>主頁面</title>' ' <title>不是主頁面</title>'; } } 2.重載nginx配置文件 nginx -sreload 3.本地域名解析 4.瀏覽器訪問 jj.com #使用sub模塊修改某一站點的條件 一:目標的IP和端口,域名 二:站點內容 三:本地解析 經過sub模塊能夠修改某一站點任意內容,因此想要黑一個網站,最重要的是域名劫持,而後綁定到黑客本身的網站
環境準備
nginx必須有ssl模塊,沒有的話要從新編譯安裝 [root@web03 ~]# nginx -V --with-http_ssl_module #建立存放ssl證書的路徑,位置隨意 [root@web03 ~]# mkdir -p /etc/nginx/ssl_key && cd /etc/nginx/ssl_key
使用openssl命令充當CA權威機構建立證書(生產不使用此方式生成證書,不被互聯網承認的黑戶證書)(至關於公鑰)
[root@web03 ssl_key]# openssl genrsa -idea -out $(date +%Y%m%d)_www.linux.com.key 2048 Generating RSA private key, 2048 bit long modulus ........+++ ..........+++ e is 65537 (0x10001) Enter pass phrase for 20200603_www.linux.com.key: #密碼1234 Verifying - Enter pass phrase for 20200603_www.linux.com.key: [root@web03 ssl_key]# ls 20200603_www.linux.com.key
生成自簽證書,同時去掉私鑰的密碼(私鑰)
[root@web03 ssl_key]# openssl req -days 36500 -x509 \ -sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl_key/20200603_www.linux.com.key -out /etc/nginx/ssl_key/20200603_www.linux.com.crt Generating a 2048 bit RSA private key ..................................................................................................+++ ...................................................................................................+++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN string is too long, it needs to be less than 2 bytes long Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:CHINA Locality Name (eg, city) [Default City]:CN Organization Name (eg, company) [Default Company Ltd]:shiwei Organizational Unit Name (eg, section) []:CN Common Name (eg, your name or your server hostname) []:*.linux.com #要綁定的域名(選擇fan證書) Email Address []:123@qq.com # req --> 用於建立新的證書 # new --> 表示建立的是新證書 # x509 --> 表示定義證書的格式爲標準格式 # key --> 表示調用的私鑰文件信息 # out --> 表示輸出證書文件信息 # days --> 表示證書的有效期
配置server的ssl模板
http { server { listen 443 ssl; ssl_certificate /etc/nginx/ssl_key/20200603_www.linux.com.key.crt; ssl_certificate_key /etc/nginx/ssl_key/20200603_www.linux.com.key; } } #443 ssl 就不用寫ssl on了 # 這種黑戶證書不能被互聯網承認(瀏覽器顯示爲紅色)
爲linux配置https和證書及域名強行跳轉
[root@web03 code]# vim /etc/nginx/conf.d/ln.conf server { listen 80; server_name www.linux.com; rewrite ^(.*)$ https://$server_name$request_uri redirect; #return 302 https://$server_name$request_uri; } server { listen 443 ssl; server_name www.linux.com; root /code/dist; index index.html; ssl_certificate /etc/nginx/ssl_key/20200603_www.linux.com.key.crt; ssl_certificate_key /etc/nginx/ssl_key/20200603_www.linux.com.key; location ~* ^/(download|friend|blog) { rewrite ^/(.*)$ http://$1.linux.com redirect; #return 302 http://$request_uri.linux.com; } } server { listen 80; server_name friend.linux.com; location / { root /code/friend; index friend.html; } } server { listen 80; server_name blog.linux.com; location / { root /code/blog; index blog.html; } } server { listen 80; server_name download.linux.com; location / { root /code/download; index down.html; } } #瀏覽器輸入https://www.linux.com/ ,由於服務器80端口沒有被使用,使用的是443端口,這種方式訪問該域名的子網,跳轉後的子域名仍是http:// #加入強行跳轉server,瀏覽器輸入www.linux.com查看,這種方式訪問該域名的子網,跳轉後的子域名仍是http:// server { listen 80; server_name www.linux.com; return 302 https://$server_name$request_uri; }
環境準備
主機名 | 外網IP(NAT) | 內網IP(LAN) | 角色 |
---|---|---|---|
lb01 | 10.0.0.5 | 172.16.1.5 | 負載均衡 |
web02 | 10.0.0.8 | 172.16.1.8 | web服務器 |
web03 | 10.0.0.9 | 172.16.1.9 | web服務器 |
#拷貝,使web站點目錄,server配置,證書等條件同樣 配置文件 [root@web03 ~]# rsync -avz /etc/nginx/conf.d/* 10.0.0.8:/etc/nginx/conf.d/ [root@web03 ~]# rsync -avz /etc/nginx/conf.d/* 10.0.0.7:/etc/nginx/conf.d/ 站點目錄 [root@web03 ~]# rsync -avz /code/* 10.0.0.8:/code/ [root@web03 ~]# rsync -avz /code/* 10.0.0.7:/code/ 證書 [root@web03 ~]# rsync -avz /etc/nginx/ssl_key/* 10.0.0.8:/etc/nginx/ssl_key/ [root@web03 ~]# rsync -avz /etc/nginx/ssl_key/* 10.0.0.7:/etc/nginx/ssl_key/ [root@web02 conf.d]# nginx -sreload [root@web01 conf.d]# nginx -sreload #這樣每臺web都佈置,不太現實
拷貝證書到lb服務器
[root@web03 nginx]# rsync -avz /etc/nginx/ssl_key/* 172.16.1.5:/etc/nginx/ssl_key
配置lb01的nginx配置
[root@lb01 conf.d]# vim /etc/nginx/conf.d/ssl.conf upstream web { server 172.16.1.7:80; server 172.16.1.8:80; server 172.16.1.9:80; } server { listen 80; server_name www.linux.com; return 302 https://$server_name$request_uri; # } server { listen 443 ssl; # server_name www.linux.com; ssl_certificate ssl_key/server.crt; # ssl_certificate_key ssl_key/server.key; # location / { proxy_pass http://web; proxy_set_header Host $http_host; } } #爲不一樣的網站都配置ssl,有幾個網站誒只幾個server server { listen 443 ssl; server_name friend.linux.com; ssl_certificate ssl_key/server.crt; ssl_certificate_key ssl_key/server.key; location / { proxy_pass http://web; proxy_set_header Host $http_host; } } # 重載 nginx -sreload # web不要配置ssl,ssl只須要部署在lb,證書的80強轉443永遠部署在集羣最前面(lb或者cdn,不能配置在四層負載) ------------------------------------------------------------- #web03 server配置 [root@web03 code]# vim /etc/nginx/conf.d/ln.conf server { listen 80; server_name www.linux.com; rewrite ^(.*)$ https://$server_name$request_uri redirect; #return 302 https://$server_name$request_uri; } server { listen 80; server_name www.linux.com; root /code/dist; index index.html; location ~* ^/(download|friend|blog) { rewrite ^/(.*)$ http://$1.linux.com redirect; #return 302 http://$request_uri.linux.com; } } server { listen 80; server_name friend.linux.com; location / { root /code/friend; index friend.html; } } server { listen 80; server_name blog.linux.com; location / { root /code/blog; index blog.html; } } server { listen 80; server_name download.linux.com; location / { root /code/download; index down.html; } } #web不要配置證書 [root@web03 ~]# rm -rf /etc/nginx/ssl_key/ [root@web02 ~]# rm -rf /etc/nginx/ssl_key/ [root@web01 ~]# rm -rf /etc/nginx/ssl_key/ #拷貝,使web站點目錄,server配置,證書等條件同樣 配置文件 [root@web03 ~]# rsync -avz /etc/nginx/conf.d/* 10.0.0.8:/etc/nginx/conf.d/ [root@web03 ~]# rsync -avz /etc/nginx/conf.d/* 10.0.0.7:/etc/nginx/conf.d/ 站點目錄 [root@web03 ~]# rsync -avz /code/* 10.0.0.8:/code/ [root@web03 ~]# rsync -avz /code/* 10.0.0.7:/code/ [root@web02 conf.d]# nginx -sreload [root@web01 conf.d]# nginx -sreload
拷貝證書到lb服務器
[root@web03 nginx]# rsync -avz /etc/nginx/ssl_key/* 172.16.1.5:/etc/nginx/ssl_key
配置lb01的nginx配置
[root@lb01 conf.d]# vim /etc/nginx/conf.d/ssl.conf upstream web { server 172.16.1.7:80; server 172.16.1.8:80; server 172.16.1.9:80; } server { listen 80; server_name cs.wp.com cs.zh.com cs.pm.com; return 302 https://$server_name$request_uri; } server { listen 443 ssl; server_name cs.wp.com cs.zh.com cs.pm.com; ssl_certificate ssl_key/server.crt; ssl_certificate_key ssl_key/server.key; location / { proxy_pass http://web; proxy_set_header Host $http_host; } }
服務器web01 web02執行如下操做,server是通用的 1.手寫server語句 vim /etc/nginx/conf.d/wp.conf server { listen 80; server_name cs.wp.com; root /code/wordpress; index info.php index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #告訴PHP,與lb交流使用https協議 echo 'fastcgi_param https on;' >> /etc/nginx/fastcgi_params 2.重載nginx服務 nginx -sreload 3.下載安裝包 mkdir /code -p && cd /code && \ wget http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz 4.安裝服務 tar xf wordpress-5.0.3-zh_CN.tar.gz && rm -rf wordpress-5.0.3-zh_CN.tar.gz 5.受權 chown -R www.www /code #不加fastcgi_param https on;瀏覽器訪問全部的服務都會破窗
1.給root一個密碼 [root@db01 ~]# mysqladmin -uroot password '1' 2.鏈接數據庫 [root@db01 ~]# mysql -uroot -p1 3.建立用戶 MariaDB [(none)]> grant all on *.* to wp_zh@'%' identified by '1'; 4.建立數據庫 MariaDB [(none)]> create database wp; MariaDB [(none)]> create database zh; 5.重啓數據庫 systemctl restart mariadb
10.0.0.5 cs.wp.com cs.zh.com cs.pm.com
cs.wp.com #須要登陸ordpress後臺,把http改爲https cs.zh.com cs.pm.com
1.web01打包安裝過的服務 cd / && tar zcf code.tgz code 2.使用scp或者rsync傳過去 rsync -avz code.tgz 10.0.0.8:/root rsync -avz /etc/* 10.0.0.8:/etc 2.web02等服務器解壓 tar xf code.tgz -C / 3.重載nginx配置文件# nginx -sreload
完善架構
1.web01 02 03 部署nginx 和php 80端口
2.lb部署https證書,80強轉443
3.NFS: sersync
4.MySQL
- wordpress - zh