快速申请 Let's Encrypt 免费SSL证书 / CA证书

标题之所以说快速,因为如果你手速快的话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证书颁发机构。

准备条件

  1. OS:Ubuntu / Debain,可以上网但无需公网IP。
  2. 拥有一个域名。

如果有兴趣可以参考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纯文本格式,可以直接查看其内容。

注意

  1. 这里使用的是DNS解析的方法,无需公网IP的机器即可快速生成证书的方法,其他方法详见那个工程的GitHub介绍。
  2. 上述命令中-d参数指定域名,可以写一个具体域名,也可以使用通配符生成*.sample.com通用证书。但是 *.xx.com证书不能用于xx.com域名的网站。
  3. 证书的有效期是3个月,到期后需要手动再次申请。可以使用acme.sh项目介绍的自动续签的方式到期自动申请,好像需要有公网IP的机器。
  4. 验证: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

你可能感兴趣的:(杂七杂八)