Let's Encrypt 配置 HTTPS 免费泛域名证书
想要使用 HTTPS ,你必须先拥有权威 CA(证书签发机构)签发的证书(对于自签名的证书,浏览器是不认账的)。Let's Encrypt 就是一家权威的 CA 证书签发机构,你可以向他申请免费的证书(一般商业证书的价格比较贵)。
推荐使用 acme.sh 这个工具,申请泛域名证书示例:
注意:以下示例中,我的二级域名是 rifewang.club (一般你向云服务商购买的都是二级域名),泛域名是 *.x.rifewang.club 。
1、在系统上安装 acme.sh ,默认安装位置是 ~/.acme.sh :
curl https://get.acme.sh | sh
安装要求系统必须已经安装了 cron , crontab , crontabs , vivie-cron 其中任意一个工具,不然会提示你安装失败,没有的话先安装一个即可。
注意:以下操作使用的是 DNS manual mode 的方式。
2、发起 issue 申请获取域名 DNS TXT 记录:
acme.sh --issue --force --dns -d <二级域名> -d <泛域名> --yes-I-know-dns-manual-mode-enough-go-ahead-please
注意:你必须先将 acme.sh 这个可执行文件的路径添加到系统的环境变量 PATH 中,或者直接在可执行文件目录下执行,否则肯定会提示你 acme.sh command not found 。
--force 强制 issue ,某些情况下你的域名已经验证成功了就会跳过验证,不会生成新的 TXT 记录,所以这里强制执行一下。
--yes-I-know... 这一堆冗长的东西是必须加的,这里就是想提示你 DNS manual mode 的方式不支持自动续签。
issue 之后的结果如图所示:
按照说明你需要分别添加 _acme-challenge.<二级域名> 和 _acme-challenge.<泛域名> 这两个域名的 TXT 类型的域名解析:
之所以要添加域名解析是为了验证你对此域名的所有权。
3、等待 DNS TXT 解析生效,同一条解析重复更新需要避免 DNS 缓存的问题。
4、发起 renew 申请签发并下载证书:
acme.sh --renew --force --dns -d <二级域名> -d <泛域名> --yes-I-know-dns-manual-mode-enough-go-ahead-please
示例结果如图所示:
输出结果除了会告诉你证书签发成功之外,还会在最后说明证书的存放位置,默认是 ~/.acme.sh/<二级域名>/ 这个目录。
5、配置你的证书和密钥,对应的就是 fullchain.cer 和 <二级域名>.key 这两个文件的内容。不同的情况下,配置的操作是不同的:比如你是在自己的服务器上直接操作 nginx ,那么将配置路径指向正确的证书和密钥地址即可,而如果你使用的是云服务,那么你可能需要做的是上传证书和密钥文件内容。总之,你已经成功获取了 HTTPS 证书。
Let's Encrypt 的泛域名证书有效期是三个月,acme.sh 的 DNS manual mode 方式不支持自动续签,你想要续签就必须重新 issue 然后 renew 操作一遍,我之所以这么做是因为权限受限,当然写个定时脚本任务就行了,也不用我手动操作。
acme.sh 不只一种 mode 方式,其它的方式是有支持自动续签的,并且也接入了主流的云服务商(你只需要配置 apikey 即可),更多内容请参考官网。
- [C#2] 3-局部类型、属性访问器保护级别、命名空间别名限定符
- (2013.09更新)最新W3School 离线完整版CHM 电子书下载
- [C#2] 1-泛型
- .NET4.0的可扩展缓存系统
- 让WordPress 在RSS 中Feed 截断文字输出
- [C#1] 11-接口
- jquery 标签中的属性操作
- 使用MongoDB存储访问者信息
- 解决WordPress 打开Feed页面“This page contains the following errors…”的问题
- jquery表单属性筛选元素
- [C#1] 10-事件
- Windows 7的VPC虚拟机自动不与主机时间同步的解决办法
- [C#1] 9-委托
- jquery基本选择器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JDK1.8 新特性 (八):还在重复写空指针检查代码?
- 使用Angular HTTP client对数据模型进行update操作
- Nodejs中OS模块
- 使用Angular HTTP client对数据模型进行创建操作
- 使用Angular HTTP client对数据模型进行删除操作
- Angular开发文档中一些常用的词汇
- Angular应用里child Component如何向parent Component发送事件
- 如何在SAP WebClient UI里使用jChartFX
- Go语言|基于channel实现的并发安全的字节池
- 对于hashmap的一点理解
- IntelliJ IDEA 2020.2 破解
- MATLAB批量给数据集加雾
- Vue Cli 4 引入 Cesium 配置
- R语言在不同样本量下的Littles MCAR检验
- Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW