现在许多站长都市思量将自己的站点从http升级到https,不仅是基于平安的思量,有的也是由于第三方平台的限制,如谷歌浏览器会将http站点标记为不平安的站点,微信平台要求接入的微信小程序必须使用https等。

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

http与https的区别

为了数据传输的平安,https在http的基础上加入了ssl协议,ssl协议依赖证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。要想将http升级为https,只需要给http站点增添一个CA证书即可。

现在获取CA证书有两种途径:

  1. 购置收费的CA证书

  2. 获取免费的证书

收费的CA证书各大服务提供商都有卖,如阿里云、腾讯云等。

收费的证书不廉价,从阿里云官方网站看,它的价钱可以从几千元到上万元不等。

这对于小公司平台,甚至是小我私家站点来说,是一个不小的开支。

Letsencrypt是一个免费、自动化和开放的证书发表机构,其发表的证书一次有效期为三个月,然则只要能连续更新,基本可以永远使用。

今天推荐的这个剧本acme.sh,实现了 acme 协议, 可以帮你连续自动从Letsencrypt更新CA证书。下载地址如下:

https://github.com/Neilpang/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

注重:无论是 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/<domain>.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

6. 失足怎么办:

若是失足, 请添加 debug log:

acme.sh --issue ..... --debug

或者:

acme.sh --issue ..... --debug 2

最后,本文并非完全的使用说明,另有许多高级的功效,更高级的用法请参看其他 wiki 页面。