随着互联网安全越来越被重视,几乎所有的大网站都已经默认启用了https协议,浏览器输入http网址也会自动跳转到https,比如百度、腾讯、搜狗、谷歌等等。简单来说就是https协议数据更加安全,只有收发双方通过加密解密算法才能知道数据,中间人拦截到的都是加密后的,没有密钥是无法解密的。
一个https的加密解密过程会用到两种算法:
1,非对称加密RSA:
私钥加密,公钥解密。公钥加密,私钥解密。就是说一共俩密钥,收发双方,各有一个。
非对称加密可以加密的数据量比较小,用来把第二步要用到的对称加密的密钥进行加密解密。
2,对称加密:使用同一个密钥,用来加密解密。通过第一步的公钥,解出来对称加密的密钥,用这个密钥对传输数据加密,服务器端解密。
现在微信小程序,IOS开发等很多地方都要求接口必须是https的。所以我整理一个免费获取https证书的步骤:
首先,你要有一个域名,域名现在也很便宜,有一个linux服务器。这些某某云都能买到。
linux以centos为例,其他的也都类似。安装nginx(这个不解释,如果这个也不知道是啥,就肯定也不会去申请https)。
然后免费https证书提供商最著名的https://letsencrypt.org/
点击GetStarted按钮
看红色框标记处,这里会用到另外一个网站Certbot。
letsencrypt网站是提供https证书,certbot网站是提供一个自动化工具,强烈推荐使用,这个工具可以自动解析nginx配置文件,并把证书下载下来,然后自动修改nginx配置文件里的https配置,最重要的是letsencrypt的免费证书是3个月有效期,certbot工具可以到期帮你自己更新证书,免去了你自己忘了重新申请证书,造成https证书过期。
ssh到linux以后,执行yuminstallcertbotpython3-certbot-nginx,如果不是root用户登录,执行sudoyuminstallcertbotpython3-certbot-nginx。如果是python版本很低,或者yum库里的cerbot版本是基于python2的,那么certbot的nginx插件是python2的命令就改为yuminstallcertbotpython2-certbot-nginx即可
在nginx中配置好域名
server{listen80;server_namewww.*****.com;#自己的域名root/usr/share/nginx/html;include/etc/nginx/default.d/*.conf;location/{}error_page404/404.html;location=/40x.html{}error_page500502503504/50x.html;location=/50x.html{}}
然后执行certbot--nginx,非root用户执行sudocertbot--nginx
按照步骤填写邮箱,然后yesyes,就会自动读取你本地的nginx的配置了,会列出来本地的所有的nginx里配置的域名,然后根据自己的情况填写域名序号就行了,比如我这个就填1就是第一条域名
稍等片刻,申请成功,密钥文件的路径都会在提示里显示出来。
再次打开nginx的配置文件,发现里面的变化,主要是做了两部分工作,第一把原来的域名改为了443端口,https,配置上证书路径,第二部分,80端口监听自动跳转到https
server{server_namewww.***.com;root/usr/share/nginx/html;#Loadconfigurationfilesforthedefaultserverblock.include/etc/nginx/default.d/*.conf;location/{}error_page404/404.html;location=/40x.html{}error_page500502503504/50x.html;location=/50x.html{}listen443ssl;#managedbyCertbotssl_certificate/etc/letsencrypt/live/xiaochengxu.txcf77.com/fullchain.pem;#managedbyCertbotssl_certificate_key/etc/letsencrypt/live/xiaochengxu.txcf77.com/privkey.pem;#managedbyCertbotinclude/etc/letsencrypt/options-ssl-nginx.conf;#managedbyCertbotssl_dhparam/etc/letsencrypt/ssl-dhparams.pem;#managedbyCertbot}server{if($host=www.***.com){return301https://$host$request_uri;}#managedbyCertbotlisten80;server_namexiaochengxu.txcf77.com;return404;#managedbyCertbot}
执行nginx-sreload,重新加载nginx配置文件。
输入原来的http://www.***.com域名,自动跳转到https,并且旁边提示一个小锁,说明正常跳转了https,大功告成!
查看证书信息,可看到证书有效期只有3个月。
下面我们看看怎么实现自动更新证书,首先certbotrenew命令是用来更新证书的,如下图所示,命令会判断当前证书是否到期,如果没到期是不会更新的,有了这个自动判断功能就好办了。
echo"00,12***rootpython3-c'importrandom;importtime;time.sleep(random.random()*3600)'&&certbotrenew-q"|sudotee-a/etc/crontab>/dev/null
执行命令,稍微懂点python的都能看懂,这是做了一个定时任务的脚本,每天的0点和12点会运行脚本,来执行certbotrenew来更新证书,一劳永逸了。
还有记得先看起系统的crond服务是否启动了。
systemctlstatuscrond查看定时服务状态
systemctlstartcrond启动服务
systemctlenabelcrond把定时服务添加到开机自启动
至此你已经拥有了自己的永久免费的https了。