『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 59769|回复: 67

[进阶教程] 无 80 端口申请 Letsencrypt 免费 SSL 证书

  [复制链接]

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2018-3-17 15:41:15 | 显示全部楼层 |阅读模式
本帖最后由 neroxps 于 2018-5-30 15:27 编辑

无 80 端口申请 Letsencrypt 免费 SSL 证书

从 2018年1月份开始 letsencrypt 支持泛域名了,这让我们部署各种 WEB 应用省了很多功夫,终于不需要维护多个子域名的证书更新,直接使用泛域名证书就好了。

泛域名:*.example.com 这样的域名,就是泛域名。

acme.sh

另向大家浓重介绍由国人利用 shell 脚本开发的 acme.sh 脚本,这脚本使用方便,兼容各种 Linux 系统。他本身就是一个 shell 脚本,仅仅依赖 curlacme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。

acme.sh 支持 '--webroot', '--standalone', '--apache', '--nginx' or '--dns' 5种证书申请模式,熟悉 certbot 的朋友对前面两种一定不陌生。

使用详情可以看acme.sh 中文文档

作为家庭部署 WEB SSL 业务来说,面临最大的问题就是没有 80 端口,这令申请证书尤为困难。而 acme.sh 最后一种申请证书模式 --dns 模式,它支持 41 个域名商的 API,可以实现全自动利用 API 来生成 dns txt 解析,从而实现域名鉴权工作。

参阅 How to use DNS API

acme.sh 使用方法

acme.sh 安装

安装方法参考 acme.sh 中文文档

为了方便大家,我照搬过来。

安装很简单, 一个命令:

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

普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

  1. 把 acme.sh 安装到你的 home 目录下:
~/.acme.sh/

并创建 一个 bash 的 alias, 方便你的使用: acme.sh=~/.acme.sh/acme.sh

2). 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

acme.sh 生成证书

这里我只列举 --dns 的使用方法。

这边我用阿里云作为例子。

1.前往阿里云申请 Access keys

  1. 登录云服务器管理控制台

  2. 单击页面顶部的 Access Keys,或直接单击 Access Keys 管理控制台

aliyun_account_keys.png

  1. 创建您的 Access Key。

aliyun_account_keys-02.png

Access Key IDAccess Key Secret 记录下来待会备用。

2.使用 acme.sh --dns 模块获取 Letsencrypt 证书

  1. 首先录入阿里云的 Access Key IDAccess Key Secret 到环境变量。

注:这里假设我在上一步中获得的 Access Key ID= sdfsdfsdfljlbjkljlkjsdfoiwje,Access Key Secret = jlsdflanljkljlfdsaklkjflsa

$ export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
$ export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
  1. 执行 acme.sh 命令申请证书

注:example.com 为阿里云申请的域名

acme.sh --issue --dns dns_ali -d example.com

申请完毕后可以到 ~/.acme.sh/example.com 查看你的证书

nero@debian:~/.acme.sh/example.com$ ls -al
.
..
ca.cer
chain.pem -> ca.cer
fullchain.cer
fullchain.pem -> fullchain.cer
example.com.cer
example.com.conf
example.com.csr
example.com.csr.conf
example.com.key
privkey.pem -> example.com.key

Docker 使用 acme.sh


acme.sh 作者做了个 13M的容器 neilpang/acme.sh

docker 使用起来比上面更简单。

Pull 镜像

$ docker pull neilpang/acme.sh

创建 acme.sh 证书保存目录

因为要将 acme.sh 的证书保存在本地方便操作,所以需要建立一个目录保存证书。

$ mkdir ~/acme.sh

运行 acme.sh 容器

1. 申请证书

注1:这里假设我在阿里云中获得的 Access Key ID= sdfsdfsdfljlbjkljlkjsdfoiwje,Access Key Secret = jlsdflanljkljlfdsaklkjflsa
注2:example.com 为阿里云申请的域名

$ docker run --rm \
-v ~/acme.sh:/acme.sh \
-e Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" \
-e Ali_Secret="jlsdflanljkljlfdsaklkjflsa" \
neilpang/acme.sh --issue --dns dns_ali -d example.com

这一步有时候是因为 https://acme-v01.api.letsencrypt.org 无法访问导致报错,这时候可以尝试多几次,回显输出 Sleep 120 seconds for the txt records to take effect 的时候,就证明正在设置 txt 解析,等120秒解析生效就可以申请证书下来了。

2. 已守护进程方式运行 acme.sh 容器

$ docker run --name acme.sh \
-d --restart unless-stopped \
-v ~/acme.sh:/acme.sh \
neilpang/acme.sh daemon

至此 acme.sh 证书到60天就会自动更新。





评分

参与人数 2金钱 +20 收起 理由
kay7758 + 10 膜拜大神!
windgo + 10 膜拜大神!

查看全部评分

Nero
回复

使用道具 举报

21

主题

294

帖子

2551

积分

论坛技术达人

积分
2551
金钱
2207
HASS币
180

教程狂人

发表于 2018-4-4 10:48:13 | 显示全部楼层
本帖最后由 Yonsm 于 2018-4-4 10:49 编辑

LetsEncrypt +DNSPod 用这个姿势,现在支持*通配符域名了:
https://github.com/Neilpang/acme ... atically-issue-cert

curl https://get.acme.sh | sh
source ~/.bashrc

export DP_Id="*****"
export DP_Key="***************************"
acme.sh --issue --dns dns_dp -d xxx.net -d *.xxx.net
回复

使用道具 举报

4

主题

192

帖子

1576

积分

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1384
HASS币
0
发表于 2018-3-17 16:04:59 | 显示全部楼层
学习学习。。。。。榨干已有资源的性能
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2018-3-17 16:11:47 | 显示全部楼层
厉害厉害,膜拜膜拜!
回复

使用道具 举报

2

主题

199

帖子

3543

积分

论坛元老

Rank: 8Rank: 8

积分
3543
金钱
3344
HASS币
0
发表于 2018-3-17 16:54:27 | 显示全部楼层
向大神学习
回复

使用道具 举报

5

主题

295

帖子

2062

积分

金牌会员

Rank: 6Rank: 6

积分
2062
金钱
1766
HASS币
0
发表于 2018-3-17 18:09:39 | 显示全部楼层
学习学习。。。。。
回复

使用道具 举报

6

主题

743

帖子

5956

积分

论坛元老

Rank: 8Rank: 8

积分
5956
金钱
5208
HASS币
20
发表于 2018-3-17 19:55:25 | 显示全部楼层
学习学习
回复

使用道具 举报

11

主题

337

帖子

1390

积分

金牌会员

iLee

Rank: 6Rank: 6

积分
1390
金钱
1052
HASS币
0
发表于 2018-3-17 19:56:01 | 显示全部楼层
前来膜拜
群名叫iLee
GitHub叫ileez
Docker Hub叫zlee

这么多名字都是被逼的。。。
回复

使用道具 举报

0

主题

143

帖子

1426

积分

金牌会员

Rank: 6Rank: 6

积分
1426
金钱
1283
HASS币
0
发表于 2018-3-17 21:10:01 | 显示全部楼层
谢谢分享了
回复

使用道具 举报

17

主题

417

帖子

2820

积分

金牌会员

Rank: 6Rank: 6

积分
2820
金钱
2402
HASS币
0

教程狂人

发表于 2018-3-17 22:31:25 | 显示全部楼层
非常强悍
回复

使用道具 举报

2

主题

321

帖子

1927

积分

金牌会员

Rank: 6Rank: 6

积分
1927
金钱
1606
HASS币
0
发表于 2018-3-18 03:04:07 | 显示全部楼层
学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 13:57 , Processed in 1.369469 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表