給自己的網站添加HTTPS / 優化 / 續約

寫在前面

  • 這裏面我主要是自己獨立的服務器添加HTTPS支持,關於對GitHub個人站點添加的以後再寫。
  • 我的筆記和操作使用的是免費的域名和免費的HTTPS證書,但是操作對於所有的來說都是一樣的。
  • 證書基於 TrustAsia, 別的都差不多的。
  • VPS 上用的LNMP建站。

用到的站點和準備工作

  • 服務器: 搬瓦工
  • 域名供應商:Freenom
  • HTTPS證書支持:FreeSSL.org
  • 各個網站的賬號和權限,域名解析這裏就不寫了,可以參考另一篇文章

操作步驟

  1. 首先一定要做的是給自己的網址進行解析好,也就是通過網址能夠直接訪問到網站 . 然後來到 FreeSSl 這個網站,網站操作很直白,首頁填入你自己的域名(一般都是自己擁有的頂級域名,類似於 fancyking.ml 這種,而不是二、三級域名,www可以在以後301重定向過來)。 TrustAsia提供的是雙域名支持, Let's Encrypt 提供的是多域名的支持,目前是最好申請V2 的多域名通配符版本。我這裏拿的是亞洲誠信。
  2. 之後,輸入郵箱,他會根據你的郵箱去給你證書,證書的生成參數沒有特殊需求的話用他的默認參數就行,有的話就按照需求。
  3. 他會讓你去證明網站的歸屬權,這裏我選擇的是DNS的驗證證書,所以我需要把DNS域名的解析加上一條TXT記錄,記錄的值他會給你,按照他說的配置好DNS那邊就好 (如果是國外的DNS解析,就像FreeNom,生效可能比較慢,這個一種方法就是使用其他的解析服務,比如說DNSPOD+或者CLOUDXNS或者其他的方法來加速解析生效,要不你就等一會兒,反正驗證失敗之後一天內也可以再次在訂單列表中驗證,但是注意儘量間隔10分鐘以上)
  4. 驗證成功之後你就會發現你可以下載證書文件(私鑰自己看着添加吧,我沒加)了,在訂單列表中,下載證書,應該會得到壓縮包:chain.zip . 第一次下載的包裏面會有兩個文件,一個 chain.pemprivate.key,(得到crt 文件的一樣,就是類型不同,其中 chain.pem 是我們的證書文件,它是一個包含中間證書的證書鏈文件。所以,當你的服務器需要三個文件時,你可以將 chain.pem 拆分爲兩個文件,比如 cert.pem(前部分) 和 ca.pem(後部分)。pem 是兼容 crt 的,也就是 pem 重命名就可以得到有效的 crt 文件) (注意的是,key 文件只有第一次下載的時候有!!!丟失了無法尋找,他網站那邊也不留下!!!) . 上傳證書文件到服務器,可以不是當前網站目錄,在VPS上就好。
  5. 按照站點建立方式的不同,使自己的站點證書指向爲當前服務器的絕對地址!下面按照我的LNMP給出。
  6. 一種是有了SSL證書再去建站,這個在LNMP上配置很簡單,因爲是引導式船創建站點,所以他會問你是不是要求支持SSL,這個時候,會有兩個選項,一個是自動去Let’s Encrypt 得到證書,這種就是傻瓜式的,輸入一個郵箱就好;另一種就是自己獲取的SSL證書,填入絕對路徑就好
  7. 另一種就是給現有的網站加入SSL,也很簡單,使用命令 lnmp ssl add 然後按照步驟操作就好了。安裝需要等一會兒。

強制使用HTTPS訪問

經過上面的配置,我發現通過HTTPS的域名訪問確實很正常, 但是一但輸入的是沒有加HTTPS的域名的話,還是不會驗證SSL證書,所以需要手動的強制都走 https 的域名訪問,方法301重定向如下:

  1. /usr/local/nginx/conf/vhost 目錄下,找到自己的站點配置文件 比如我的就是 fancyking.ml.conf . 然後在不是SSL的那個server(一般是第一個),裏面,加上一行,位置如圖片所示: 第七行的 return 301 https……

blob.jpg

關於網站 SSL 驗證更加嚴謹

  • 這裏主要是根據 MySSL 的評測進行的。如果僅僅經過上面的配置評測並不是 A+級別的,也不都是可信或者全綠,既然都上SSL了,那就把他弄的好點吧。

我的網站的評測信息 : HERF

  • 關於TSL協議版本

目前 PCIDSS已經將 TLSv1.0 判定爲不合規,所以爲了增加網站安全,適合行業標準,禁用 TLSv1.0協議,默認指定主流2.0協議,在 Nginx的conf文件 中加入下面的語句

ssl_protocols                TLSv1.1 TLSv1.2 TLSv1.3;

現在主流的瀏覽器都支持更高版本的TLS,具體業務不支持的可以在網站評測的客戶端握手模擬上看到

  • 開啓HSTS

HSTS是TLS的安全保護,保證在配置或者實現錯誤的情況下,網站仍然按照高安全性訪問,具體的功能和不足可以看維基百科
開啓HSTS的話,依然是在 conf 文件加入一句話,如下

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

上述語句加入生效後,用戶在訪問過一次網站接收到證書信息和響應頭之後,在接下來指定的時間(31536000即一年)中,用戶只能通過HTTPS訪問網站,比重定向更加安全,並且在指定時間內如果網站證書出了問題,用戶無法繞過瀏覽器警告去訪問網站

Let’s Encrypt證書續約

  • 我一開始申請證書的地方無法在不到期的情況下進行續約認證,所以這次學習了一下代碼續約,用到的是Certbot,項目在Github,幫助文檔在Docs
  • 安裝是交互式的,一般不會出大的問題,就簡單說幾種情況
    • 參數
      • run 獲取並安裝證書到當前的域名和網站目錄
      • certonly 獲取和續約證書,不進行安裝
      • renew 在證書未過期時,續約之前獲取的所有證書
      • -d 後面跟一個網址,每一個域名前面都必須有-d
      • –standlone 使用獨立的web server來驗證
    • 續約或者獲取過程有時會監聽80端口,如果一直出問題的話,先把Nginx關了試一下
    • 我最後使用的成功續約的命令如下
    ./certbot-auto certonly --renew-by-default --email my_email -d fancyking.ml -d www.fancyking.ml
    
    • 證書無論是通過Certbot還是在別的網站上獲取了,在Nginx的配置文件中指定SSL的證書公鑰私鑰存放地址即可,注意開放443,強行使用HTTPS看上面的操作,指定證書語句
    ssl_certificate /etc/letsencrypt/live/lfancyking.ml/fullchain.pem;
    

ssl_certificate_key /etc/letsencrypt/live/fancyking.ml/privkey.pem;
```

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章