文档章节

申请Let's Encrypt通配符HTTPS证书

飞奔的萝卜
 飞奔的萝卜
发布于 2018/03/14 14:53
字数 1147
阅读 7W
收藏 15

阿里云携手百名商业领袖、技术大咖,带您一探行进中的数字新基建!>>>

Let's Encrypt 发布的 ACME v2 现已正式支持通配符证书,接下来将为大家介绍怎样申请,Let's go.

注 本教程是在centos 7下操作的,其他Linux系统大同小异。

2018.03.15 20:48 更新了通过acme.sh方式获取证书的方法,墙裂推荐这种方法
2018.08.13 18:30 增加可通过docker镜像获取证书的方法

一、acme.sh的方式

1.获取acme.sh

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

如下所示安装成功

image

注:我在centos 7上遇到问题,安装完后执行acme.sh,提示命令没找到,如果遇到跟我一样的问题,请关掉终端然后再登陆,或者执行以下指令:

source ~/.bashrc

2.开始获取证书

acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录了,我的域名是在阿里注册的,下面给出阿里云解析的例子,其他地方注册的请参考这里自行修改:传送门

请先前往阿里云后台获取App_KeyApp_Secret 传送门,然后执行以下脚本

# 替换成从阿里云后台获取的密钥
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
# 换成自己的域名
acme.sh --issue --dns dns_ali -d zhuziyu.cn -d *.zhuziyu.cn

这里是通过线程休眠120秒等待DNS生效的方式,所以至少需要等待两分钟

image

到了这一步大功告成,撒花

生成的证书放在该目录下: ~/acme.sh/domain/

下面是一个Nginx应用该证书的例子:

# domain自行替换成自己的域名
server {
    server_name xx.domain.com;
    listen 443 http2 ssl;
    ssl_certificate /path/.acme.sh/domain/fullchain.cer;
    ssl_certificate_key /path/.acme.sh/domain/domain.key;
    ssl_trusted_certificate  /path/.acme.sh/domain/ca.cer;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:10086;
    }
}

acme.shcertbot的方式更加自动化,省去了手动去域名后台改DNS记录的步骤,而且不用依赖Python,墙裂推荐

第一次成功之后,acme.sh会记录下App_Key跟App_Secret,并且生成一个定时任务,每天凌晨0:00自动检测过期域名并且自动续期。对这种方式有顾虑的,请慎重,不过也可以自行删掉用户级的定时任务,并且清理掉~/.acme.sh文件夹就行

二、 docker 镜像获取

如果装有docker环境的话,也可以用docker镜像来获取证书,只需一行命令即可

docker run --rm  -it  \
  -v "$(pwd)/out":/acme.sh  \
  -e Ali_Key="xxxxxx" \
  -e Ali_Secret="xxxx" \
  neilpang/acme.sh  --issue --dns dns_ali -d domain.cn -d *.domain.cn

成功之后,证书会保存在当前目录下的out文件夹,也可以指定路径,修改上面第一行 "$(pwd)/out",改为你想要保存的路径即可。

详细用法,可以参考:传送门

获取下来的证书跟方式一 获取的一模一样,其他信息请参考方式一。

三、 certbot方式获取证书[不推荐]

1.获取certbot-auto

# 下载
wget https://dl.eff.org/certbot-auto

# 设为可执行权限
chmod a+x certbot-auto

2.开始申请证书

# 注xxx.com请根据自己的域名自行更改
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d "*.xxx.com" --manual --preferred-challenges dns-01 certonly

执行完这一步之后,会下载一些需要的依赖,稍等片刻之后,会提示输入邮箱,随便输入都行【该邮箱用于安全提醒以及续期提醒】

image

注意,申请通配符证书是要经过DNS认证的,按照提示,前往域名后台添加对应的DNS TXT记录。添加之后,不要心急着按回车,先执行dig xxxx.xxx.com txt确认解析记录是否生效,生效之后再回去按回车确认

image

到了这一步后,大功告成!!! 证书存放在/etc/letsencrypt/live/xxx.com/里面

要续期的话,执行certbot-auto renew就可以了

image

注:经评论区 ddatsh 的指点,这样的证书无法应用到主域名xxx.com上,如需把主域名也增加到证书的覆盖范围,请在开始申请证书步骤的那个指令把主域名也加上,如下: 需要注意的是,这样的话需要修改两次解析记录

./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d "*.xxx.com" -d "xxx.com" --manual --preferred-challenges dns-01 certonly

image

下面是一个nginx应用该证书的一个例子

server {
    server_name xxx.com;
    listen 443 http2 ssl;
    ssl on;
    ssl_certificate /etc/cert/xxx.cn/fullchain.pem;
    ssl_certificate_key /etc/cert/xxx.cn/privkey.pem;
    ssl_trusted_certificate  /etc/cert/xxx.cn/chain.pem;

    location / {
      proxy_pass http://127.0.0.1:6666;
    }
}

© 著作权归作者所有

飞奔的萝卜

飞奔的萝卜

粉丝 6
博文 2
码字总数 3580
作品 0
广州
程序员
私信 提问
加载中

评论(83)

dededede
dededede
Let's Encrypt 发布的 ACME v2只是协议,acme.sh和certbot都是第三方做的客户端
伊格尼斯丶
最后配置nginx时候,对nginx版本有要求吗?
nginx: [emerg] invalid parameter "http2" in /home/web/nginx/conf/vhost/ssl.conf:3
configuration file /home/web/nginx/conf/nginx.conf test failed
好像不支持http2
烛✟孩
烛✟孩
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

定义的两个环境变量,脚本中是怎么读取到的呢?求指点……
飞奔的萝卜
飞奔的萝卜 博主

引用来自“loubobooo”的评论

大佬,这个证书有效期只有三个月,是怎么解决的?
定时任务自动刷新啊
飞奔的萝卜
飞奔的萝卜 博主

引用来自“blu10ph”的评论

@飞奔的萝卜 github在服务器上老是访问不了,能不能弄个国内的地址来下载~
这个要改原始脚本,改好几处地方,不太方便啊,翻墙就能解决的。
如果你有安装docker环境的话,也可以参考我上面更新的第二种方法,一行命令即可。
飞奔的萝卜
飞奔的萝卜 博主

引用来自“Tinywan”的评论

提示失败:
IMPORTANT NOTES:
- The following errors were reported by the server:

Domain: www.tinywan.top
Type: connection
Detail: DNS problem: NXDOMAIN looking up TXT for
_acme-challenge.www.tinywan.top

Domain: tinywan.top
Type: connection
Detail: DNS problem: NXDOMAIN looking up TXT for
_acme-challenge.tinywan.top

To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address. Additionally, please check that
your computer has a publicly routable IP address and that no
firewalls are preventing the server from communicating with the
client. If you're using the webroot plugin, you should also verify
that you are serving files from the webroot path you provided.

引用来自“哎呀嘿___”的评论

楼主,我用的cerbot,也出现了相同的问题,求解答😬
很大可能是 txt记录没配置正确吧,不建议使用cerbot啊……
飞奔的萝卜
飞奔的萝卜 博主

引用来自“我_承宇”的评论

请问使用 acme.sh 获取到的证书不是 .pem 的,怎么配置到 nginx
已更新……
飞奔的萝卜
飞奔的萝卜 博主

引用来自“KevinBlandy”的评论

成功申请下来了,配置nginx也没问题了。。但springboot感觉配置不对啊?我看网上springboot sll的配置文件信息,跟我生成的文件信息不一样。。。怎么破?楼主求指教。
springboot的不清楚啊,但一般只用到两个文件吧,一个私钥:xxxx.com.key,一个证书文件:fullchain.cer
开源中国首席喵喵喵
开源中国首席喵喵喵
很好,很强大!
loubobooo
loubobooo
大佬,这个证书有效期只有三个月,是怎么解决的?
Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???

Let's Encrypt 免费通配符 SSL 证书申请教程 from:https://blog.csdn.net/English0523/article/details/79608464 2018 年 3 月 14 日,Let’s Encrypt 对外宣布 ACME v2 已正式支持通配符证书......

osc_a6tqrvul
2018/11/12
6
0
申请免费通配符证书(Let's Encrypt)并绑定IIS

什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。 Let’s Encrypt 也是一个 CA 机构...

osc_xgq4n4ik
2018/05/25
8
0
Let's Encrypt 发布的 ACME v2 现已正式支持通配符证书

Let's Encrypt 宣布 ACME v2 正式支持通配符证书。Let's Encrypt 宣称将继续清除 Web 上采用 HTTPS 的障碍,让每个网站轻松获取管理证书。 ACMEv 是 ACME 协议的更新版本,考虑到行业专家和其...

周其
2018/03/14
4.9K
28
生成线上用https证书,支持通配符和多域名,初学Let’s Encrypt用于IIS,纯本地手动

自简书发布的上篇《生成本地测试用https证书,支持通配符和多域名,初学OpenSSL》以来,本地测试用https用的妥妥的。 线上一直用的腾讯云的免费证书(每个域名都要一个证书(滑稽),今天线上...

高坚果兄弟
2018/06/09
0
0
申请 Let’s Encrypt 泛域名证书 及 Nginx/Apache 证书配置

什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA (Certificate Authority )机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。Let’...

osc_yy79la80
2018/11/21
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Portworx on OpenShift 原理讲解视频

Portworx on RedHat OpenShift https://v.qq.com/x/page/g0975mnzln0.html 欢迎回到Portworx技术讲解系列视频。我们今天介绍红帽Openshift上的Portworx。我们讨论基本的OpenShift部署,包括本...

Portworx
31分钟前
18
0
type_traits类型特征萃取

type_traits库提供一组特征(traits)类——元函数,可以在编译期确定类型是否具有某些特征。 根据返回类型type_traits库里的元函数可以分为以下两大类: 检查元数据属性的值元函数:以::val...

零落年华
37分钟前
17
0
3 年经验的 Java 后端妹子,横扫阿里、滴滴、美团,整理出这份厚厚的 8000 字面经!

自序 这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了。 先说下这次面试的结果吧: 到 hr 面的:阿里、美...

码农突围
41分钟前
15
0
Oracle中关于视图-序列-同义词-索引的详解

一.视图 1.什么是视图 简单来说 视图就是一个虚拟表,实体表的映射 什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(表结构简化) 在项目过程...

煌sir
43分钟前
18
0
lodash之_.chunk _.compact _.concat方法

注:前提引入lodash.min.js 1、_.chunk _.chunk(array, [size=1]) chunk:英文释义:厚块; 厚片; 大块; 相当大的量; 话语组成部分; 组块; 功能:将数组(array)拆分成多个size长度的区块,...

一生懸命吧
55分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部