当我偶然发现let's encrypt时,我开始研究 ssl 证书,并且我想将它与 gitlab 一起使用,但是它在树莓派 2 上运行并且现在运行得非常完美(所以我不想搞砸任何事情),我会去安装一个让我们正确加密ssl证书吗?PS:我的安装是综合的
7 回答
到目前为止,我能找到的最佳解决方案在此博客文章中进行了描述。我不会全部背诵,但重点是:
- 使用
webroot
Let's Encrypt 的身份验证器 - 创建文件夹
/var/www/letsencrypt
并使用此目录作为webroot-path
Let's Encrypt 更改以下配置值
/etc/gitlab/gitlab.rb
并在此之后运行gitlab-ctl reconfigure
:nginx['redirect_http_to_https'] = true nginx['ssl_certificate']= "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem" nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem" nginx['custom_gitlab_server_config']="location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"
如果您使用的是 Omnibus 包附带的 Mattermost,那么您还可以在以下位置设置这些选项
/etc/gitlab/gitlab.rb
:mattermost_nginx['redirect_http_to_https'] = true mattermost_nginx['ssl_certificate']= "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem" mattermost_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem" mattermost_nginx['custom_gitlab_mattermost_server_config']="location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"
请求您的第一个证书后,请记住更改
external_url
为https://...
并再次运行gitlab-ctl reconfigure
这种方法非常优雅,因为它只是/var/www/letsencrypt/.well-known
通过自定义 Nginx 配置将 Let's Encrypt 身份验证器使用的目录挂载到 Gitlab web-root 中,并且在 Gitlab 运行时始终可以进行身份验证。这意味着您可以自动更新 Let's Encrypt 证书。
我不知道 Raspberry Pi 上的安装是否有所不同。Let's Encrypt 安装过程有一些我不知道的魔法。
准备 Gitlab
键入grep 'external_url' /etc/gitlab/gitlab.rb
以检查网站名称。以 https://gitlab.example.com :50000为例
如果您的外部 URL 不https
以 开头,请将其更改为以https
粗体部分将是您的<your domain name>
生成证书
按照此链接上的 Let's Encrypt 安装说明进行操作:https ://letsencrypt.org/howitworks/
我没有复制说明,因为它们可能会改变(因为该程序目前处于公开测试阶段)。您必须运行的内容取决于您是否还有在 Apache 上运行的网站,您想要为其生成 Let's Encrypt 证书。
生成 Let's Encrypt 证书后,它们位于/etc/letsencrypt/live/<your domain name>/
复制证书
Gitlab 需要两个文件位于/etc/gitlab/ssl/
有些事情我不确定,您可能必须使用此位置的答案转换 .pem 证书:Convert .pem to .crt and .key
将证书从复制/etc/letsencrypt/live/<your domain name>/cert.pem
到/etc/gitlab/ssl/<your domain name>.crt
将私钥复制/etc/letsencrypt/live/<your domain name>/privkey.pem
到/etc/gitlab/ssl/<your domain name>.key
重新配置
跑gitlab-ctl reconfigure
根据您的基础架构设置(Raspi、大型云服务器或介于两者之间),有两种方法:
如果您有一个外部可访问的服务器(意味着您的 Gitlab 主机可以从 Let´s Encrypt 服务器调用,这是 Let´s Encrypt 自动验证您“拥有”某个域(例如
gitlab.yoursite.com
,相应的域和 DNS )的机制所必需的已解析的服务器/主机)唯一需要的(从 Gitlab 10.7 版开始)是在 Gitlab URL 配置中的http中添加一个s(正如marcolz已经提到的):/etc/gitlab/gitlab.rb
external_url 'https://gitlab.yoursite.com'
从https://docs.gitlab.com/omnibus/settings/ssl.html#let-39-s-encrypt-integration中的文档:
Omnibus-gitlab 可以自动为您从 Let's Encrypt 获取和更新证书。
如果Let´s Encrypt 服务器无法从外部访问您的 Gitlab 主机,则整个过程会更加困难!然后,您将离开让 Gitlab Omnibus 为您完成繁重工作的自动方式。您现在肯定需要自己获取 Let´s Encrypt 证书!有一些方法可以在不需要外部可访问服务器的情况下获取 Let´s Encrypt 证书。
我选择并推荐的方法是使用替代的 Let´s Encrypt 客户端与dns-lexicon一起脱水,以完全自动化获取证书的过程以及 Let´s Encrypt ,它是在 2016 年某处推出的。这是唯一的方法,您不需要外部可访问的服务器- 但您再次需要“拥有”某个域,例如并且您需要对托管您的域的 DNS 提供商的 API 访问(这里是受支持的 DNS 提供商的列表在那种情况下)。
dns-challenge
gitlab.yoursite.com
由于整个过程非常复杂,我创建了一个完全可理解的Ansible剧本prepare-gitlab.yml,其中使用 Omnibus 安装 Gitlab 的每一步都为您处理(完整的 GitHub 源代码可在此处获得:https ://github.com/jonashackt/ gitlab-ci-stack)。
如果您只想创建 Let´s Encrypt 证书,请查看gain-letsencrypt-certs-dehydrad-lexicon.yml - 即使您不想使用 Ansible,您也可以在控制台上手动重现每个步骤或使用其他自动化工具,如 Chef 或 Saltstack(尽管我个人不能推荐)。另一种方法是查看来自词典专家的这篇很棒的博文:https ://blog.thesparktree.com/generating-intranet-and-private-network-ssl ,从这些描述的步骤中,我基本上开发了剧本。
无论您选择哪种方式,都不要忘记复制手动(或自动)获取的 Let´s Encrypt 证书
/srv/dehydrated/certs/{{ gitlab_domain }}/fullchain.pem
到
/etc/gitlab/ssl/{{ gitlab_domain }}.crt
和
/srv/dehydrated/certs/{{ gitlab_domain }}/privkey.pem
到
/etc/gitlab/ssl/{{ gitlab_domain }}.key
Gitlab 会自动为您从那里获取它们,因为文档说明了手动配置 HTTPS 的方式
您需要手动安装生成的证书/etc/gitlab/ssl
并将外部 url 设置为 https,/etc/gitlab/gitlab.rb
如:https ://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md
如果它对其他人有帮助,我写下了我在这里使用的过程:http: //kelan.io/2016/using-lets-encrypt-to-add-ssl-to-gitlab/
我之前已经设置了 GitLab(通过从源代码安装),并且只是尝试使用 Let's Encrypt 添加 SSL。
关键点是:
- 使用
standalone
模式letsencrypt
- 制作一份可供以下人员阅读的证书副本
gitlab-shell
您需要在 /etc/gitlab/ssl 中手动安装生成的证书,并在 /etc/gitlab/gitlab.rb 中将外部 url 设置为 https,如下所述:https ://gitlab.com/gitlab-org/omnibus-gitlab /blob/master/doc/settings/nginx.md
我更喜欢使用符号链接,所以你不需要复制证书。 在此处输入链接描述
如果您的 Gitlab 实例无法通过 Internet 访问,则您不能使用 Gitlab 的内置 LetsEncrypt 机制,因为它在您的 Gitlab 的 URL 上使用 HTTP 质询/响应。您可以使用 DNS 质询/响应,而无需将 Gitlab 暴露在互联网上,并且可以完全自动化它。
这个答案是假设一个Gitlab Omnibus install写的。
如果您不想或不能使用 HTTP 质询/响应方法,而您想使用 DNS 方法,那么您必须在 Gitlab 之外进行。一种方法是使用 acme.sh而不是 Gitlab 提供的内置 LetsEncrypt 支持。
您需要具有受支持 API 的 DNS 提供商。如果您的 DNS 没有 API,那么您可以使用DNS 别名和另一个具有受支持 API 的 DNS。我使用了 LuaDNS,它对于像这样的轻量级使用是免费的。
在不重写文档的情况下,它是这样的:
做任何你需要做的事情来注册你选择的 API DNS 并启用它的 API。在 LuaDNS 上,API 必须明确启用,并且您必须在 API 工作之前验证您的电子邮件地址。请注意 API 令牌。
创建一个子域,比如
acme.example.com
在您的 API DNS 上。注意它的名称服务器。在您的DNS上创建
NS
记录以指向这些名称服务器中的每一个,如下所示(注意尾随点):example.com
acme.example.com
acme.example.com NS ns1.myapidns.com.
在您的 DNS 中设置一个 CNAME
example.com
以指向您的 API DNS,如下所示(注意尾随点):_acme-challenge.gitlab.example.com CNAME _acme-challenge.acme.example.com.
将 Gitlab 配置为使用 SSL:添加到
/etc/gitlab/gitlab.rb
:external_url "https://gitlab.example.com" letsencrypt['enable'] = false registry_external_url 'https://gitlab.example.com.:5050'
(如果不想启用 Gitlab Container Registry,可以省略第 3 行)
安装先决条件(如果尚未安装)
# apt install cron sudo
acme
为进程创建一个非特权用户帐户# useradd -U -m acme
允许
acme
用户重新配置 Gitlab 以便它可以更新证书:# echo "acme ALL=(ALL) NOPASSWD: /usr/bin/gitlab-ctl reconfigure" >> /etc/sudoers
创建 Gitlab 期望找到 SSL 证书和密钥并授予
acme
写入权限的目录:# mkdir /etc/gitlab/ssl # chgrp acme /etc/gitlab/ssl # chmod 775 /etc/gitlab/ssl
acme.sh
以acme
用户身份安装# su - acme $ curl -s https://get.acme.sh | sh -s email=you@example.com
获取证书(LuaDNS 的示例,其他类似 - 请参阅文档)
$ export LUA_Key="<my api-key>" $ export LUA_Email="<my email>" $ ~/.acme.sh/acme.sh --issue --dns dns_lua -d gitlab.example.com \ --challenge-alias acme.example.com
(这也设置了一个 crontab 条目以每 60 天自动更新证书)
安装证书
$ ~/.acme.sh/acme.sh --install-cert -d gitlab.example.com \ --key-file /etc/gitlab/ssl/gitlab.example.com.key \ --fullchain-file /etc/gitlab/ssl/gitlab.example.com.crt \ --reloadcmd "sudo gitlab-ctl reconfigure"
请注意,下面的文件名/etc/gitlab/ssl
必须与您的 gitlab url 命名相同,并且必须使用密钥和证书的key
扩展名。crt
另请注意,证书包含完整的证书链。这些都是 Gitlab 所期望的。
如果您有 Gitlab Runners,则需要使用新的https://gitlab.example.com端点重新注册它们。