如何使用gitlab进行let的加密?

时间:2015-12-09 21:19:43

标签: ssl-certificate gitlab raspbian gitlab-omnibus lets-encrypt

当我偶然发现let's encrypt时,我开始查看ssl证书,我想将它与gitlab一起使用,但是它正在运行在树莓派2上并且它现在运行得相当完美(所以我不想弄乱任何东西),他会不会正确地安装一个let encrypt ssl证书? PS:我的安装是综合

7 个答案:

答案 0 :(得分:62)

我现在能够找到的迄今为止最好的解决方案在this blog post中有所描述。我不会背诵任何内容,但关键点是:

  • 使用webroot身份验证器进行加密
  • 创建文件夹/var/www/letsencrypt并将此目录用作webroot-path以便我们进行加密
  • 更改/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

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

答案 1 :(得分:8)

我不知道Raspberry Pi上的安装是否有所不同。让加密安装过程做一些我不知道的魔术。

准备Gitlab

键入grep 'external_url' /etc/gitlab/gitlab.rb以检查网站名称。例如https:// gitlab.example.com :50000

如果您的外部网址不是以https开头,请将其更改为以https

开头

粗体部分将是您的<your domain name>

生成证书

按照此链接上的Let's加密安装说明进行操作:https://letsencrypt.org/howitworks/

我没有复制说明,因为它们可能会发生变化(因为该程序目前处于公开测试阶段)。您必须运行的内容取决于您是否还在Apache上运行要为其生成Let的加密证书的网站。

生成Let's加密证书后,它们位于/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

答案 2 :(得分:7)

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

  1. 如果你有一个外部可访问的服务器(意味着你的Gitlab主机可以从Let's Encrypt服务器调用,这是Let's Encrypt的自动验证机制所需要的您“拥有”某个域gitlab.yoursite.com以及相应的DNS解析服务器/主机唯一需要的东西(来自Gitlab版本10.7)是添加 s < / strong>到/etc/gitlab/gitlab.rb中的Gitlab网址配置中的 http (已提及marcolz):

    external_url 'https://gitlab.yoursite.com'

  2. 来自https://docs.gitlab.com/omnibus/settings/ssl.html#let-39-s-encrypt-integration中的文档:

      

    Omnibus-gitlab可以自动获取和续订证书   让我们为你加密。

    1. 如果您的Gitlab主机无法通过Let's Encrypt服务器外部访问,整个过程就会变得更加困难!然后你会离开让Gitlab Omnibus为你做繁重的自动方式。 您现在必须自己获取EUROP加密证书!有一些方法可以在不需要外部访问服务器的情况下获取由加密证书。

      我选择并建议的是使用替代的Let's Encrypt客户端dehydrateddns-lexicon来完全自动化获取证书的过程以及Let's Encrypt { {1}},这是在2016年的某个地方推出的。这是唯一的方法,您不需要外部可访问的服务器 - 但您又需要“拥有”某个域,例如{{ 1}} AND 您需要对DNS提供商进行API访问,该提供商托管您的域(此处为list of supported DNS providers in that case)。

      由于整个过程非常复杂,我创建了一个完全易于理解的Ansible剧本prepare-gitlab.yml,其中Gitlab安装Omnibus的每一步都是为您处理的(完整的GitHub源代码可在此处获取:{{3 }})。

      如果您只想创建自由加密证书,请查看https://github.com/jonashackt/gitlab-ci-stack - 即使您不想使用Ansible,也可以手动重现控制台上的每个步骤或使用其他步骤像Chef或Saltstack这样的自动化工具(虽然我不能亲自推荐)。另一种方法是从词典中查看这个伟大的博客文章:obtain-letsencrypt-certs-dehydrated-lexicon.yml,从我基本上开发的剧本中描述的步骤开始。

      无论您选择哪种方式,都不要忘记从

      复制手动(或自动)提取的Enjoy加密证书

      dns-challenge

      gitlab.yoursite.com

      /srv/dehydrated/certs/{{ gitlab_domain }}/fullchain.pem

      /etc/gitlab/ssl/{{ gitlab_domain }}.crt

      Gitlab将自动为您提取,正如文档在https://blog.thesparktree.com/generating-intranet-and-private-network-ssl

    2. 中所述

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

关键点是:

  • 使用standalone
  • letsencrypt模式
  • 制作gitlab-shell
  • 可读的证书副本

答案 5 :(得分:0)

  

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

我更喜欢使用符号链接,因此您无需复制证书。 enter link description here

答案 6 :(得分: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 Alias 和另一个具有受支持 API 的 DNS。我使用了 LuaDNS,对于像这样的轻度使用是免费的。

不重写documentation,它是这样的:

  • 做任何你需要做的事情来注册你选择的 API DNS 并启用它的 API。在 LuaDNS 上,必须显式启用 API,并且您必须在 API 工作之前验证您的电子邮件地址。请注意 API 令牌。

  • 在您的 API DNS 上创建一个子域,例如 acme.example.com。注意它的域名服务器。

  • 在您的 NS DNS 上为 example.com 创建 acme.example.com 记录,指向这些名称服务器中的每一个,如下所示(注意尾随点):

    acme.example.com NS ns1.myapidns.com.
    
  • 在您的 example.com DNS 上设置 CNAME 以指向您的 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,第三行可以省略)

  • 安装先决条件(如果尚未安装)

    # 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 Runner,则需要使用新的 https://gitlab.example.com 端点重新注册它们。