Let's-Encrypt
為http站點添加https支持,需要從證書發行機構獲取SSL/TLS 證書。常見的免費證書有兩種:
- Let's-Encrypt,本文即將介紹,Let's-Encrypt大法好。
- caddy,原生支持 HTTP/2,自動創建 Let’s Encrypt 證書,非常簡單易用。
安裝
yum install epel-release -y
yum install certbot -y
配置
certbot certonly --webroot -w /www/html -d suncle.me -d www.suncle.me
--webroot
表示以webroot模式運行,此處我們不選擇standalone模式-w /www/html
表示站點根目錄在/www/html-d suncle.me -d www.suncle.me
表示為@主機和www主機生成共同的證書
按照提示操作成功后,提示:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/suncle.me/fullchain.pem. Your cert will
expire on 2017-06-28. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
證書自動更新
Let’s Encrypt 只有3個月的有效期,所以我們需要定時去更新證書。
可以通過運行:certbot renew --dry-run
來測試自動生成是否能夠正常運行。如果正確執行,我們就可以通過以下命令更新證書:
certbot renew
如果要達到自動更新證書,可以借助crontab
或者systemd
定時執行上面的更新命令。Let’s Encrypt官方建議一天更新兩次最好。因為證書沒有到期之前是不會更新,因此即使一天執行兩次也不會有什么影響。
# 每天3:00和19:00點更新證書
0 3,19 * * * certbot renew
具體執行時間可以參考以下crontab格式進行修改:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
配置Nginx SSL證書
修改/usr/local/nginx/nginx.conf文件如下(最好先備份)
# Nginx以root用戶啟動
user root;
# Nginx開啟的進程數
worker_processes 2;
events {
# Nginx連接的最大個數
worker_connections 65535;
}
http {
# 如果路徑中出現通配符,mime.types可配置多個文件
include mime.types;
# 默認文件類型
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 記錄訪問日志
access_log logs/access.log main;
# 開啟sendfile,提升文件傳輸效率
sendfile on;
# 死鏈判斷:客戶端連接保持活動的超時時間
keepalive_timeout 65;
#設置非安全連接永久跳轉到安全連接
server{
listen 80;
server_name www.suncle.me suncle.net blog.suncle.net;
#告訴瀏覽器有效期內只准用 https 訪問
add_header Strict-Transport-Security max-age=15768000;
#永久重定向到 https 站點
return 301 https://$server_name$request_uri;
}
server {
#啟用 https, 使用 http/2 協議, nginx 1.9.11 啟用 http/2 會有bug, 已在 1.9.12 版本中修復.
listen 443 ssl http2;
server_name www.suncle.me suncle.net blog.suncle.net;
#告訴瀏覽器當前頁面禁止被frame
add_header X-Frame-Options DENY;
#告訴瀏覽器不要猜測mime類型
add_header X-Content-Type-Options nosniff;
root /www/html;
#證書路徑
ssl_certificate /etc/letsencrypt/live/suncle.me/fullchain.pem;
#私鑰路徑
ssl_certificate_key /etc/letsencrypt/live/suncle.me/privkey.pem;
#安全鏈接可選的加密協議
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#可選的加密算法,順序很重要,越靠前的優先級越高.
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
#在 SSLv3 或 TLSv1 握手過程一般使用客戶端的首選算法,如果啟用下面的配置,則會使用服務器端的首選算法.
ssl_prefer_server_ciphers on;
#儲存SSL會話的緩存類型和大小
ssl_session_cache shared:SSL:10m;
#緩存有效期
ssl_session_timeout 60m;
}
}
以上配置文件nginx.conf中需要修改的字段主要有:
- server_name www.suncle.me suncle.net blog.suncle.net;
- ssl_certificate /etc/letsencrypt/live/suncle.me/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/suncle.me/privkey.pem;
listen 443 ssl http2;
這一句中,如果Nginx編譯安裝的時候沒有安裝ngx_http_v2_module
模塊,則需要先安裝。或者不采用http2協議,直接listen 443 ssl
即可
保存配置,檢查是否報錯,重啟Nginx
/usr/local/nginx/nginx -t
/usr/local/nginx/nginx -s reload
Nginx 的 SSL 證書到此配置完成。
參考
記得幫我點贊哦!
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你需要的學習資料,還在等什么?快去關注下載吧!!!
念念不忘,必有回響,小伙伴們幫我點個贊吧,非常感謝。
我是職場亮哥,YY高級軟件工程師、四年工作經驗,拒絕咸魚爭當龍頭的斜杠程序員。
聽我說,進步多,程序人生一把梭
如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激。
職場亮哥文章列表:更多文章
本人所有文章、回答都與版權保護平台有合作,著作權歸職場亮哥所有,未經授權,轉載必究!