nginx配置自簽名https


nginx配置https是需要CA頒發證書的,為了測試方便,我們可以使用自簽名證書

1.如何生成自簽名證書 1.1:我們需要為服務端和客戶端准備私鑰和公鑰:

//生成服務器端私鑰 openssl genrsa -out server.key 1024 //生成服務器端公鑰 openssl rsa -in server.key -pubout -out server.pem 

1.2:生成CA證書

// 生成 CA 私鑰 openssl genrsa -out ca.key 1024 openssl req -new -key ca.key -out ca.csr 

注意:執行上面命令會出現以下需要填寫的項目,可以直接回車跳過,但是Common Name那一項建議填寫你的域名,如果是本地的話,可以寫localhost

Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:這個是你的域名 Email Address []: 

生成CA證書

openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

1.3:生成服務器證書

//服務器端需要向 CA 機構申請簽名證書,在申請簽名證書之前依然是創建自己的 CSR 文件 openssl req -new -key server.key -out server.csr //向自己的 CA 機構申請證書,簽名過程需要 CA 的證書和私鑰參與,最終頒發一個帶有 CA 簽名的證書 openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt 

1.4:生成cer文件

//使用openssl 進行轉換 openssl x509 -in server.crt -out server.cer -outform der 

2.配置nginx 我們拿到CA簽發的這個證書后,需要將證書配置在nginx中。 首先,我們將server.crt和server.key拷貝到nginx的配置文件所在的目錄 其次,在nginx的配置中添加如下配置:

server { listen 443 ssl; server_name 你的域名; charset utf-8; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; location / { root html; index index.html index.htm; } } 

當前我們只是做一個歡迎頁的https測試,所以location用的是默認的。需要擴展的小伙伴可以自行修改配置。 最后,重啟nginx,訪問https://你的域名,便可出現歡迎頁。

注意:很多時候,訪問一個網站的時候不會刻意去加https開頭,而是直接輸入域名訪問,但是這樣瀏覽器默認是http請求,如何讓用戶直接輸入域名訪問的也是https請求呢? 方法1:將所有http請求重定向到https

server { 
        charset utf-8;
        listen 80; 
        server_name 你的域名;
        rewrite ^(.*) https://$host$1 permanent;
    }

方法2:當網站只允許https訪問的時候,通過http訪問會報497狀態碼,利用error_page的方式重定向到https

server {
        listen       443 ssl;
        listen       80;
        server_name  localhost;
        charset utf-8;

        ssl on;
        ssl_certificate      server.crt;
        ssl_certificate_key  server.key;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page 497  https://$host$uri?$args;
    }

方法3:利用瀏覽器的方式 首先,建一個html文本,命名為https.html

<html> <meta http-equiv="refresh" content="0;url=https://你的域名/"> </html> 

其次,再通過配置監聽80端口的server對該html訪問:

server { 
        charset utf-8;
        listen 80; 
        server_name 你的域名;
        location / {
            root html;
            index https.html;
        }
        error_page 404 https://你的域名/;
    }

以上方式親測有效,小伙伴可以根據實際情況使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM