自簽證書相關筆記

linux9期架構-宋陽陽-day22

課前回顧

ssl證書,有了ssl網站才能跳轉到https

網站http://換成https://		:s#http://#https://#g

ssl證書購買

cdn

HTTP和HTTPS是什麼?

咱們使用瀏覽器訪問一個網站頁面,在瀏覽器的地址欄中咱們會看到一串URL,如圖php

img

網站的URL會分爲兩部分:通訊協議和域名地址。html

域名地址都很好理解,不一樣的域名地址表示網站中不一樣的頁面,而通訊協議,簡單來講就是瀏覽器和服務器之間溝通的語言。網站中的通訊協議通常就是HTTP協議和HTTPS協議。node

HTTP協議mysql

HTTP協議是一種使用明文數據傳輸的網絡協議。一直以來HTTP協議都是最主流的網頁協議,可是不安全linux

img

HTTPS協議nginx

HTTPS協議能夠理解爲HTTP協議的升級,就是在HTTP的基礎上增長了數據加密。在數據進行傳輸以前,對數據進行加密,而後再發送到服務器。這樣,就算數據被第三者所截獲,可是因爲數據是加密的,因此你的我的信息讓然是安全的。這就是HTTP和HTTPS的最大區別。web

img

其實若是你足夠細心,你會發現如今不少大型互聯網網站,如百度、淘寶、騰訊很早就已經把HTTP換成HTTPS了。sql

img

HTTP和HTTPS的其餘不一樣數據庫

數據加密傳輸,是HTTP和HTTPS之間的本質性區別,其實除了這個以外,HTTPS網站和HTTP網站還有其餘地方不一樣。vim

當你使用Chrome瀏覽器訪問一個HTTP網站的時候,你會發現瀏覽器會對該HTTP網站顯示「不安全」的安全警告,提示用戶當前所訪問的網站可能會存在風險。

img

而假如你訪問的是一個HTTPS網站時,狀況倒是徹底不同。你會發現瀏覽器的地址欄會變成綠色,企業名稱會展現在地址欄中,地址欄上面還會出現一把「安全鎖」的圖標。這些都會給與用戶很大的視覺上的安全體驗。如下是EV證書在不一樣瀏覽器中的展示。

img

除了瀏覽器視覺上不一樣之外,HTTPS網站和HTTP網站還有一個很重要的區別,就是對搜索排名的提高,這也是不少站長所關注的地方。

百度和谷歌兩大搜索引擎都已經明確表示,HTTPS網站將會做爲搜索排名的一個重要權重指標。也就是說HTTPS網站比起HTTP網站在搜索排名中更有優點。

HTTPS網站相比起HTTP網站擁有着多種的優點,HTTP明顯已經不能適應當今這個互聯網時代,能夠預見到HTTP在不久的未來將會全面被HTTPS所取代。

CA機構又是如何頒發證書?

證書類型介紹

對比 域名型 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顯示紅色,那麼證書是假的或者證書過時或者某些不安全的連接


ngx_http_sub_module模塊

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模塊能夠修改某一站點任意內容,因此想要黑一個網站,最重要的是域名劫持,而後綁定到黑客本身的網站

taoyyd.png

ngx_http_ssl_module模塊

Nginx 單臺實現HTTPS流程


環境準備

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;
}

QQ截圖20200603182847.png

nginx集羣實現https

環境準備

主機名 外網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服務器

方法一

集羣佈置ssl證書麻煩死實例(每臺web都佈置ssl)

#拷貝,使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都佈置,不太現實

img

方法二

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

img

真實業務場景實現HTTPS實踐

部署負載均衡

拷貝證書到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安裝wordpress 服務

服務器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

tdgLUe.md.png

配置web02 web03

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

相關文章
相關標籤/搜索