跳转到主要内容

从letsencrypt.org请求SSL证书

项目描述

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

本模块是为了使您的Odoo安装能够自动从https://letsencrypt.openssl.ac.cn请求SSL证书而编写的。

目录

安装

安装后,此模块会自动为您在letsencrypt.org的账户生成私钥,保存在 $data_dir/letsencrypt/account.key。如果您需要或想要使用自己的账户密钥,请替换该文件。

要使证书请求生效,您的网站需要通过纯HTTP可访问,如果您强制客户端使用SSL版本,请参见下面的配置示例。

安装后,触发 更新letsencrypt证书 的cron作业,并查看日志中的消息。

配置

此插件请求配置参数 web.base.url 中命名的域的证书 - 如果返回值为 localhost 或类似,则模块不会请求任何内容。

其他说明性设置在设置 -> 通用设置中。在那里您可以向CSR添加更多域名,添加更新DNS的自定义脚本,并添加用于重新加载您的Web服务器的脚本(如果需要)。证书中可以添加的域名数量 限制在100个。可以使用通配符证书来避免该限制。

请注意,所有这些域名都必须通过HTTP在端口80上公开可达,并且它们必须有指向您的Odoo实例的 .well-known/acme-challenge 的条目,指向 $datadir/letsencrypt/acme-challenge

由于DNS更改需要一些时间才能传播,当我们响应DNS挑战并且服务器尝试检查我们的响应时,可能会失败(并且很可能会失败)。这个问题在https://tools.ietf.org/html/rfc8555#section-8.2中有记录,基本方法是在响应中添加一个Retry-After头部,以指示服务器重新尝试挑战。在编写这些行的时候,Boulder尚未实现这个功能。这促使我们使用letsencrypt.backoff配置参数,这个参数表示此模块将尝试轮询服务器以重新验证我们对挑战的响应的时间(分钟),具体来说,它是poll_and_finalizedeadline参数。

使用

模块设置了一个cron作业,用于自动请求和续订证书。

证书在到期前一个月续订。然后每天尝试续订,直到成功为止。

第一次运行后,您将在$datadir/letsencrypt中找到一个名为domain.crt的文件,配置您的SSL代理使用此文件作为证书。

深入配置

如果您想在CSR上使用多个域名,则必须从设置 -> 通用设置中进行配置。如果您在任何这些域名中使用通配符,则letsencrypt将返回一个DNS挑战。为了回答这个挑战,您需要提供脚本(如通用设置中所示)或安装一个提供您DNS提供商支持的模块。在这个模块中,您需要在letsencrypt模型中创建一个名为_respond_challenge_dns_$DNS_PROVIDER的函数,其中$DNS_PROVIDER是您提供商的名称,可以是任何长度大于零的字符串,并在设置中的dns_provider选择字段中添加您的DNS提供商的名称。

在任何情况下,如果在设置页面上插入脚本路径,它将运行,以便您想更新多个DNS服务器。

您还可以在设置中设置一个重新加载命令,以防您需要重新加载您的Web服务器。默认情况下是sudo /usr/sbin/service nginx reload

您还需要一个匹配的sudo配置,如下所示

your_odoo_user ALL = NOPASSWD: /usr/sbin/service nginx reload

进一步地,如果您强制用户使用https,您将需要像nginx这样的东西

if ($scheme = "http") {
    set $redirect_https 1;
}
if ($request_uri ~ ^/.well-known/acme-challenge/) {
    set $redirect_https 0;
}
if ($redirect_https) {
    rewrite ^   https://$server_name$request_uri? permanent;
}

以及对于apache

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} "!^/.well-known/"
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

如果您需要将其他nginx站点重定向到您的Odoo实例,请为您的Odoo实例声明一个upstream,并执行如下操作

location /.well-known {
    proxy_pass    http://yourodooupstream;
}

如果您使用的是多数据库安装(带有或不带dbfilter选项),其中/web/database/selector返回一个包含多个数据库的列表,那么您需要将letsencrypt插件添加到宽加载插件列表中(默认情况下,只有web插件),设置--load选项。例如,--load=web,letsencrypt

错误追踪器

错误在GitHub Issues上进行跟踪。如果有问题,请检查您的错误是否已被报告。如果您是第一个发现的人,请提供详细的反馈,以帮助我们解决问题。

请不要直接联系贡献者以获取支持或帮助解决技术问题。

致谢

作者

  • Therp BV

  • Tecnativa

  • Acysos S.L

贡献者

其他致谢

ACME实现

图标

维护者

本模块由OCA维护。

Odoo Community Association

OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并促进其广泛使用。

此模块是GitHub上OCA/server-tools项目的一部分。

欢迎您贡献力量。要了解如何贡献,请访问https://odoo-community.org/page/Contribute

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

此版本没有提供源代码发行版文件。有关生成发行版存档的教程,请参阅生成发行版存档

构建发行版

odoo_addon_letsencrypt-16.0.1.0.0.2-py3-none-any.whl (170.3 kB 查看哈希值)

上传时间 Python 3

支持者