标题之所以说快速,因为如果你手速快的话3分钟就能申请成功~
参考:https://github.com/Neilpang/acme.sh/wiki/说明
Let’s Encrypt是由Internet Security Research Group(ISRG)运行的非营利性证书颁发机构,可以免费提供用于TLS加密的X.509证书。证书有效期为90天,在此期间可以随时续订。这个组织由Mozilla基金会、Cisco、Facebook、Google Chrome等机构赞助,旨在推广HTTPS保证互联网安全。
要在网站上启用 HTTPS,需要从证书颁发机构(CA)获取一个证书,Let’s Encrypt就是一个免费CA证书颁发机构。
准备条件
- OS:Ubuntu / Debain,可以上网但无需公网IP。
- 拥有一个域名。
如果有兴趣可以参考Let’s Encrypt官网介绍自行申请证书,不过得益于 Github牛人Neilpang的工作,我们可以用他的脚本快速申请证书。他的脚本有多种方式申请证书,这里介绍其中比较简单的一种不需要公网IP,使用DNS的方式申请证书。
申请证书
1. 安装脚本
curl https://get.acme.sh | sh
source ~/.bashrc
下载执行此脚本会保存在~/.acme.sh/
目录下,并把脚本加入环境变量。
2. 申请证书
acme.sh --issue --dns -d 'www.sample.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please
这个步骤会生成一个DNS验证记录,类似如下所示
Domain: '_acme-challenge.www.sample.com' # 示例
TXT value: 'zeXfD67fYnOnd2YJFelum-41kOCVzWGEtxeAJ7SEy-w' # 示例
3. 添加域名解析
在域名管理界面,添加一条TXT记录,验证域名所有权,记录值就是上一步生成的TXT值。
4. 生成证书
acme.sh --renew -d 'www.sample.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please
添加完域名解析后,执行这一步,会在.acme.sh/
目录下生成域名对应的目录,里面有证书所需的各种信息,但是不要拿出来使用。
5. 取出证书
acme.sh --installcert -d 'www.sample.com' --key-file ./www.sample.key --fullchain-file ./cert/www.sample.com.cer
这一步能把上一步生成的证书所需的好几个文件合成证书。
此时目录下就有证书文件www.sample.com.cer
和私钥文件www.sample.key
,二者都是PEM纯文本格式,可以直接查看其内容。
注意
- 这里使用的是DNS解析的方法,无需公网IP的机器即可快速生成证书的方法,其他方法详见那个工程的GitHub介绍。
- 上述命令中
-d
参数指定域名,可以写一个具体域名,也可以使用通配符生成*.sample.com
通用证书。但是*.xx.com
证书不能用于xx.com
域名的网站。 - 证书的有效期是3个月,到期后需要手动再次申请。可以使用acme.sh项目介绍的自动续签的方式到期自动申请,好像需要有公网IP的机器。
- 验证:
cer
格式的证书在windows系统中可以直接点开查看内容。完整验证可以使用nginx搭一个服务器,没有公网IP的话可以使用修改hosts文件的方式使域名直接指向该服务器。
附:Nginx测试SSL证书
安装nginx
sudo apt-get install nginx
默认配置文件
/etc/nginx/sites-available/default
# http 跳转到 https
server {
listen 80;
server_name 域名;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
# listen 80 default_server;
# listen [::]:80 default_server;
# SSL configuration 使用HTTPS,否则就是80端口
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name 域名; # 需要处理的访问IP
ssl_certificate /home/xxx/xxx.crt; # 证书和秘钥
ssl_certificate_key /home/xxx/xxx.key;
...
}
}
启动
sudo nginx
停止
sudo pkill nginx