這是堅持技術寫做計劃(含翻譯)的第四篇,定個小目標999,每週最少2篇。php
過去幾年中,咱們一直主張站點採用 HTTPS,以提高其安全性。去年的時候,咱們還經過將更大的 HTTP 頁面標記爲‘不安全’以幫助用戶。 不過從 2018 年 7 月開始,隨着 Chrome 68 的發佈,瀏覽器會將全部 HTTP 網站標記爲‘不安全’。 引用自 chrome 68 發佈說明html
得益於Google等大廠的消滅HTTP運動和Let's Encrypt 非盈利組織的努力,愈來愈多的站點開始遷移到HTTPS,下圖是Let's Encrypt的統計數據
前端
部署 HTTPS 網站的時候須要證書,證書由 CA 機構簽發,大部分傳統 CA 機構簽發證書是須要收費的,這不利於推進 HTTPS 協議的使用。nginx
Let's Encrypt是一個國外的非盈利的CA證書機構,旨在以自動化流程消除手動建立和安裝證書的複雜流程,並推廣使萬維網服務器的加密鏈接無所不在,爲安全網站提供免費的SSL/TLS證書。git
由Linux基金會託管,許多國內外互聯網大廠都對其進行贊助,目前主流瀏覽器均已信任Let's Encrypt發放的證書。程序員
注意,Let's Encrypt頒發的都是DV證書,不提供OV,EV證書。github
本文主要講解 如何使用Let's Encrypt頒發通配符證書。chrome
通配符SSL證書旨在保護主域名以及旗下不限數量的子域,即用戶可經過單個通配符SSL證書可保護任意數量的子域。若是用戶擁有多個子域名平臺,可經過通配符SSL證書保護這些子域名。api
可是目前Let's Encrypt 只支持同級子域名通配符。例如 *.demo.com
只支持 xx.demo.com
這種的,而不支持 xx.xx.demo.com
,而要支持二級通配符,須要再次頒發二級通配符證書 相似 *.demo.demo.com
,注意,這種的二級通配符,要求,一級域名是固定的,意即,不支持 *.*.demo.com
瀏覽器
官方建議使用Certbot ,可是很長一段時期Certbot不支持通配符(如今已經支持),並且對於證書自動續期支持的也很差。而且操做時也挺麻煩。
$ curl https://get.acme.sh | sh
# 或者
$ wget -O - https://get.acme.sh | sh
# 或者
$ git clone https://github.com/Neilpang/acme.sh.git
$ ./acme.sh/acme.sh --install
複製代碼
acme.sh 功能很強大,此處只介紹使用Dns Api 自動化頒發通配符證書. 目前支持包含阿里和DNSPod在內的60家dns服務商(參見 Currently acme.sh supports)
若是你的DNS服務商不提供API或者acme.sh暫未支持,或者處於安全方面的考慮,不想將重要的域名的API權限暴露給 acme.sh,能夠申請一個測試域名,而後在重要域名上設置CNAME(參見 DNS alias mode)
假設您的域名在DNSPod託管,登錄DNSPod後臺,依次打開 用戶中心->安全設置-> API Token->查看->建立API Token-> 輸入任意token名稱->肯定-> 保存ID和Token值(圖中打碼部分)
$ export DP_Id="你的ID"
$ export DP_Key="你的Token"
$ acme.sh --issue --dns dns_dp -d example.com -d *.example.com
# 若是 使用了DNS別名,還須要增長 --challenge-alias 別名域名 參數
# 爲了防止dns不生效,腳本會暫停2分鐘,並倒計時(Sleep 120 seconds for the txt records to take effect),等待便可
# 若是成功會出現 Cert success. 字樣
# 不建議直接用~/.acme.sh 下的證書,參考 https://github.com/Neilpang/acme.sh/wiki/說明#3-copy安裝-證書
# 須要使用 --installcert 複製到指定目錄
$ acme.sh --installcert \
-d example.com -d *.example.com \
--key-file /etc/letsencrypt/live/example.com/privkey.pem \
--fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem \
--reloadcmd "service nginx reload"
複製代碼
本文以 Mozilla SSL Configuration Generator 生成的nginx爲例,一樣也能夠生成Apache和IIS
server {
listen 80 default_server;
listen [::]:80 default_server;
# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
# openssl dhparam -out /etc/letsencrypt/live/example.com/ 2048
ssl_dhparam /etc/letsencrypt/live/example.com/dhparam.pem;
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
## verify chain of trust of OCSP response using Root CA and Intermediate certs
# ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver <IP DNS resolver>;
....
}
複製代碼
訪問 www.ssllabs.com/ssltest/ 提交本身域名,進行評分
山東濟南的小夥伴歡迎投簡歷啊 加入咱們 , 一塊兒搞事情。
長期招聘,Java程序員,大數據工程師,運維工程師,前端工程師。