使用acme申请https证书
随着互联网的飞速发展,http这种明文传输协议已经越来越无法满足建站的需求,因此当今绝大多数网站都已经切换到了https。虽然https协议使用TLS加密极大地提高了传输安全性,但也带来了更大的部署难度,首当其冲的就是TLS证书申请,本文将介绍如何使用acme免费申请一个供个人使用的证书。
准备工作
虽然说是免费申请,但我们还是需要一些前置条件,其中最重要的就是
- 一个域名。
- 一个公网IP(v4或者v6都可以)。
此外,还需要一个Linux环境来执行acme程序。
安装acme
证书申请的原理就是向一些证书发行组织,如letsencrypt、zerossl等,发送域名和服务器等信息,如果信息校验成功,这些组织就会给我们颁发TLS证书。
由于与证书颁发服务器之间的通信协议较为繁琐,我们需要使用程序来完成这一系列操作,而acme就是用来完成这项工作的脚本程序。
根据使用系统环境的不同,acme的安装方式也不尽相同。
标准发行版
如Ubuntu、Debian、CentOS等。
在线安装
1 | curl https://get.acme.sh | sh -s email=my@example.com |
离线安装
1 | git clone https://github.com/acmesh-official/acme.sh.git |
申请的证书保存在~/.acme.sh/$domain
中。
OpenWRT
安装以下包
1 | luci-app-acme |
申请的证书保存在/etc/acme/$domain
中。
证书申请
根据网站部署方式的不同,使用acme申请证书的方式也不相同。
使用DNS API申请证书
要使用DNS API,通常都需要获取一个API Key。acme要求我们在使用DNS API之前设置相关环境变量。
设置环境变量
Cloudflare
打开https://dash.cloudflare.com/profile/api-tokens,查看Global API Key
,并设置以下环境变量。
1 | export CF_Key="" |
Dynv6
打开https://dynv6.com/keys/token/new,创建一个新的HTTP Token。
创建本地ssh公私钥,并将公钥~/.ssh/id_ed25519.pub
上传到https://dynv6.com/keys中的SSH Public Keys
。
1 | ssh-keygen -t ed25519 |
设置环境变量
1 | export KEY="~/.ssh/id_ed25519.pub" |
申请证书
标准发行版
执行以下脚本之前,相关的环境变量必须已经设置好。
域名可以填入多个,用空格分隔,这样多个域名可以共享同一个证书。
1 | !/bin/bash |
OpenWRT
打开服务 > ACME证书
。
在域名
这一项里面添加所需的域名,在DNS API
这一项里面填入环境变量$DNS_API
的值,最后分别将其它环境变量填入DNS API 凭证
中。
证书使用
为了确保证书的最佳兼容性,证书文件使用fullchain.cer
,而密钥文件使用$domain.key