Linux Nginx環境下配置支持HTTPS的SSL證書
之前寫了一篇文章《windows Apache 環境下配置支持HTTPS的SSL證書》,但是在實際生產中,項目上線部署的環境一般都是linux下的nginx,這篇文章就來記錄如何在linux下nginx的環境中來配置支持SSL證書。
一、申請SSL證書需要提供的資料
SSL有付費和免費的。付費的話就很多選項,免費的目前在騰訊雲和阿里雲都可以申請。免費的SSL證書都是針對單一域名,比如hld.com、test.hld.com 這兩個域名是單獨的,所以是需要兩個免費的SSL證書。當然如果預算足夠的話,可以購買泛域名證書(泛域名證書包含主域名和所有子域名,比如域名:baidu.com,*.baidu.com,泛域名SSL證書同時包含這兩項!)。這樣在多個域名下就不用一個一個配置了。
不同的SSL證書申請需要准備資料不同,這和SSL證書的驗證等級有關,身份驗證等級可分為4級:Class 1、Class 2、Class 3 和 Class 4(EV),級別越高,驗證越嚴格,需要准備的資料就越多。沒有域名的話,可以為IP申請SSL證書,但是不是所有的SSL證書都支持IP申請。
下面介紹3種不同類型的證書。
(1) DV SSL證書(域名認證型):都屬於Class 1 驗證的SSL證書,只通過E-mail驗證或基於http方式驗證域名所有權即可。(我這里申請的就是此類證書)
准備資料:網站,郵箱即可。
(2)OV SSL證書( 企業認證型):各種代碼簽名證書和企業驗證SSL證書都屬於Class 3 驗證的證書,需要驗證證書申請單位和被授權代表的身份。
准備材料:網站,郵箱、申請企業相關資料。
(3)EV SSL證書(擴展認證型):屬於Class 4 驗證的證書,需要按照國際標准非常嚴格地驗證證書申請單位和被授權代表的身份。
准備材料:申請人身份證,申請人授權書,營業執照,組織機構代碼證,鄧白氏編碼,電話號碼,手機,郵箱等等。
二、申請SSL證書
這里演示的是在騰訊雲申請證書
1、登錄騰訊雲->控制台->雲產品右邊有個加號“+”->選擇SSL證書然后保存
2、點擊SSL證書進入申請頁面
3、填寫申請資料
4、選擇域名身份驗證方式
點擊確認申請。
5、證書管理
控制台->SSL證書->證書管理
說明:這個時候這里就有一條我們剛才點擊申請后的證書記錄
點擊詳情進入頁面,就能看到我們申請的證書詳情
從上圖可以看到,我們還需要去添加DNS解析記錄,然后等待審核通過后,官方頒布證書。
6、添加DNS解析記錄(已經完成這一步的盆友,請自行跳過)
說明:以下操作僅針對域名對應的域名解析商在騰訊雲的情況下,若不在騰訊雲,請到域名對應的域名解析商處進行解析。
1)控制台->DNS解析 DNSPod->域名解析列表
2)找到相應的域名,點擊解析進入,添加記錄然后保存
不出意外的話,大概半天不到就能通過審核(騰訊雲官方的效率還是挺高的~~~)
7、下載證書
審核通過后
點擊下載,就能得到申請的證書了。
三、接下來就是配置證書到nginx
1、打開下載的證書文件夾
騰訊雲的SSL證書下載包中,有一個單獨的Nginx文件夾,里面有兩個文件都是我們需要的
我們需要把這兩個文件放到我們的服務器中,推薦放到/etc/ssl/目錄下
2、配置證書
1)啟動nginx(已經啟動過的,自行跳過這一步)
執行命令:service nginx start
2)找到配置文件所在目錄
執行命令:ps -ef | grep nginx
比如我這兒顯示:
說明:這個地方顯示的nginx.conf,要用vim打開看下,因為有的服務器上只有這一個配置文件,就可以直接編輯配置。有的存在多個配置文件,要找到具體的那個配置文件來配置。像我這里這個/www/server/nginx/conf/nginx.conf,它只是一個總的配置文件,用vim打開后發現還include了其他的配置文件
3)使用vim打開相應的配置文件nginx.conf
1 server 2 { 3 listen 443 ssl; 4 server_name php7.isee.wang; 5 #SSL-START SSL相關配置,請勿刪除或修改下一行帶注釋的404規則 6 #error_page 404/404.html; 7 ssl_certificate /etc/ssl/php7/1_php7.XXX.wang_bundle.crt; 8 ssl_certificate_key /etc/ssl/php7/2_php7.XXX.wang.key; 9 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; 10 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 11 ssl_prefer_server_ciphers on; 12 ssl_session_cache shared:SSL:10m; 13 ssl_session_timeout 10m; 14 error_page 497 https://$host$request_uri; 15 16 #SSL-END 17 #PHP-INFO-START PHP引用配置,可以注釋或修改 18 include enable-php-74.conf; 19 #PHP-INFO-END 20 21 #禁止訪問的文件或目錄 22 location / 23 { 24 index index.php index.html index.htm default.php default.htm default.html; 25 root /www/wwwroot/php7.isee.wang; 26 27 } 28 29 #一鍵申請SSL證書驗證目錄相關設置 30 location ~ \.well-known{ 31 allow all; 32 } 33 34 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 35 { 36 expires 30d; 37 error_log off; 38 access_log /dev/null; 39 } 40 location ~ .*\.(js|css)?$ 41 { 42 expires 12h; 43 error_log off; 44 access_log /dev/null; 45 } 46 access_log /www/wwwlogs/php7.isee.wang.log; 47 error_log /www/wwwlogs/php7.isee.wang.error.log; 48 } 49 #如果用戶使用的是http協議進行訪問,那么默認打開的端口是80端口,所以這里還需要做一個重定向 50 server{ 51 listen 80; 52 server_name php7.isee.wang; 53 #rewrite ^/(.*)$ https://php7.isee.wang:443/$1 permanent; 54 55 #把http的域名請求轉成https 56 return 301 https://$host$request_uri; 57 }
然后保存配置文件
檢驗配置文件:執行命令 nginx -t
說明:如果看到successful表示文件格式證書,這時候我們就可以啟動nginx服務或者重新加載nginx配置文件。
啟動nginx服務:執行命令 service nginx start
重新加載配置文件:執行命令 nginx -s reload
3、訪問
搞定!!!
參考鏈接:
https://cloud.tencent.com/document/product/400/4142
https://blog.csdn.net/baofeidyz/article/details/80435929