当我偶然发现let's encrypt时,我开始查看ssl证书,我想将它与gitlab一起使用,但是它正在运行在树莓派2上并且它现在运行得相当完美(所以我不想弄乱任何东西),他会不会正确地安装一个let encrypt ssl证书? PS:我的安装是综合
答案 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上的安装是否有所不同。让加密安装过程做一些我不知道的魔术。
键入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,大型云服务器或介于两者之间),有两种方式:
如果你有一个外部可访问的服务器(意味着你的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'
来自https://docs.gitlab.com/omnibus/settings/ssl.html#let-39-s-encrypt-integration中的文档:
Omnibus-gitlab可以自动获取和续订证书 让我们为你加密。
如果您的Gitlab主机无法通过Let's Encrypt服务器外部访问,整个过程就会变得更加困难!然后你会离开让Gitlab Omnibus为你做繁重的自动方式。 您现在必须自己获取EUROP加密证书!有一些方法可以在不需要外部访问服务器的情况下获取由加密证书。
我选择并建议的是使用替代的Let's Encrypt客户端dehydrated和dns-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
答案 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 端点重新注册它们。