隨著互聯(lián)網(wǎng)安全越來越被重視,幾乎所有的大網(wǎng)站都已經(jīng)默認(rèn)啟用了https協(xié)議,瀏覽器輸入http網(wǎng)址也會(huì)自動(dòng)跳轉(zhuǎn)到https,比如百度、騰訊、搜狗、谷歌等等。簡單來說就是https協(xié)議數(shù)據(jù)更加安全,只有收發(fā)雙方通過加密解密算法才能知道數(shù)據(jù),中間人攔截到的都是加密后的,沒有密鑰是無法解密的。
一個(gè)https的加密解密過程會(huì)用到兩種算法:
1,非對(duì)稱加密RSA:
私鑰加密,公鑰解密。公鑰加密,私鑰解密。就是說一共倆密鑰,收發(fā)雙方,各有一個(gè)。
非對(duì)稱加密可以加密的數(shù)據(jù)量比較小,用來把第二步要用到的對(duì)稱加密的密鑰進(jìn)行加密解密。
2,對(duì)稱加密:使用同一個(gè)密鑰,用來加密解密。通過第一步的公鑰,解出來對(duì)稱加密的密鑰,用這個(gè)密鑰對(duì)傳輸數(shù)據(jù)加密,服務(wù)器端解密。
現(xiàn)在微信小程序,IOS開發(fā)等很多地方都要求接口必須是https的。所以我整理一個(gè)免費(fèi)獲取https證書的步驟:
首先,你要有一個(gè)域名,域名現(xiàn)在也很便宜,有一個(gè)linux服務(wù)器。這些某某云都能買到。
linux以centos為例,其他的也都類似。安裝Nginx(這個(gè)不解釋,如果這個(gè)也不知道是啥,就肯定也不會(huì)去申請(qǐng)https)。
然后免費(fèi)https證書提供商最著名的https://letsencrypt.org/
點(diǎn)擊Get Started按鈕
看紅色框標(biāo)記處,這里會(huì)用到另外一個(gè)網(wǎng)站Certbot。
letsencrypt網(wǎng)站是提供https證書,certbot網(wǎng)站是提供一個(gè)自動(dòng)化工具,強(qiáng)烈推薦使用,這個(gè)工具可以自動(dòng)解析nginx配置文件,并把證書下載下來,然后自動(dòng)修改nginx配置文件里的https配置,最重要的是letsencrypt的免費(fèi)證書是3個(gè)月有效期,certbot工具可以到期幫你自己更新證書,免去了你自己忘了重新申請(qǐng)證書,造成https證書過期。
ssh到linux以后,執(zhí)行yum install certbot Python3-certbot-nginx,如果不是root用戶登錄,執(zhí)行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 {
}
}
然后執(zhí)行certbot --nginx,非root用戶執(zhí)行sudo certbot --nginx
按照步驟填寫郵箱,然后yes yes,就會(huì)自動(dòng)讀取你本地的nginx的配置了,會(huì)列出來本地的所有的nginx里配置的域名,然后根據(jù)自己的情況填寫域名序號(hào)就行了,比如我這個(gè)就填1就是第一條域名
稍等片刻,申請(qǐng)成功,密鑰文件的路徑都會(huì)在提示里顯示出來。
再次打開nginx的配置文件,發(fā)現(xiàn)里面的變化,主要是做了兩部分工作,第一把原來的域名改為了443端口,https,配置上證書路徑,第二部分,80端口監(jiān)聽自動(dòng)跳轉(zhuǎn)到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
}
執(zhí)行nginx -s reload,重新加載nginx配置文件。
輸入原來的http://www.***.com域名,自動(dòng)跳轉(zhuǎn)到https,并且旁邊提示一個(gè)小鎖,說明正常跳轉(zhuǎn)了https,大功告成!
查看證書信息,可看到證書有效期只有3個(gè)月。
下面我們看看怎么實(shí)現(xiàn)自動(dòng)更新證書,首先certbot renew命令是用來更新證書的,如下圖所示,命令會(huì)判斷當(dāng)前證書是否到期,如果沒到期是不會(huì)更新的,有了這個(gè)自動(dòng)判斷功能就好辦了。
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
執(zhí)行命令,稍微懂點(diǎn)python的都能看懂,這是做了一個(gè)定時(shí)任務(wù)的腳本,每天的0點(diǎn)和12點(diǎn)會(huì)運(yùn)行腳本,來執(zhí)行certbot renew來更新證書,一勞永逸了。
還有記得先看起系統(tǒng)的crond服務(wù)是否啟動(dòng)了。
systemctl status crond 查看定時(shí)服務(wù)狀態(tài)
systemctl start crond 啟動(dòng)服務(wù)
systemctl enabel crond 把定時(shí)服務(wù)添加到開機(jī)自啟動(dòng)
至此你已經(jīng)擁有了自己的永久免費(fèi)的https了。






