如何使用Let's Encrypt免費添加HTTPS

HTTPS需要什麼

https基於RSA非對稱加密演算法,客戶端利用公鑰加密數據(準確來說是會話key),服務端利用對應的私鑰來解密;由於公鑰的公開性,無法保證正確性,所以引入了第三方權威機構CA來簽發數字證書,數字證書中包含服務端的公鑰並和私鑰一起保存在服務端,客戶端必須從服務端獲取數字證書,然後從中取出公鑰。然而,CA給站點簽發數字證書通常都是收費的, 所以,支持HTTPS的站點,需要三個東西:數字證書、私鑰和money。

Lets Encrypt是什麼

簡單地說,Lets Encrypt是一個免費的CA,背後有Linux基金會和facebook等知名公司撐腰,目的是加速互聯網https化進程,所以大家快快用啊!於是,上面說的https需要的東西變成了兩個:數字證書、私鑰。下面就看看在服務端如何部署這兩樣東西,讓別人訪問我們的站點的時候也能顯示出高大上的綠框框。

Linux下Nginx服務端部署Https

確保系統安裝了python2.7以上的版本,因為Lets Encrypt程序基於python編寫。然後安裝pip,再通過pip安裝virtualenv。

$ python get-pip.py

$ pip install virtualenv

按照Lets Encrypt官方站點的How It Works指導安裝Lets Encrypt程序包,安裝過程中如果遇到一些錯誤或者警告,可能是上述的python環境配置不正確,需要優先確保python的配置正確性。官方指南有針對不同web server的plugin,不過這裡推薦standalone模式,與web server類型無關,更加通用。

$ git clone github.com/letsencrypt/

$ cd letsencrypt

$ ./letsencrypt-auto --help

$ ./letsencrypt-auto certonly --standalone -d yuanwhy.com

生成數字證書的過程中,會要求輸入郵箱,同時會檢驗該域名是否指向當前機器的ip,其實目的就是驗證你是不是該域名的真實所有者。成功之後,會出現Congratulations!,在/etc/letsencrypt目錄下生成一系列的文件,這裡我們只需要關心兩個東西:數字證書和私鑰文件,在/etc/letsencrypt/archive/yuanwhy.com/目錄下,fullchain1.pem就是數字證書,privkey1.pem 就是私鑰文件,可以用cat命令查看文件內容,都是標準的Base64編碼。修改nginx的配置文件,啟用ssl,指明數字證書和私鑰文件的地址即可,本站的配置如下

server {n listen 443 ssl;n server_name yuanwhy.com;nn ssl_certificate /etc/letsencrypt/archive/yuanwhy.com/fullchain1.pem;n ssl_certificate_key /etc/letsencrypt/archive/yuanwhy.com/privkey1.pem;nn ssl_session_cache shared:SSL:100m;n ssl_session_timeout 500m;nn ssl_ciphers HIGH:!aNULL:!MD5;n ssl_prefer_server_ciphers on;nn location / {n root /usr/share/nginx/yuanwhy.com/wordpress;n index index.php;n }nn location ~ .php {n root /usr/share/nginx/yuanwhy.com/wordpress;n fastcgi_index index.php;n fastcgi_pass 127.0.0.1:9000;n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;n include fastcgi_params;n }n}n

如果想強制http協議訪問跳轉到https,配置nginx轉發即可

server {n listen 80;n server_name yuanwhy.com;n return 301 https://$host$request_uri;n}n

推薦閱讀:

Nginx源碼中值得學習的編程風格有哪些?
有哪些知名網站Web伺服器是Nginx?
為什麼中國程序員對待外國人抱怨和對待國人抱怨採取截然不同的態度?
基於ReactRouter實現的SPA應用的Nginx配置
Linux多進程模型比多線程更容易實現熱部署嗎?

TAG:HTTPS | Let#x27sEncrypt | Nginx |