关于https:牛逼竟然用一个脚本就把系统升级到-https了还永久免费

160次阅读

共计 3012 个字符,预计需要花费 8 分钟才能阅读完成。

注释

当初很多站长都会思考将本人的站点从 http 降级到 https,不仅是基于平安的思考,有的也是因为第三方平台的限度,如谷歌浏览器会将 http 站点标记为不平安的站点,微信平台要求接入的微信小程序必须应用 https 等。

那如何将一个 http 站点降级为 https 站点呢?

http 与 https 的区别

为了数据传输的平安,https 在 http 的根底上退出了 ssl 协定,ssl 协定依附证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。要想将 http 降级为 https,只须要给 http 站点减少一个 CA 证书即可。

目前获取 CA 证书有两种路径:

  • 购买免费的 CA 证书
  • 获取收费的证书 免费的 CA 证书各大服务提供商都有卖,如阿里云、腾讯云等。 免费的证书不便宜,从阿里云官方网站看,它的价格能够从几千元到上万元不等。

这对于小公司平台,甚至是集体站点来说,是一个不小的开销。

Letsencrypt 是一个收费、自动化和凋谢的证书颁发机构,其颁发的证书一次有效期为三个月,然而只有能继续更新,根本能够永恒应用。

明天举荐的这个脚本 acme.sh,实现了 acme 协定, 能够帮你继续主动从 Letsencrypt 更新 CA 证书。下载地址如下:

https://github.com/Neilpang/acme.sh

装置 acme.sh

装置 acme.sh 很简略,一个命令即可:

curl 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

留神:无论是 apache 还是 nginx 模式,acme.sh 在实现验证之后,会复原到之前的状态,都不会擅自更改你自身的配置。益处是你不必放心配置被搞坏,但也有一个毛病,你须要本人配置 ssl 的配置,否则,只能胜利生成证书,你的网站还是无法访问 https。然而为了平安,你还是本人手动改配置吧。

如果你还没有运行任何 web 服务,80 端口是闲暇的, 那么 acme.sh 还能伪装本人是一个 webserver, 长期听在 80 端口,实现验证:

acme.sh --issue -d mydomain.com --standalone

2、dns 形式,在域名上增加一条 txt 解析记录,验证域名所有权。

这种形式的益处是,你不须要任何服务器,不须要任何公网 ip,只须要 dns 的解析记录即可实现验证。不过,害处是,如果不同时配置 Automatic DNS API,应用这种形式 acme.sh 将无奈自动更新证书,每次都须要手动再次从新解析验证域名所有权。

acme.sh --issue --dns -d mydomain.com

而后,acme.sh 会生成相应的解析记录显示进去,你只须要在你的域名治理面板中增加这条 txt 记录即可。

期待解析实现之后, 从新生成证书:

acme.sh --renew -d mydomain.com

留神:第二次这里用的是 –renew

dns 形式的真正弱小之处在于能够应用域名解析商提供的 api 主动增加 txt 记录实现验证。

acme.sh 目前反对 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的主动集成。

copy/ 装置 证书

后面证书生成当前,接下来须要把证书 copy 到真正须要用它的中央。

留神:默认生成的证书都放在装置目录下:~/.acme.sh/,请不要间接应用此目录下的文件。例如,不要间接让 nginx/apache 的配置文件应用这上面的文件。这外面的文件都是外部应用,而且目录构造可能会变动。

正确的应用办法是应用 –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。

Nginx 的配置 ssl_certificate 应用 /etc/nginx/ssl/fullchain.cer,而非 /etc/nginx/ssl/.cer,否则 SSL Labs 的测试会报 Chain issues Incomplete 谬误。

–installcert 命令能够携带很多参数,来指定指标文件。并且能够指定 reloadcmd, 当证书更新当前,reloadcmd 会被主动调用, 让服务器失效。

值得注意的是,这里指定的所有参数都会被自动记录下来,并在未来证书自动更新当前,被再次主动调用。

更新证书

目前证书在 60 天当前会自动更新,你无需任何操作。今后有可能会缩短这个工夫,不过都是主动的,你不必关怀。

更新 acme.sh

目前因为 acme 协定和 Letsencrypt CA 都在频繁的更新,因而 acme.sh 也常常更新以放弃同步。

降级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动降级, 能够开启主动降级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会主动放弃更新了。

你也能够随时敞开自动更新:

acme.sh --upgrade --auto-upgrade 0

出错怎么办:如果出错, 请增加 debug log:

acme.sh --issue ..... --debug
或者:acme.sh --issue ..... --debug 2

链接:https://www.toutiao.com/i6674…

正文完
 0