前言
最近有好幾位同學直接微信贊助說快點更新文章。這個要和大家說聲抱歉,的確很久沒有寫文章了。我們也不找借口,我會盡力保證多寫文章。今天我們的主題來講解 如何給自己的網站 加上HTTPS
HTTPS是什么?
相對於http,你會發現https 多了一個 S,沒錯這個S 表示的就是 Secure 安全的意思。為什么要加入這個? 主要是由於HTTP是明文傳輸的,如果被不法相關人截取了可以直接看到。並且在如今互聯網下面 很多人都非常在乎隱私,所以HTTPS已經是趨勢化的要求了。
HTTPS證書如何獲得?
我們所知道的這個東西是要收費的,目前很多雲服務商打着第一年免費的噱頭和主機一起做活動(第二年就會收費的)。今天我們要來說的是如何免費獲取HTTPS證書。
免費的安全?
其實https證書基本上都是安全的,因為現在的加密算法基本已經很難破解。這里面主要關注點應該在於 瀏覽器是否可以顯示 綠標(或者安全鎖)
而這個安全鎖的顯示 是瀏覽器內置了很多 信譽比較好的 SSL證書機構,這些機構頒發的SSL證書 瀏覽器認為是安全的 就會顯示這個 安全鎖。
而我們要說的這個免費的SSL證書頒發機構就是被瀏覽器認為安全的機構,所以不一定是免費的就一定不安全。
letsencrypt
letsencrypt 就是我們要說的免費SSL證書頒發商。我個人在很多地方都用這家免費的,唯一的缺點就是每3個月證書就過期,就需要重新簽。3個月主要就是為了安全。而關於如何獲取的 letsencrypt 很多大神都寫了很多腳本,讓我們可以傻瓜式的獲取的。這里面非常出名的就是 ACME:
https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E 。
接下來我們就按照 官方的文檔說法,來給我的 個人博客 添加 https證書。我這里所用的環境是linux ubuntu。
Step1:安裝 acme.sh 腳本
#安裝很簡單,大家看我上面的鏈接文檔就可以很清楚,我這里再給大家照本宣科下 #執行了如下命令之后 會在 ~/.acme.sh/ 進行安裝,並且會自動創建 alias acme.sh=~/.acme.sh/acme.sh 和 crontab curl https://get.acme.sh | sh
如下圖大家可以看看
Step2:生成證書
我這里直說一個方式,暴力簡單方便 可以支持泛域名。由於我們說的這個大神腳本 指定 dnsapi,並且我也建議大家將域名解析放在dnspod 非常方便。
如下命令非常簡單
export DP_Id="1234" export DP_Key="sADDsdasdgdsf" acme.sh --issue --dns dns_dp -d *.54php.cn --debug
如何獲取 DP_ID 和 DP_Key?
執行過程大概需要1 ~ 5分鍾,期間會在dnspod 自動通過api添加一條 txt記錄的
Step3:nginx 配置證書
核心配置如下,其中里面的 ssl_certificate 和 ssl_certificate_key 可以看到就是我們上面截圖的東西。配置好了就reload nginx 就好了
listen 443 ssl; ssl_certificate /home/ubuntu/.acme.sh/*.54php.cn/fullchain.cer; ssl_certificate_key /home/ubuntu/.acme.sh/*.54php.cn/*.54php.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m;
效果展示
大家可以訪問 https://www.54php.cn 看看效果的
可以看到上圖 我用綠色圈起來的地方就是 有效期 3月26日 到 6月24日。有同學可能發現 哎 為什么你的瀏覽器里面沒有 安全鎖,是因為我剛開始寫博客的時候 很多圖片用的就是http ,而如果在https 中混合使用 http 就會出現混合情況,就不會顯示 安全鎖。
注意事項
No1:網站要同時支持https和http ,nginx配置要當心
listen 443 ssl; ssl on;
主要區別就是上面的,如果配置了 ssl on 那么就會強制走https協議。所以一般我們是使用最上面第一行代碼
No2:微信小程序出現 request:fail ssl hand shake error
在我們使用acme.sh 生產了很多 證書文件 如果你使用如下配置就會不對(android 測試機器已經發現問題) ssl_certificate /home/ubuntu/.acme.sh/*.54php.cn/*.54php.cn.cer; ssl_certificate_key /home/ubuntu/.acme.sh/*.54php.cn/*.54php.cn.key; 正確的是應該是 ssl_certificate /home/ubuntu/.acme.sh/*.54php.cn/fullchain.cer; ssl_certificate_key /home/ubuntu/.acme.sh/*.54php.cn/*.54php.cn.key;
大家對比下 就可以發現了。而具體原因還要分析下,肯定是缺少了中間證書導致的,后面我會發一篇文章專門來解答 每個證書到底是干什么的。
原文地址: 免費為網站加上HTTPS
標簽: https 免費 acme http 54php ssl