nginx配置ssl證書流程及常見問題


背景:

項目開發中用到了微信小程序,但是服務器配置URL必須是HTTPS,所以需要通過配置nginx的SSL模塊來支持HTTPS訪問,也就是說,要做一個網站域名為 dmsdbj.com 要求通過HTTPS://dmsdbj.com進行訪問.

SSL英文名為Secure Socket Layer,安全套接字層。SSL是一種數字證書,它使用ssl協議在瀏覽器和web server之間建立一條安全通道,數據信息在client與server之間的安全傳輸.

前提:

1. 配置SSL模塊首先需要CA證書,CA證書可以自己手動頒發也可以在阿里雲申請,本人在阿里雲上申請的證書。

2. 默認情況下ssl模塊並未被安裝,如果要使用該模塊則需要在編譯nginx時指定–with-http_ssl_module參數.

阿里雲購買CA證書

操作步驟:

一、下載CA證書
      1. 登錄阿里雲,選擇“控制台”-“產品與服務”,在“安全(雲盾)”一欄中選擇“CA證書服務(數據安全)”。

2.在已經購買好的證書點擊“下載”,在新打開的頁面上選擇“Nginx/Tengine”,點擊“下載證書for Nginx”。

二、在Nginx配置文件中安裝證書

文件說明:

  1. 證書文件“證書名稱.pem‘’,包含兩段內容,請不要刪除任何一段內容。

  2. 如果是證書系統創建的CSR,還包含:證書私鑰文件“證書名稱.key”。

( 1 ) 在Nginx的配置文件所在的目錄下創建cert文件夾,並且將下載的全部文件拷貝到cert目錄中。如果申請證書時是自己創建的CSR文件,請將對應的私鑰文件放到cert目錄下並且命名為“證書名稱.key”;

( 2 ) 打開 Nginx 安裝目錄下 conf 目錄中的 nginx.conf 文件,找到:

HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {

}
}

( 3 ) 將其修改為 (以下屬性中ssl開頭的屬性與證書配置有直接關系,其它屬性請結合自己的實際情況復制或調整) :

server {
    listen 443;
    server_name localhost;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/證書名稱.pem;
    ssl_certificate_key  cert/證書名稱.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

保存退出。

( 4 )重啟 Nginx。

nginx -s reload 

( 5 ) 通過 https 方式訪問您的站點,測試站點證書的安裝配置。 在瀏覽器中輸入你的網址,如下圖所示,則說明配置成功。

安裝過程中遇見的問題

錯誤一:

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:151

解決方案:

出現這種錯誤可能是兩種情況造成的:

情況一:配置文件格式不正確。

解決方法參考鏈接:http://blog.csdn.net/yuanyuan_186/article/details/51324082

情況二:ssl模塊並未被安裝

默認情況下ssl模塊並未被安裝,如果要使用該模塊則需要在編譯nginx時指定–with-http_ssl_module參數,這種情況也會導致錯誤二的出現。

解決方案:

nginx缺少http_ssl_module模塊,編譯安裝的時候帶上--with-http_ssl_module配置就行了,但是現在的情況是我的nginx已經安裝過了,怎么添加模塊,其實也很簡單,往下看: 做個說明:我的nginx的安裝目錄是/usr/local/nginx這個目錄,我的源碼包在/usr/local/src/nginx-1.3.6目錄

(1)切換到源碼包:

cd /root/nginx-1.13.6

(2)配置信息:

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

(3)配置完成后,運行make進行編譯,千萬不要進行make install,否則就是覆蓋安裝。

make

(4)然后備份原有已經安裝好的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

(5)停止Nginx,正常命令直接 nginx -s stop就可以

nginx -s stop

如果關不掉,就直接Kill掉進程。ps aux | grep 進程名 查看進程占用的PID號。

ps aux|grep nginx

殺掉查出來的PID,或者直接
pkill -9 nginx

(6)將剛剛編譯好的nginx覆蓋掉原有的nginx

cp ./objs/nginx /usr/local/nginx/sbin/

(7)啟動nginx

nginx

(8)通過下面的命令查看是否已經加入成功。

nginx -V

錯誤二:

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:148

解決方案:

出現這種情況的解決方案參考錯誤一的第二種情況的解決方案即可。

錯誤三:

Stoping nginx... nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/cert/214291778530222.pem") failed (SSL: error:02001002:system library:fopen:No such file or             directory:fopen('/usr/local/nginx/conf/cert/214291778530222.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) failed. Use force-quit

解決方案:

這可能是證書路徑存放的位置不正確導致的。

將證書文件放到nginx.conf所在的目錄下即可,如果不行,將nginx配置文件中的證書位置換成絕對路徑。


免責聲明!

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



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