35

当我偶然发现let's encrypt时,我开始研究 ssl 证书,并且我想将它与 gitlab 一起使用,但是它在树莓派 2 上运行并且现在运行得非常完美(所以我不想搞砸任何事情),我会去安装一个让我们正确加密ssl证书吗?PS:我的安装是综合的

4

7 回答 7

63

到目前为止,我能找到的最佳解决方案在此博客文章中进行了描述。我不会全部背诵,但重点是:

  • 使用webrootLet's Encrypt 的身份验证器
  • 创建文件夹/var/www/letsencrypt并使用此目录作为webroot-pathLet'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_urlhttps://...并再次运行gitlab-ctl reconfigure

这种方法非常优雅,因为它只是/var/www/letsencrypt/.well-known通过自定义 Nginx 配置将 Let's Encrypt 身份验证器使用的目录挂载到 Gitlab web-root 中,并且在 Gitlab 运行时始终可以进行身份​​验证。这意味着您可以自动更新 Let's Encrypt 证书。

于 2015-12-31T01:29:54.150 回答
8

我不知道 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

于 2015-12-11T18:11:00.653 回答
8

根据您的基础架构设置(Raspi、大型云服务器或介于两者之间),有两种方法:

  1. 如果您有一个外部可访问的服务器(意味着您的 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 获取和更新证书。

  1. 如果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-challengegitlab.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 的方式

于 2018-05-23T13:29:17.243 回答
1

您需要手动安装生成的证书/etc/gitlab/ssl并将外部 url 设置为 https,/etc/gitlab/gitlab.rb如:https ://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md

于 2015-12-10T08:23:47.050 回答
1

如果它对其他人有帮助,我写下了我在这里使用的过程:http: //kelan.io/2016/using-lets-encrypt-to-add-ssl-to-gitlab/

我之前已经设置了 GitLab(通过从源代码安装),并且只是尝试使用 Let's Encrypt 添加 SSL。

关键点是:

  • 使用standalone模式letsencrypt
  • 制作一份可供以下人员阅读的证书副本gitlab-shell
于 2016-03-21T00:25:19.890 回答
0

您需要在 /etc/gitlab/ssl 中手动安装生成的证书,并在 /etc/gitlab/gitlab.rb 中将外部 url 设置为 https,如下所述:https ://gitlab.com/gitlab-org/omnibus-gitlab /blob/master/doc/settings/nginx.md

我更喜欢使用符号链接,所以你不需要复制证书。 在此处输入链接描述

于 2017-02-14T08:03:42.687 回答
0

如果您的 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.comacme.example.com

    acme.example.com NS ns1.myapidns.com.
    
  • 在您的 DNS 中设置一个 CNAMEexample.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.shacme用户身份安装

    # 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端点重新注册它们。

于 2021-04-23T16:50:08.450 回答