Gitlab、鹈鹕和 Let’s Encrypt 一个安全的博客

SSL 安全性允许用户信任站点内容的真实性。 虽然您可以在 GitHub 和 GitLab 页面,只有 GitLab 支持自定义域的 SSL。 这篇文章告诉你如何使用 Let’s Encrypt 生成托管在 GitLab 页面上的安全博客。 如果您想了解更多关于鹈鹕的信息 Fedora,查看之前发布的鹈鹕文章 Fedora 杂志。

为什么在您的博客上使用 SSL 安全性? 原因之一是像谷歌这样的搜索引擎正朝着不使用它的网站降级搜索结果的方向发展。 这 Fedora 基础设施 社区团队正在考虑要求使用 HTTPS 来发布博客 Fedora 行星饲料.

创建目录结构

第一步是创建目录结构以支持所使用的验证过程 Let’s Encrypt. 此过程涉及从隐藏目录提供页面。 首先,将目录更改为您的 Pelican 博客内容,替换为正确的目录名称:

cd ~/myblog

现在创建目录:

mkdir -p .well-known/acme-challenge

安装 Certbot

接下来,安装 证书机器人 因此您可以从您的计算机请求证书:

sudo dnf install certbot

生成证书

安装完成后,运行命令为远程站点生成证书。

certbot certonly -a manual -d yoursite.com --config-dir ~/letsencrypt/config --work-dir ~/letsencrypt/work --logs-dir ~/letsencrypt/logs

将 yoursite.com 替换为您的实际域名。 在提示符处,您必须接受正在记录您的计算机的 IP 地址。

结果如下。 文件名和内容的日志字符串将不同:

Make sure your web server displays the following content at
 https://yoursite.com/.well-known/acme-challenge/uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImDfd1 before continuing:

uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImJ8qY.imp4JScFS23eaYWG4tF5e9TSRfGwDuFMmkQTiqN73t8

上面是 certbot 输出的重要部分。 其余输出(见下文)仅在直接在服务器上运行 certbot 命令时使用:

If you don't have HTTP server configured, you can run the following
 command on the target server (as root):
mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
 cd /tmp/certbot/public_html
 printf "%s" uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImJ8qY.imp4JScFS23eaYWG4tF5e9TSRfGwDuFMmkQTiqN73t8 > .well-known/acme-challenge/uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImDfd1
# run only once per server: $(command -v python2 || command -v python2.7 || command -v python2.6) -c  "import BaseHTTPServer, SimpleHTTPServer;  s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler);  s.serve_forever()" Press ENTER to continue

此时,certbot 程序会一直等待,直到您准备好为页面提供服务。 为此,您必须创建必要的文件。

创建验证文件

nano content/.well-known/acme-challenge/uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImDfd1

保存文件后,您需要使用 Pelican 生成站点。

make html

您现在可以在本地测试服务器。 如果一切正常,您可以使用 Pelican 发布您的网站。

make publish

修改 GitLab YML 文件

您不能使用普通的 git 命令将输出文件夹推送到 GitLab。 将站点推送到 GitLab 后,修改 .gitlab-ci.yml 文件以构建页面。

  script:
  - mkdir .public
  - cp -r * .public
  - mv .public public
  - mkdir public/.well-known
  - mkdir public/.well-known/acme-challenge
  - mv .well-known/acme-challenge/uF2HODXEnO98ZRBLhDwFR0yOpGkyg0UyP4QZHImJ8qY public/.well-known/acme-challenge/
  artifacts:
    paths:
    - public
  only:
  - master

如果没有脚本部分下的最后三行,GitLab 将不会创建隐藏页面。

提交并推送此文件后,GitLab 会处理您的文件并创建站点。 完成后,浏览该站点并确保获得正确的结果。 最后,回到运行 certbot 的终端窗口并点击 Enter 接着说。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /home/cprofitt/letsencrypt/config/live/hub.cprofitt.com/fullchain.pem.
 Your cert will expire on 2017-05-19. To obtain a new or tweaked
 version of this certificate in the future, simply run certbot
 again. To non-interactively renew *all* of your certificates, run
 "certbot renew"
 - If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 Donating to EFF:                    https://eff.org/donate-le

使用证书创建自定义域

此时已经创建了许多文件。 您现在可以为您的 GitLab 页面创建一个新域。

选择新域:

要完成该过程:

  • 对于证书 (PEM),请使用letsencrypt/config/archive/yoursite.com/fullchain1.pem 中的文件
  • 对于密钥(PEM),使用letsencrypt/config/archive/yoursite.com/privkey1.pem中的文件

打开这两个文件并将内容粘贴到上图所示的相应字段中。 然后单击创建新域。 很快,您的网站就会使用 SSL 证书提供页面。 请记住,您必须续订 Let’s Encrypt 证书 每 90 天.

您的网页现在使用 SSL。 恭喜!

Save