Discourse 如何不使用 Let’s Encrypt 而使用 CA 签名的密钥进行安装
通过访问密钥签发机构上面提供的信息了解到:Let’s Encrypt 针对一个域名只会在一定时间内签发 5 次,如果你超过了签发的次数,你需要 5 天后才能再次申请。
这个可能对你会造成无法安装成功的影响,因为你只有 5 次安装的机会,否则你在安装过程中会得到错误信息如下:
[Sun 04 Oct 2020 04:52:58 AM UTC] Create new order error. Le_OrderFinalize not found. {
"type": "urn:ietf:params:acme:error:rateLimited",
"detail": "Error creating new order :: too many certificates already issued for exact set of domains: www.ossez.com: see https://letsencrypt.org/docs/rate-limits/",
"status": 429
}
使用 CA 签名的域名
我们参考了官方的帮助文档,并且参照我们的平台进行测试后安装成功了。
现将经验分享给大家。
官方的安装 CA 签名密钥内容如下:https://meta.discourse.org/t/advanced-setup-only-allowing-ssl-https-for-your-discourse-docker-setup/13847
购买 SSL
首先你获得已经对你域名签名的密钥,这个密钥通常的格式是 key 和 crt。
如果你对 https 签名的流程还不太了解的话,你可以搜索下相关文章。
最简单的逻辑就是你自己生成一个 key,然后将这个 key 和你的域名信息发给 CA 签发机构,这些机构会对你的信息进行一些审查。因为我们只签名 www 和根域名,这种签名方式是最简单的,只要校验你是不是域名的持有者,基本会发个邮件到你的邮箱中就可以确认了。
当上面的信息确认后,CA 会将你发给他们的 key 进行签名,签名后将结果返回给你,这就是你拿到的 crt。
要对域名进行 https 加密,需要上面 2 个文件就可以了。
将文件上传到服务器
Discourse 对文件的命名有要求,你不能随意命名。不管你签名的域名是什么。你在安装的时候的 key 文件需要命名为 ssl.key,你的 crt 文件需要命名为 ssl.crt。
你不能将你的密钥命名为其他名称,文件名要和上面的要求一致。
文件放置的位置为:/var/discourse/shared/standalone/ssl 路径下面。
配置信息如下表:
文件名 |
类型 |
放置路径 |
---|---|---|
ssl.key |
key 文件 |
/var/discourse/shared/standalone/ssl/ssl.key |
ss.crt |
crt 文件 |
/var/discourse/shared/standalone/ssl/ssl.crt |
请注意,这个放置的位置是你的服务器的文件路径位置,不是你服务器上安装 docker 容器后,docker 容器内的文件路径。
如上图,我们显示的文件路径和文件内容。
如果你服务器上不仅仅只有这 2 个文件,可能还有其他签名的文件的话,请删除其他的文件,只保留这 2 个文件。
修改 app.yml
修改 app.yml 文件中的配置。
app.yml 文件的路径为 /var/discourse/containers/app.yml,可以使用下面的命令进行修改:
vi /var/discourse/containers/app.yml
在这里,有 2 个地方需要注意:
如果
- "templates/web.ssl.template.yml"
这一行被注释的话,你需要取消注释。
如果
- "templates/web.letsencrypt.ssl.template.yml"
这一行没有注释的话,你需要注释上。
我们的文件看起来如下:
## Uncomment these two lines if you wish to add Lets Encrypt (https)
- "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
上面的这个配置这样注释的意图就是,启用 ssl 的配置,但是撤销使用 letsencrypt 的 ssl 签名。
完成上面的修改后,保存退出。
开放端口 你需要进行检查你容器的端口。
你需要查看下你的 app.yml 文件中的端口是否被添加到容器中了。
expose:
- "80:80"
- "443:443"
你可以为你的容器开放更多的端口,但是针对 https 和 http ,你需要至少开放 80 和 443 端口。
在上面我们的配置中,我们开放了上述的 2 个端口。
重新编译
在完成上面的所有操作后,进入目录 /var/discourse,然后在这个目录下运行:
./launcher rebuild app
对整个网站进行重新编译。当编译部署完成后,使用命令:
./launcher logs app
查看编译的结果,如果没有任何错误,表示编译部署成功,你的网站应该使用的是你自己的密钥了。
为了保险起见,你可以重启下 docker 容器。
重启 docker 容器的命令是:
systemctl restart docker
校验安装
在完成上面的所有操作后,你就可以通过浏览器访问你的网站的。
在任何浏览器的右上角,单击带锁的图标,然后查看证书。
你可以通过这个链接查看你证书的签发机构,有效期和相关信息,以确定你的证书被正确安装到服务器上了。
希望我们能一起构建更加安全和清洁的网络。
https://www.ossez.com/t/discourse-lets-encrypt-ca/552
- 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 数组属性和方法
- 【一起学系列】之迭代器&组合:虽然有点用不上啦
- 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法
- 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
- scipy.stats连续分布的基本操作
- InvocationHandler中invoke方法中的第一个参数proxy的用途
- height、offsetheight、clientheight、scrollheight、innerheight、outerheight
- mysql sql-mode 解析和设置
- JAVABEAN EJB POJO区别
- @Component和@Bean以及@Autowired、@Resource
- mybatis generator and 和or条件
- 『.Net反射』ILGenerator.Emit 动态MSIL 编程
- Spring通过XML配置文件以及通过注解形式来AOP 来实现前置,后置,环绕,异常通知
- 切面编程(环绕通知与前后置通知区别)
- Spring在代码中获取bean的几种方式
- Spring 一个接口多个实现类怎么注入