【泛域名】使用Let's Encrypt免费签发个人或企业网站泛域名证书

【泛域名】使用Let's Encrypt免费签发个人或企业网站泛域名证书

Let’s Encrypt 是一个免费,自动化和开放的证书颁发机构。官方已经支持免费签发通配符域名证书,即泛域名证书,俗称野卡。签发步骤简单快捷,几行命令即可实现免费自动签发。

前提,先启动nginx

安装acme.sh

1
curl https://get.acme.sh | sh

可选择在.bashrc或者是如果zsh使用者可以使用.zshrc添加对用映射:alias acme.sh=~/.acme.sh/acme.sh

获取DNS api

acme.sh支持cloudflare,dnspod,aliyun,GoDaddy,CloudXNS等大约80余种DNS解析商。详情可看dnsapi。这里一腾讯云为介绍,阿里云也一样。首先去腾讯云dnspod官网获取dns的DP_Id和DP_Key,腾讯云因为是使用的dnspod,所以需要去这个的官网申请。请注意,key只能查看一次,需记住!不过可以再次申请,忘记了也没多大问题。获取到了这两者后,回到服务器进行如下操作,添加至环境变量中:

1
2
export DP_Id="89XXXX"
export DP_Key="71943XXXXXXXXXXXXXXXXXXXXXXXX"

DNS api主要四用于后期修改dns解析验证此域名和服务器都是你自己的,相当于一个验证授权信息的玩意儿。

签发证书

接下来,当将dns api添加到环境变量中后,便要开始签发证书了,这一步也很简单的,别慌。
此处依旧使用腾讯云作示例:
acme.sh –issue –dns dns_dp -d vadxq.com -d .vadxq.com
其中,–dns表示通过dns方式签发,其实还可以http验证,不过这个不利于后期的自动更新,由于Let’s Encrypt签发的证书只有三个月有效期,所以此方法此处略过。
-d后面跟着域名,dns_dp是指dnspod,不同的域名解析商,此段不一样,具体看上一步的dnsapi。泛域名最好使用vadxq.com和
.vadxq.com两者结合,当然也可以只*.vadxq.com。目前两者都玩过,还没细究有何区别。
在这一步,acme.sh会自动在dns添加dns记录验证域名所有权。

copy/安装证书

证书生成后, 需要把证书 copy 到真正需要用它的地方。注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件。
正确的使用方法是使用 –installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,。
你可以在nginx目录建一个专门存放证书的目录:

1
2
3
4
sudo ~/.acme.sh/acme.sh --installcert -d vadxq.com \
--key-file /etc/nginx/ssl/vadxq.com/vadxq.key \
--fullchain-file /etc/nginx/ssl/vadxq.com/fullchain.cer \
--reloadcmd "service nginx force-reload"

–reloadcmd:配置nginx重启命令。在这一步,acme.sh会记住操作命令,在证书快过期的时候,自动续期。需要将nginx指向复制后的目录。

至此,你的免费自动签发泛域名证书的步骤就完成了,打开你的页面查看是不是生效啦。

nginx配置文件参考

示例ssl配置文件vadxq.com.ssl.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ssl on;
server_tokens off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_prefer_server_ciphers on;
# 证书路径 绝对地址
ssl_certificate /etc/nginx/ssl/vadxq.com/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/vadxq.com/vadxq.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA3 84:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
#add_header Strict-Transport-Security "max-age=31536000;includeSubDomains;preload";
#add_header X-Frame-Options deny;
add_header X-Content-Type-Options nosniff;
add_header x-xss-protection "1; mode=block";
#add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https:; connect-src 'self' https:; img-src 'self' data: https: blob:; style-src 'unsafe-inline' https:; font-src https:";

在需要引入SSL证书的nginx的server引入此文件即可

示例:blog.vadxq.com.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
server {
server_name blog.vadxq.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:7191;
proxy_set_header Host $host;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location /api {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://127.0.0.1:7190;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location /sitemap.xml {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://127.0.0.1:7190;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
listen 443 ssl;
include /etc/nginx/ssl/vadxq.com.ssl.conf;
}
server {
listen 80;
server_name blog.vadxq.com;
return 301 https://$host$request_uri;
#return 404;
}

如上配置中的include,引入绝对地址下的ssl配置文件即可。

好啦,教程到此结束,谢谢大家捧场,有什么不对的或者有其他疑问,可以github上blog项目里提issue(https://github.com/vadxq/koa-nuxt-blog/issues)或者是邮件我哟~

【泛域名】使用Let's Encrypt免费签发个人或企业网站泛域名证书

https://blog.vadxq.com/article/acmesh-letsencrypt/

作者

vadxq

发布于

2019-05-20

更新于

2019-05-21

许可协议

评论