Frenlee

申请免费的https证书--从Let's Encrypt中

概述

从2017年开始苹果开发中强制使用https的链接了,而且从目前形势来看https的阵容越来越来,在网上找了很多申请https的证书的方式,很大部分是需要费用的,看到了一个Let’s Encrypt 中申请是不需要费用的,不过它的证书有效期只有90天,不过可喜的是它可以通过脚本来进行自动跟新.

安装过程

安装过程是使用的dehydrated 安装的步骤如下:

1.下载执行脚本

1
2
3
4
mkdir /etc/dehydrated
cd /etc/dehydrated/
curl -LO https://raw.githubusercontent.com/lukas2511/dehydrated/master/dehydrated
chmod 755 dehydrated

2.创建配置文件以及建立验证过程中所需要的目录

1
2
3
#在 /etc/dehydrated 目录下
mkdir -p /var/www/dehydrated
echo "WELLKNOWN=/var/www/dehydrated" > /etc/dehydrated/config

3.修改nginx 或者 Apache 服务器配置

在你需要https 的域名的服务器配置中修改,配置好后你可以再/var/www/deydrated/这个目录下添加一个文件,然后通过域名访问,验证下是否可以访问,不可访问时将在后续生成证书会失败!

  • nginx
1
2
3
location /.well-known/acme-challenge/ {
alias /var/www/dehydrated/;
}
  • Apache
1
Alias /.well-known/acme-challenge/ /var/www/dehydrated/

配置好后重启或者reload 服务器配置文件

4.生成SSL certificate 证书

1
/etc/dehydrated/dehyrated -c -d your.domain.com
  • 成功时响应为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ /etc/dehydrated/dehydrated -c -d your.domain.com
# INFO: Using main config file /etc/dehydrated/config
Processing www.qicheng51.com
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting challenge for www.qicheng51.com...
+ Responding to challenge for www.qicheng51.com...
+ Challenge is valid!
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!

成功后会在/etc/dehydrated/certs 目录下有个your.domain.com 的文件夹,文件夹中有你需要的证书

1
2
fullchain.pem
privkey.pem

5.配置https服务器解析

这里只写下nginx 的配置,相对80的配置而言,需要修改下监听端口,然后加入下面的配置<Apache的配置问题请自行解决>

1
2
3
4
5
6
7
8
listen 443;
ssl on;
ssl_certificate /etc/dehydrated/certs/your.domain.com/fullchain.pem;
ssl_certificate_key /etc/dehydrated/certs/your.domain.com/privkey.pem;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;

6.重启服务器

你就可以通过https 访问你的域名了

7.加入定时器自动更新证书

1
2
# crontab -e
0 0 * * * root sleep $(expr $(printf "\%d" "0x$(hostname | md5sum | cut -c 1-8)") \% 86400); ( /etc/dehydrated/dehydrated -c -d your.domain.com; /usr/sbin/service nginx reload ) > /tmp/your.domain.log 2>&1

nginx 重新获取配置文件/usr/sbin/service nginx reload根据自己的实际情况进行修改,sleep 是使命令随机睡眠一段时间,避免let’s encrypt服务器在0点时压力过大,还有就是dehydrated会自己判断是否快过期,快过期是不会renew证书的,所以定时器每天一次是没问题的.(命令中\%是cron 中%需要转义)