漂亮!竟然用一个脚本就把系统升级到https了,且永久免费!
点击上方“Github中文社区”,关注看遍Github好玩的项目第026期原创分享 作者:huber大家好,我是hub哥!今天来聊聊Https的采坑往事基于安全的考虑,每个开发者或多或少...
点击上方“Github中文社区”,关注
看遍Github好玩的项目
第026期原创分享 作者:huber
大家好,我是hub哥!今天来聊聊Https的采坑往事
基于安全的考虑,每个开发者或多或少都开发过Https的站点。但很不幸的是Hub哥还是一名编程新手的时候,入门Https,真的是绝望,起初浏览器一直提示服务拒载,等之后捣鼓通了接口,又提示证书过期,到底是为什么呢? 嗯,咱们今天就来扒扒真相
http与https的区别
http基于TCP/IP协议的一种传输协议,如果承载TSL/SSL协议层之上便就成为了https。为了数据传输的安全,https在http的基础上加入了TSL/SSL协议,TSL/SSL协议依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
如何将一个http升级为https?
要想将http升级为https,除了请求是用https域名, 还需要给http服务器增加一个CA证书。
获取CA证书有两种途径:
◎ 获取免费的证书
◎ 购买收费的CA证书
收费的CA证书各大服务提供商都有卖,如阿里云、华为云、腾讯云等。但是收费的证书不便宜,我看了下从阿里云官网看,它的价格可以从几千元-上万元不等。
这对于小的公司或者个人开发者来说,都是一笔不小的费用。今天Hub给大家推荐了一个免费的工具,看好了!
免费的Letsencrypt
Letsencrypt是一个免费、自动化和开放的证书颁发机构,它颁发的证书一次有效期为三个月,但需要开发者持续更新,基本可以永久使用,目前非常火,Github上的已经收获 star 18.4k,
其实就是一个脚本,该脚本是acme.sh,其实现了 acme 协议, 以从 letsencrypt 生成免费的证书,可持续自动从Letsencrypt更新证书
主要步骤如下
安装 acme.sh
生成证书
复制证书到服务
更新证书
更新 acme.sh
◆ 安装 acme.sh
安装acme.sh,操作很简单,执行终端命令即可:
curl https://get.acme.sh | sh
没有权限要求,普通用户和 root 用户都可以安装。
安装过程进行了以下几步:
1、把acme.sh安装到你的home目录下:
~/.acme.sh/
并创建 一个 bash 的 alias,方便你使用:alias acme.sh=~/.acme.sh/acme.sh
2、自动创建 cronjob,每天 0:00 点自动检测所有的证书。如果快过期了,需要更新,则会自动更新证书,安装过程不会侵入已有的系统任何功能和文件,所有的修改都限制在安装目录中:~/.acme.sh/
◆ 生成证书
acme.sh 实现了 acme 协议支持的所有验证协议, 一般有两种方式验证:http 和 dns 验证。
1、http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证,然后就可以生成证书了。
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
acme.sh 会全自动的生成验证文件, 并放到网站的根目录,然后自动完成验证。最后会聪明的删除验证文件,整个过程没有任何副作用。
如果你用的是apache服务器,acme.sh 还可以智能的从 apache的配置中自动完成验证,你不需要指定网站根目录:
acme.sh --issue -d mydomain.com --apache
如果你用的是nginx服务器,或者反代,acme.sh还可以智能的从 nginx的配置中自动完成验证,你不需要指定网站根目录:
acme.sh --issue -d mydomain.com --nginx
如果你还没有运行任何 web 服务,80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口,完成验证:
acme.sh --issue -d mydomain.com --standalone
2、dns 方式,在域名上添加一条 txt 解析记录,验证域名所有权
acme.sh --issue --dns -d mydomain.com
然后,acme.sh 会生成相应的解析记录显示出来,你只需要在你的域名管理面板中添加这条 txt 记录即可
等待解析完成之后, 重新生成证书:
acme.sh --renew -d mydomain.com
dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成
◆ 安装证书
前面证书生成以后,接下来需要把证书 copy 到真正需要用它的地方
正确的使用方法是使用 --installcert 命令,并指定目标位置,然后证书文件会被copy到相应的位置,例如:
acme.sh --installcert -d <domain>.com \
--key-file /etc/nginx/ssl/<domain>.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
一个小提醒,这里用的是 service nginx force-reload,不是 service nginx reload,据测试, reload并不会重新加载证书,所以用的 force-reload
◆ 更新证书
这个改工具的证书有一个更新时效,它会60 天以后会自动更新,但无需开发者做任何操作
◆ 更新脚本
由于 Letsencrypt CA和acme 协议都在频繁的更新,因此 acme.sh 也经常更新以保持同步
升级 acme.sh 到最新版 :
acme.sh --upgrade
最后
看了上面的证书骚操作,是不是非常简单?不但省事,还能给公司省下一笔费用,等着加薪吧!何乐而不为呢
传送门
https://github.com/acmesh-official/acme.sh
OK!到这就是这期分享
如果觉得文章有用,请点赞在看,分享。
历史原创
★ GitHub宣布已将所有代码永久封存于北极地底1000年!网友炸锅了:我写的bug终于能流传永世了!
★ 牛X,网易开源了这个项目后,结果被山寨出了无数个网易云音乐APP,网友炸锅了!
点个在看呗!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)