https 證書配置
第一章 HTTPS 安全證書基本概述
為什麼需要使用HTTPS, 因為HTTP 不安全。當我們使用http 網站時,經常會遇到包遭到劫持和篡改,如果採用https 協議,那麼資料在傳輸過程中是加密的,所以黑客無法竊取或者篡改資料報文資訊。
https 主要解決了什麼問題,避免網站傳輸時資訊洩露,避免網站傳輸時內容不被劫持和篡改。
下面我們來了解一下HTTPS 證書型別
HTTPS 證書購買選擇
保護1 個域名www
保護5 個域名www images cdn test m
萬用字元域名 *.oldboy.com
HTTPS 注意事項
Https 不支援續費,證書到期需重新申請新並進行替換.
Https 如果是萬用字元域名,二級域名和三級域名需要分別購買,如test.m.oldboy.com
Https 顯示綠色, 說明整個網站的URL 都是https 的。
Https 顯示黃色, 因為網站程式碼中包含http的不安全連線。
Https 顯示紅色, 要麼證書是假的,要麼證書過期
第二章 Nginx 單臺實現HTTPS 實戰
1.環境準備
#nginx 必須有ssl 模組
[root@web01 ~]# nginx -V
--with-http_ssl_module
#建立存放ssl 證書的路徑
[root@web01 ~]# cd /etc/nginx/ssl_key
[root@web01 /etc/nginx/ssl_key]#
2.使用openssl 命令充當CA 權威機構建立證書(生產不使用此方式生成證書,因為不會被網際網路認可)
[root@web01 /etc/nginx/ssl_key]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
... +++
e is 65537 (0x10001)
#記住配置密碼, 我這裡是1234
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
3.生成自簽證書,同時去掉私鑰的密碼
[root@web01 /etc/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) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:edu
Organizational Unit Name (eg, section) []:SA
Common Name (eg, your name or your server's hostname) []:oldboy
Email Address []:[oldboy@oldboy.com](mailto:oldboy@oldboy.com)
# req -->用於建立新的證書
# new -->表示建立的是新證書
# x509 -->表示定義證書的格式為標準格式
# key -->表示呼叫的私鑰檔案資訊
# out -->表示輸出證書檔案資訊
# days -->表示證書的有效期
4.證書申請完成後需要了解Nginx 如何配置Https
#是否開始ssl 支援
Syntax: ssl on | off;
Default: ssl off;
Context: http, server
#ssl crt 檔案存放位置
Syntax: ssl_certificate file;
Default: —
Context: http, server
#ssl key 檔案存放位置
Syntax: ssl_certificate_key file;
Default: —
Context: http, server
5.配置Nginx 配置Https 例項
[root@web01 ~]# 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@web01 ~]# mkdir -p /code
[root@web01 ~]# echo "Https" > /code/index.html
[root@web01 ~]# nginx -t
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/ssl.conf:4
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#有個報警提示,告訴我們需要使用listen ... ssl這樣的格式
[root@web01 ~]# cat /etc/nginx/conf.d/ssl.conf
server {
listen 443 ssl;
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;
}
}
#再次檢查就沒有問題了
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx
6.瀏覽器輸入https://s.oldboy.com 訪問, 由於該證書非第三方權威機構頒發,而是我們自己簽發的,所以瀏覽器會警告
image.png7.以上配置如果使用者忘記在瀏覽器位址列輸入https:// 那麼將不會跳轉至https,建議配置將使用者訪問http 請求強制跳轉https
[root@web01 ~]# cat /etc/nginx/conf.d/ssl.conf
server {
listen 443 ssl;
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 跳轉方式
rewrite ^(.*) https://$server_name$1 redirect;
#return 跳轉方式
#return 302 https://$server_name$request_uri;
}
第三章 Nginx 叢集實現HTTPS 實踐
實戰Nginx 負載均衡+Nginx WEB 配置HTTPS 安全
1.環境準備
主機名 | 外網IP(NAT) | 內網IP(LAN) | 角色 |
---|---|---|---|
lb01 | eth0:10.0.0.5 | eth1:172.16.1.5 | nginx-proxy |
web01 | eth0:10.0.0.7 | eth1:172.16.1.7 | nginx-web01 |
web02 | eth0:10.0.0.8 | eth1:172.16.1.8 | nginx-web02 |
2.配置後端兩臺web 節點監聽80 埠, 如已配置則無需修改
[root@web01 ~]# cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.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;
}
}
3.配置第二臺WEB節點
[root@web01 ~]# scp -rp /etc/nginx/ssl_key/ root@172.16.1.8:/etc/nginx/
[root@web01 ~]# scp -rp /etc/nginx/conf.d/ root@172.16.1.8:/etc/nginx/
4.重啟兩臺後端web 節點Nginx
[root@web01 ~]# systemctl restart nginx
[root@web02 ~]# systemctl restart nginx
5.Nginx 負載均衡先生成證書
[root@lb01 ~]# mkdir /etc/nginx/ssl/ssh_key -p
[root@lb01 ~]# mkdir /etc/nginx/ssl_key -p
[root@lb01 ~]# cd /etc/nginx/ssl_key/
[root@lb01 /etc/nginx/ssl_key]# openssl genrsa -idea -out server.key 2048
[root@lb01 /etc/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) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:edu
Organizational Unit Name (eg, section) []:SA
Common Name (eg, your name or your server's hostname) []:oldboy
Email Address []:[oldboy@oldboy.com](mailto:oldboy@oldboy.com)
6.Nginx 負載均衡配置檔案如下
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy.conf
# 定義後端資源池
upstream site {
server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
}
#https配置
server {
listen 443 ssl;
server_name blog.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://site;
include proxy_params;
}
}
#使用者http請求跳轉至https
server {
listen 80;
server_name blog.oldboy.com;
return 302 https://$server_name$request_uri;
}
7.重啟Nginx 負載均衡
[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl restart nginx
8.配置代理和nginx服務都是https
proxy_params配置
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
反向代理配置檔案
# 定義後端資源池
upstream site {
server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
}
upstream ssl {
server 172.16.1.7:443 max_fails=2 fail_timeout=10s;
server 172.16.1.8:443 max_fails=2 fail_timeout=10s;
}
#https配置
server {
listen 443 ssl;
server_name s.oldboy.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass https://ssl;
include proxy_params;
}
}
#使用者http請求跳轉至https
server {
listen 80;
server_name s.oldboy.com;
return 302 https://$server_name$request_uri;
}
nginx配置檔案
server {
listen 443 ssl;
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;
}
}
9.wordpress和wecenter配置https
wecenter在後臺配置:
wordpress除了後臺配置以外還需要在nginx配置檔案裡新增php-fastcgi解析的引數
location ~ \.php$ {
...
fastcgi_param HTTPS on;
...
}
作者:被運維耽誤的廚子
連結:https://www.jianshu.com/p/70d58411e309
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。