免費為網站加上HTTPS

前言

最近有好幾位同學直接微信贊助說快點更新文章。這個要和大家說聲抱歉,的確很久沒有寫文章了。我們也不找借口,我會盡力保證多寫文章。今天我們的主題來講解 如何給自己的網站 加上HTTPS

HTTPS是什么?

相對于http,你會發現https 多了一個 S,沒錯這個S 表示的就是  Secure 安全的意思。為什么要加入這個? 主要是由于HTTP是明文傳輸的,如果被不法相關人截取了可以直接看到。并且在如今互聯網下面 很多人都非常在乎隱私,所以HTTPS已經是趨勢化的要求了。


HTTPS證書如何獲得?

我們所知道的這個東西是要收費的,目前很多云服務商打著第一年免費的噱頭和主機一起做活動(第二年就會收費的)。今天我們要來說的是如何免費獲取HTTPS證書。

 

免費的安全?

其實https證書基本上都是安全的,因為現在的加密算法基本已經很難破解。這里面主要關注點應該在于 瀏覽器是否可以顯示 綠標(或者安全鎖)


image.png


image.png



而這個安全鎖的顯示 是瀏覽器內置了很多 信譽比較好的 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

如下圖大家可以看看

image.png

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?


image.png

image.png


執行過程大概需要1 ~ 5分鐘,期間會在dnspod 自動通過api添加一條 txt記錄的


image.png


image.png

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;


效果展示

大家可以訪問 http://www.pontefm.com 看看效果的


image.png


可以看到上圖 我用綠色圈起來的地方就是 有效期 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;


大家對比下 就可以發現了。而具體原因還要分析下,肯定是缺少了中間證書導致的,后面我會發一篇文章專門來解答 每個證書到底是干什么的。

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>