GitLabページ用のLet’s Encrypt (手動プロセス、非推奨)

警告:この方法はまだ有効ですが、GitLab 12.1で導入されたLet’s Encryptインテグレーションに取って代わられ、非推奨となりました。

GitLab Pagesのウェブサイトを独自ドメインで運用している場合は、SSL/TSL証明書でセキュリティを確保した方がよいでしょう。

Let’s Encryptは、無料で自動化されたオープンソースの認証局です。

要件

このチュートリアルに従うには、すでにお持ちであることが前提です:

  • GitLab にあなたのウェブサイトのソースコードを含むプロジェクトを作成しました。
  • ドメイン(example.com)を取得し、あなたのPagesウェブサイトを指すDNSエントリを追加しました。
  • Pagesプロジェクトにドメインを追加し、所有権を確認しました。
  • プロジェクトをコンピュータにクローンします。
  • あなたのウェブサイトが稼動し、HTTPプロトコルでhttp://example.com

Let’s Encrypt証明書の取得

要件を満たしたら、以下の手順に従って証明書を取得してください。

注意:以下の手順は、MacOS Mojave でテストされています。 他のオペレーティングシステムでは、手順が若干異なる場合があります。 お使いの OS に従って、CertBot の手順に従ってください。
  1. コンピューターでターミナルを開き、リポジトリのルートディレクトリに移動します:

    cd path/to/dir
    
  2. CertBot(Let’sEncryptが証明書のイシュー発行に使用するツール)をインストールします:

    brew install certbot
    
  3. ドメイン (example.com) の証明書をリクエストし、通知を受け取るための電子メールアカウント (your@email.com) を提供します:

    sudo certbot certonly -a manual -d example.com --email your@email.com
    

    また、電子メールアカウントを追加せずに登録することもできますが、証明書の有効期限に関する通知は行われません:

    sudo certbot certonly -a manual -d example.com --register-unsafely-without-email
    
    ヒント:CertBot のコマンドラインオプションに関するドキュメントをお読みください。
  4. 規約への同意を求めるメッセージが表示されますので、A を押して同意し、Y を押してIPログの取得を許可してください。

    CertBot は次のメッセージを表示します:

    Create a file containing just this data:
    
    Rxnv6WKo95hsuLVX3osmT6LgmzsJKSaK9htlPToohOP.HUGNKk82jlsmOOfphlt8Jy69iuglsn095nxOMH9j3Yb
    
    And make it available on your web server at this URL:
    
    http://example.com/.well-known/acme-challenge/Rxnv6WKo95hsuLVX3osmT6LgmzsJKSaK9htlPToohOP
    
    Press Enter to Continue
    
  5. 証明書をイシューする前に、Let’s Encryptがドメインの所有権を確認する必要があります。そのためには、Webサイトのルート下に3つの連続したディレクトリ/.well-known/acme-challenge/Rxnv6WKo95hsuLVX3osmT6LgmzsJKSaK9htlPToohOP/を作成し、最後のフォルダに、前のプロンプトメッセージで参照した内容を含むindex.html ファイルを追加します:

    Rxnv6WKo95hsuLVX3osmT6LgmzsJKSaK9htlPToohOP.HUGNKk82jlsmOOfphlt8Jy69iuglsn095nxOMH9j3Yb
    

    public このファイルは、Let’s Encrypt がドメインの所有権を確認するためにhttp://example.com/.well-known/acme-challenge/Rxnv6WKo95hsuLVX3osmT6LgmzsJKSaK9htlPToohOPにアクセスする必要があることに注意してください。

  6. ファイルを GitLab のリポジトリに追加、コミット、プッシュします。 パイプラインが通ったら、ターミナルのEnterキーを押して証明書の発行を続けます。 CertBot が次のようなメッセージを表示します:

    Waiting for verification...
    Cleaning up challenges
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/example.com/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/example.com/privkey.pem
       Your cert will expire on 2019-03-12. 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 Pagesに証明書を追加します。

証明書が発行されたので、それをPagesサイトに追加しましょう:

  1. GitLab に戻り、プロジェクトのSettings >Pages に移動してドメインを探し、DetailsEditをクリックして証明書を追加します。
  2. ターミナルから、証明書をコピーして最初のフィールドに貼り付けますCertificate(PEM)

    sudo cat /etc/letsencrypt/live/example.com/fullchain.pem | pbcopy
    
  3. 秘密鍵をコピーし、2 番目のフィールドに貼り付けますKey(PEM)

    sudo cat /etc/letsencrypt/live/example.com/privkey.pem | pbcopy
    
  4. 変更を保存]をクリックして、ウェブサイトに適用します。
  5. 設定変更が有効になるまで数分待ちます。
  6. 御社のウェブサイトhttps://example.comをご覧ください。

あなたのサイトでhttps 接続を強制するには、プロジェクトの[設定] >[内部]に移動し、[HTTPSを強制する(有効な証明書が必要です)]をチェックします。

リニューアル

Let’s Encryptの証明書は90日ごとに有効期限が切れるため、定期的に更新する必要があります。 すべての証明書を一度に更新するには、以下を実行します:

sudo certbot renew