背景
最近在使用netlify
的静态网站托管服务, 如果需要自定义域名的话 需要提供https
证书, 如下图:
SSL证书介绍
是一种配置在服务器上的数字证书, 由可信的数字证书颁发机构(CA)颁发, 类似于我们的驾驶证, 它具有服务器身份验证和数据传输加密功能。
证书实际上就是几串字符密钥 以文本的形式存放在诸如.key
.cer
.csr
结尾的文件中:
文件介绍:
.key
文件: 证书私钥.cer
文件:certificate
的缩写,这就是数字证书.csr
文件:certificate signing request
的缩写 证书签名请求文件,含有公钥信息
这些文件需要存放在服务器中, 当浏览器通过域名对服务器进行访问时, 可获取服务器中的证书, 证书中含有公钥
那么浏览器和服务器 一个持有私钥一个持有公钥 进行加密会话 保证数据安全
自制SSL证书
既然所谓的证书就是RSA
密钥, 那我们自然可以自己生成, 比如:
但是这种自己颁发的证书是不被浏览器认可的, 就好比自己给自己手写一张驾驶证, 完全没有任何法律效力
因此我们只能向CA
机构申请证书, 国际知名的CA
机构有GeoTrust
、Comodo
、DigiCert
、Sectigo
、Thawte
、GlobalSign
、Symantec
、AlphaSSL
等
大部分都是收费的, 那么我们要用免费的话, 可以退而求其次,freessl
这个平台是个不错的选择
freessl.cn
该网站免费提供由Let's Encrypt
与 TrustAsia
两家CA
机构颁发的SSL
证书, 我们注册后即可免费申请, 但是证书有效期只有三个月, 到期后需要重新申请
为了解决自动续期的问题 我们需要用到一个工具, 那就是acme.sh
ACME.SH
acme.sh
是一个数字证书管理工具, 利用它我们可以:
- 辅助申请
SSL
证书文件到本地 - 内置定时程序 到期自动申请证书
- 安装证书到指定目录
工具使用
工具安装
1
2
3$ git clone https://github.com/acmesh-official/acme.sh.git
$ cd ./acme.sh
$ ./acme.sh --install -m my@example.com证书申请
1
acme.sh --issue -d 域名 -w 证书存放目录
acme.sh
默认会从zerossl获取证书,zerossl
和freessl.cn
一样, 也是一个证书中介网站 ,zerossl
提供由Let's Encrypt
颁发的数字证书, 每个注册账户可以申请三个免费证书但是 由于免费的数量有限 所以我们不选择从
zerossl
获取如果只是临时测试用的话 可以用一用 直接在官网申请并下载证书
zip
包即可:考虑到长期使用, 因此我们选择
freessl.cn
从
freessl.cn
获取证书freessl
支持acme
自动化在网站输入域名并且进行校验后会生成一个
acme
地址, 这个地址相当于账号凭证, 利用这个它我们可以借助acme.sh
快速获取证书:具体指令如下:
1
acme.sh --issue -d 域名 --dns dns_dp --server 你的acme地址
执行后自动将证书下载到本地:
最后我们将证书密钥拷贝至托管服务器中, 这里以
netlify
为例:填写完后点击安装, 证书成功识别
此时 我们即可通过自定义域名访问
netlify
中的静态网站了, 在浏览器中可以查看当前获取到的证书信息:
关于自动更新
通常我们会将acme.sh
安装至服务器中, 然后实现证书的自动更新, 由于我这边使用的是netlify
, 所以三个月到期后需要手动执行一下代码
更多关于acme.sh
自动化的用法, 可以参见《acme.sh证书自动部署教程》
其他可以获取免费SSL证书的网站
- OHTTPS: https://ohttps.com/
本文为作者原创转载时请注明出处 谢谢