VirtualBox上に構築したUbuntu20.04LTS(Desktop)にGitlabをインストールして自己署名証明書によりHTTPSアクセスする方法

# VirtualBox上に構築したUbuntu20.04LTS(Desktop)にGitlabをインストールして自己署名証明書によりHTTPSアクセスする方法

「[前回](https://qiita.com/yasu-suge/items/78676ae4c3065796ce2d)」、SambaをインストールしたUbuntu20.04LTS(Desktop)に、Gitlabをインストールしてみました。

## GitLabをUbuntuにインストール
公式サイトの解説に従ってインストールします。

https://www.gitlab.jp/install/

公式サイトの説明では、GitLab Enterprise Editionをインストールすることをお勧めしています。説明を見たら、お金を払わずにEnterprise Editionを使った場合でも、Community Editionを使った場合と同等であることの説明がありました。

なので、推奨の通り、Enterprise Editionをインストールします。

## 依存パッケージのインストール
以下のコマンドを入力して、依存パッケージをインストールします。

```shell
$ sudo apt update
$ sudo apt-get install -y curl openssh-server ca-certificates
```

次に、メールの通知を送信するために、Postfixをインストールします。

```shell
$ sudo apt-get install -y postfix
```

Postfixのインストール中に設定画面が表示されます。
もしもその時は、'Internet Site'を選択してEnterを押し、
"mail name"には、サーバーの外部DNS名を入力してEnterを押してください。もしも追加の画面が表示される場合は、デフォルト値のまま、Enterを押してください。

![2021-06-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/762fbb8a-bdca-a342-ba16-8c9408a9e005.png)

![2021-06-14 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/cd2220f7-e240-ad38-90ba-f9023c6669e7.png)

## GitLabパッケージのリポジトリへの追加とインストール
GitLabパッケージをリポジトリに追加するため、以下のコマンドを入力します。

```shell
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
```

次に、GitLabパッケージをインストールします。自己署名証明書（いわゆるオレオレ証明書）を使う場合、後で設定しますので、ここではhttpプロトコルでサーバーを指定します。

自分の場合、次のようになりました。

```shell
$ sudo EXTERNAL_URL="http://ubuntu-srv" apt-get install gitlab-ee
```

## 自己証明証明書を作成する

以下の記事を参考にして、自己署名証明書を作成してみます。

https://qiita.com/t-kuni/items/d3d72f429273cf0ee31e

```shell
$ mkdir ssl
$ cd ssl
$ vi subjectnames.txt
subjectAltName = DNS:gitlab.example.jp, IP:192.168.56.2
$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key -subj "/CN=gitlab.example.jp" > server.csr
$ openssl x509 -days 3650 -req -extfile subjectnames.txt -signkey server.key < server.csr > server.crt
$ openssl x509 -in server.crt -text -noout
```

ここで使用している、example.jp というドメイン名は、自由に使ってよいドメイン名になります。
その解説については、以下の記事に書かれていました。

https://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html

作成した証明書をgitlabに組み込んでみます。
以下の記事を参考にしました。

https://tacchan33.hatenablog.com/entry/2019/09/12/223359

```shell
sudo mkdir /etc/gitlab/ssl/
sudo chmod 700 /etc/gitlab/ssl
sudo cp ./server.crt /etc/gitlab/ssl/gitlab.example.jp.crt
sudo cp ./server.key /etc/gitlab/ssl/gitlab.example.jp.key
sudo chmod 404 /etc/gitlab/ssl/gitlab.example.jp.crt
sudo chmod 400 /etc/gitlab/ssl/gitlab.example.jp.key
sudo vi /etc/gitlab/gitlab.rb

external_url 'https://gitlab.example.jp'

#1338行目あたり
NGINXのセクション内のコメントアウトを解除します。
################################################################################
## GitLab Web server
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server
################################################################################

#nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
#nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
↓
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.jp.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.jp.key"


```
## 設定を有効にする
以下のコマンドを投入し、再設定します。

```shell
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
```

## hostsファイルを修正する
WindowsPCのhostsファイルを修正します。
hostsファイルは、C:\Windows\System32\drivers\etc に保存されています。

ホストファイルは、書き込み保護がされているので、ファイルのプロパティ-セキュリティタブから編集ボタンをクリックします。

Usersを選択し、アクセス許可からフルコントロールにチェックを入れ、OKボタンをクリックします。警告のダイアログが出ますが、受け入れてください。
![2021-06-16 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/fd41a90d-03b6-19a6-09a9-9694cde555c1.png)

ファイルを開いて、以下の内容を追加します。
設定値については、適宜自分のサーバー設定に合わせて変更してください。

```shell
192.168.56.2 gitlab.example.jp
```

編集が完了したら、アクセス許可の設定を元に戻してください。
フルコントロール、変更、書き込みのチェックを外して、OKボタンを押すと元に戻ります。

## ブラウザに自己署名証明書を取り込む
以下のURLにアクセスします。アクセスすると赤くなると思います。

[https://gitlab.example.jp](https://gitlab.example.jp)

![2021-06-16 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/1d10e0a9-2da1-5854-dc35-b4c639c42cc7.png)

保護されていない通信の部分をクリックして、警告を参照します。
![pic073.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/ece85838-0ea4-ac93-f7a5-c540e633d466.png)

証明書（無効）となっている部分をクリックして、証明書を確認します。
![2021-06-16 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/76b8b6cf-b5c8-3903-cf71-47031defb79b.png)

詳細タブから、ファイルにコピーのボタンをクリックします。
![2021-06-16 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/1ec22758-2c94-0f87-6e4b-7a7653955f91.png)

証明書のエクスポートウィザードが始まるので、すべてデフォルトを受け入れて、証明書ファイルを保存してください。

証明書ファイルが保存できたら、保存した証明書ファイルをダブルクリックして、証明書ファイルを信頼されたルート証明機関に登録します。

この辺の詳しいやり方については、この解説記事に詳しく書かれています。

https://kekaku.addisteria.com/wp/20190327053337

解説記事のとおりではあるのですが、実際にやってみて記事にしないといけないなと思い、やってみます。

証明書をダブルクリックすると以下のようなエラーっぽい証明書が表示されます。自己署名証明書なので、この証明書を信頼されたルート証明書機関ストアにインストールしてください。という指示が表示されています。
![2021-06-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/c1c4f68b-a2d7-3c47-911f-b725dd456f4b.png)

証明書のインストールのボタンをクリックし、インポートウィザードを起動します。

![2021-06-17 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/34d82294-3b9a-f0c7-fcf6-093a41f6b3a8.png)

保存場所は、現在のユーザーで構いません。次へボタンをクリックします。

証明書をすべて次のストアに配置するを選択し、参照ボタンをクリックします。

証明書のストアは、信頼されたルート証明機関を選択し、OKボタンをクリックします。
![2021-06-17 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/badcbf0a-a717-10fc-baba-ddad4edd10bd.png)

選択できたので、次へボタンをクリックします。
![2021-06-17 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/56c8b417-b3f2-8943-1af4-43174d0e8a1e.png)

完了ボタンをクリックします。
セキュリティ警告のポップアップが表示されるので、はいを選択し、受け入れます。

正しくインポートされましたと表示されたら、終了です。

## 確認
すべてのChromeウィンドウを閉じて、サイトにアクセスしてみます。

赤い表示が消えました。
![2021-06-17 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292074/1a5fd6bf-150e-e54b-c661-a03a3d1bbd66.png)

## おわりに
とりあえず、以上で記事は終了になります。