1. 程式人生 > 實用技巧 >https 證書配置

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.png

7.以上配置如果使用者忘記在瀏覽器位址列輸入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
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。