Ubuntu上に構築した GitBucket を、Apache と mkcert(ローカル認証局) を使ってHTTPS化(SSL対応)した手順のまとめです。
HTTPのまま運用すると、ブラウザからビルド成果物(.exe 等)をダウンロードする際に安全性の警告が出たり、通信のセキュリティ上の問題が発生したりするため、HTTPS運用へ移行しました。
あわせて、「HTTPプロキシからAJPプロキシに変更して通信エラーを解決した理由」 や 「Windows / Visual Studio からの Git クローン時のSSL証明書エラー対策」 についても記述しています。
サーバー構成と前提条件
- OS: Ubuntu Desktop 22.04 LTS
- Webサーバー: Apache2 (リバースプロキシ & SSL終端)
- APサーバー: Tomcat9 (AJPポート: 8009)
- ホスト名:
your-gitserver(任意のローカルホスト名) - アクセスURL:
https://your-gitserver/gitbucket/
1. Apache2 モジュールの有効化
HTTPからHTTPSへのリダイレクトやSSL通信に必要なモジュールを有効化します。
sudo su -
# RewriteモジュールとSSLモジュールの有効化
a2enmod rewrite
a2enmod ssl
a2ensite default-ssl
systemctl restart apache2.serviceこの時点で https://your-gitserver/ にアクセスすると、Apacheのデフォルトページが表示されます(この時点では自前署名証明書のためブラウザの安全警告が出ます)。
2. mkcert によるローカル認証局(CA)の作成と証明書発行
オレオレ証明書の警告(「この接続は非保護です」)を消すため、mkcert を使ってローカル認証局を作成し、証明書を発行します。
# mkcertのインストールとローカルCAの作成
apt install -y mkcert
mkcert -install
# サーバー(your-gitserver)用の証明書と秘密鍵を発行
mkcert your-gitserver
# 生成されたファイルをSSLディレクトリへ移動
mv your-gitserver-key.pem /etc/ssl/private/your-gitserver-key.pem
mv your-gitserver.pem /etc/ssl/certs/your-gitserver.pem3. Apacheのバーチャルホスト設定(★AJP連携がポイント)
HTTP(80番)アクセスを強制的にHTTPS(443番)へリダイレクトし、バックエンドのTomcatへは AJPプロトコル(8009番) で転送するように設定します。
① HTTP(80番ポート)設定: /etc/apache2/sites-available/001-your-gitserver.conf
<VirtualHost *:80>
ServerName your-gitserver
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
AllowEncodedSlashes NoDecode
ProxyPreserveHost On
# HTTPSへリダイレクト
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>② HTTPS(443番ポート)設定: /etc/apache2/sites-available/your-gitserver-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName your-gitserver:443
SSLEngine on
SSLCertificateFile /etc/ssl/certs/your-gitserver.pem
SSLCertificateKeyFile /etc/ssl/private/your-gitserver-key.pem
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
AllowEncodedSlashes NoDecode
ProxyPreserveHost On
# ★重要: AJPプロトコルでTomcatへ転送する
ProxyPass /gitbucket ajp://localhost:8009/gitbucket
ProxyPassReverse /gitbucket ajp://localhost:8009/gitbucket
</VirtualHost>
</IfModule>設定を反映します。
a2ensite your-gitserver-ssl.conf
systemctl restart apache2.service💡 なぜ
http://localhost:8080ではなくajp://localhost:8009なのか? HTTPプロキシ(http://)を使用した場合、ApacheがHTTPSで受け取った通信状態(SSL情報やスキーム)がTomcatへ正しく伝わらず、内部リンクの崩れや無限リダイレクトエラー(ERR_TOO_MANY_REDIRECTS)が発生することがあります。 AJP(ajp://)を使うことで、SSL通信の情報がTomcat/GitBucketへ完璧に引き継がれるため、Chromeでも「この接続は保護されています」と正常に表示されるようになります。
4. GitBucket(gitbucket.conf)の base_url 設定変更
GitBucket側にもHTTPSで動作していることを認識させるため、ベースURLを修正します。
/var/gitbucket/gitbucket.conf を編集します。
base_url=https\://your-gitserver/gitbucket編集後、Tomcatを再起動します。
systemctl restart tomcat9.service5. クライアントPC(Windows / Mac)の証明書設定
サーバー側で作成したルート証明書(rootCA.pem)をクライアントPCにインストールすることで、ブラウザの警告を完全に消去します。
- サーバー上で
mkcert -CAROOTコマンドを実行し、rootCA.pemの場所を確認してクライアントPCへコピーします。 - Windowsの場合:
rootCA.pemをrootCA.cerにリネーム(またはそのまま)ダブルクリック。- 「証明書のインポートウィザード」を起動し、証明書ストアとして 「信頼されたルート証明機関」 を選択してインポートします。
- Macの場合:
rootCA.pemをダブルクリックし、「キーチェーンアクセス」で「常に信頼」に設定します。
これで Chrome 等のブラウザで https://your-gitserver/gitbucket/ にアクセスした際、鍵マークがつき「この接続は保護されています」と表示されます。
6. Gitクライアント(Visual Studio / Git CLI)のSSLエラー対策
git clone や git push を行う際、Gitコマンドは独自に証明書検証を行うため、そのままではSSL証明書エラー(SSL certificate problem)が発生します。
git config --global http.sslVerify false で検証を丸ごと無効化する方法もありますが、セキュリティ上推奨されないため、「特定のサーバー(your-gitserver)のみルート証明書を読み込む」 設定を行います。
クライアントPCの .gitconfig(例: C:\Users\your_user\.gitconfig)に以下を追記します。
[http "https://your-gitserver/"]
sslCAInfo = C:/Users/your_user/Documents/rootCA.pemこれにより、GitHubなど他の外部リポジトリへの安全性を保ったまま、自作サーバー(your-gitserver)のみVisual StudioやGit Bashから正常にSSL通信(Clone/Push)が可能になります。
💡 トラブルシューティング & Tips
iPhoneやスマホからホスト名でアクセスできない場合
iPhoneなどのモバイル端末はローカルのホスト名(.local 以外の単一ホスト名)の名前解決ができません。 スマホからアクセスしたい場合は、MacやPCをプロキシサーバーとして稼働させるか、DNSサーバー(dnsmasq等)をローカルネットワーク内に建てることで回避可能です。

コメント