隨著互聯網安全越來越被重視,幾乎所有的大網站都已經默認啟用了https協議,瀏覽器輸入http網址也會自動跳轉到https,比如百度、騰訊、搜狗、谷歌等等。簡單來說就是https協議數據更加安全,只有收發雙方通過加密解密算法才能知道數據,中間人攔截到的都是加密后的,沒有密鑰是無法解密的。
一個https的加密解密過程會用到兩種算法:
1,非對稱加密RSA:
私鑰加密,公鑰解密。公鑰加密,私鑰解密。就是說一共倆密鑰,收發雙方,各有一個。
非對稱加密可以加密的數據量比較小,用來把第二步要用到的對稱加密的密鑰進行加密解密。
2,對稱加密:使用同一個密鑰,用來加密解密。通過第一步的公鑰,解出來對稱加密的密鑰,用這個密鑰對傳輸數據加密,服務器端解密。
現在微信小程序,IOS開發等很多地方都要求接口必須是https的。所以我整理一個免費獲取https證書的步驟:
首先,你要有一個域名,域名現在也很便宜,有一個linux服務器。這些某某云都能買到。
linux以centos為例,其他的也都類似。安裝Nginx(這個不解釋,如果這個也不知道是啥,就肯定也不會去申請https)。
然后免費https證書提供商最著名的https://letsencrypt.org/
點擊Get Started按鈕
看紅色框標記處,這里會用到另外一個網站Certbot。
letsencrypt網站是提供https證書,certbot網站是提供一個自動化工具,強烈推薦使用,這個工具可以自動解析nginx配置文件,并把證書下載下來,然后自動修改nginx配置文件里的https配置,最重要的是letsencrypt的免費證書是3個月有效期,certbot工具可以到期幫你自己更新證書,免去了你自己忘了重新申請證書,造成https證書過期。
ssh到linux以后,執行yum install certbot Python3-certbot-nginx,如果不是root用戶登錄,執行sudo yum install certbot python3-certbot-nginx。如果是python版本很低,或者yum庫里的cerbot版本是基于python2的,那么certbot的nginx插件是python2的命令就改為yum install certbot python2-certbot-nginx即可
在nginx中配置好域名
server {
listen 80;
server_name www.*****.com; #自己的域名
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
然后執行certbot --nginx,非root用戶執行sudo certbot --nginx
按照步驟填寫郵箱,然后yes yes,就會自動讀取你本地的nginx的配置了,會列出來本地的所有的nginx里配置的域名,然后根據自己的情況填寫域名序號就行了,比如我這個就填1就是第一條域名
稍等片刻,申請成功,密鑰文件的路徑都會在提示里顯示出來。
再次打開nginx的配置文件,發現里面的變化,主要是做了兩部分工作,第一把原來的域名改為了443端口,https,配置上證書路徑,第二部分,80端口監聽自動跳轉到https
server {
server_name www.***.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/xiaochengxu.txcf77.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/xiaochengxu.txcf77.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.***.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name xiaochengxu.txcf77.com;
return 404; # managed by Certbot
}
執行nginx -s reload,重新加載nginx配置文件。
輸入原來的http://www.***.com域名,自動跳轉到https,并且旁邊提示一個小鎖,說明正常跳轉了https,大功告成!
查看證書信息,可看到證書有效期只有3個月。
下面我們看看怎么實現自動更新證書,首先certbot renew命令是用來更新證書的,如下圖所示,命令會判斷當前證書是否到期,如果沒到期是不會更新的,有了這個自動判斷功能就好辦了。
echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
執行命令,稍微懂點python的都能看懂,這是做了一個定時任務的腳本,每天的0點和12點會運行腳本,來執行certbot renew來更新證書,一勞永逸了。
還有記得先看起系統的crond服務是否啟動了。
systemctl status crond 查看定時服務狀態
systemctl start crond 啟動服務
systemctl enabel crond 把定時服務添加到開機自啟動
至此你已經擁有了自己的永久免費的https了。