【連載 第2回】SSO基盤を作る。AlmaLinux 9初期設定とDocker、オレオレ証明書の完璧な準備

「動かない」原因の9割は、この準備段階で作られる。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回の【第1回】SSOの基礎知識と設計では、SSOの仕組みとActive Directory連携の全体像について学びました。
今回からはいよいよ、実際にキーボードを叩いてサーバーを構築していく「実践編」に入ります。

SSOシステムの構築は、通常のWebサーバー構築よりも遥かに繊細です。
特に「名前解決(ドメイン名)」「SSL証明書」の設定を適当に済ませてしまうと、後のKeycloak設定で「謎のエラー」に永遠に悩まされることになります。

コウ君

先生、VPSを契約してAlmaLinux 9をインストールしました!
とりあえず yum update はしたんですけど、次は何をすればいいですか?
Dockerってやつを入れるんですよね? あと「オレオレ証明書」って何ですか? 怪しい名前ですけど大丈夫なんですか…?

リナックス先生

コウ君、準備が早いわね!
「オレオレ証明書」はエンジニアのスラングで、正式には「自己署名証明書」と言うの。
お金を払って認証局に発行してもらうんじゃなくて、自分で自分を「正しい!」と証明する証明書よ。
本番環境では使えないけど、社内検証や学習用なら必須の技術なの。
今日は、Keycloakがエラーを吐かない「正しいオレオレ証明書」の作り方をみっちり教えるわ!

本記事では、AlmaLinux 9の初期設定から、Docker環境の構築、そしてSSOに不可欠なSSL証明書の作成まで、プロの現場と同じ手順で進めていきます。

🚀 本連載のカリキュラム(全8回)

  • 【第1回】SSOの基礎知識と設計:AD連携を含めた全体像
  • 【第2回】サーバー構築の準備(今回):AlmaLinux 9とDocker、SSL証明書
  • 【第3回】認証基盤 Keycloakの導入:コンテナ起動と日本語化
  • 【第4回】ユーザー情報の統合:Active Directory (AD) とのFederation設定
  • 【第5回】WebアプリのSSO化:OIDCによる認証連携
  • 【第6回】Windows統合認証 (IWA):ADドメイン参加とKerberos設定
  • 【第7回】セキュリティと冗長化:本番運用に向けた堅牢化
  • 【第8回】運用とトラブルシューティング:ログ解析と緊急対応

1. AlmaLinux 9 の初期設定とネットワーク

まずは、OSの足回りを固めます。
VPSや仮想マシンにAlmaLinux 9をインストールした直後の状態を想定しています。

1-1. パッケージの更新とSELinuxの確認

サーバー構築の第一歩は、OSを最新の状態にすることです。

# パッケージの更新
sudo dnf update -y

次に、SELinux(Security-Enhanced Linux)の設定を確認します。
本番環境では有効化(Enforcing)が推奨されますが、構築中はトラブルの原因になりやすいため、今回は一時的に「Permissive(ログ出力のみ)」に設定します。

# 現在の状態確認
getenforce

# Permissiveに変更(一時的)
sudo setenforce 0

# 設定ファイルで恒久的に変更(再起動後も有効)
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

💡 プロのノウハウ:SELinuxは敵か味方か?
初心者は「SELinuxは即無効化(Disabled)」と教わることが多いですが、最近のコンテナ環境ではSELinuxが有効でも問題なく動くように設計されています。
今回は学習の効率を優先してPermissiveにしますが、最終回で本番運用に向けてEnforcingに戻す手順も解説する予定です。

1-2. ファイアウォールの設定 (Firewalld)

SSO環境では、以下のポートを使用します。

  • 80/tcp (HTTP): 証明書発行などの一時利用
  • 443/tcp (HTTPS): Keycloakへのアクセス(必須)
  • 8080/tcp: Keycloakの管理用(開発中のみ使用)

これらを許可します。

# HTTPとHTTPSを許可
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent

# 8080ポートを許可
sudo firewall-cmd --add-port=8080/tcp --permanent

# 設定の反映
sudo firewall-cmd --reload

# 確認
sudo firewall-cmd --list-all

2. Dockerエンジンのインストールと起動

Keycloakや関連システムはすべてDockerコンテナ上で動かします。
AlmaLinux 9標準のPodmanではなく、今回は情報の多い本家Docker CE (Community Edition) を使用します。

2-1. 公式リポジトリの追加

Dockerの公式リポジトリをシステムに追加します。

# 必要なツールのインストール
sudo dnf install -y yum-utils

# リポジトリの追加
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2-2. インストールと起動

最新版のDockerエンジンと、プラグイン版のDocker Composeをインストールします。

# インストール実行
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Dockerサービスの起動と自動起動設定
sudo systemctl start docker
sudo systemctl enable docker

# 動作確認
sudo docker run --rm hello-world

「Hello from Docker!」というメッセージが表示されれば、導入成功です。

2-3. 一般ユーザーでの実行許可(オプション)

毎回 sudo を打つのが面倒な場合は、現在のユーザーを docker グループに追加します。

sudo usermod -aG docker $USER
# 一度ログアウトして再ログインすると反映されます

3. 【最重要】名前解決(hosts)の設定

ここがSSO構築の最大のポイントです。
Keycloakなどの認証システムは、IPアドレス(例: 192.168.1.10)でのアクセスを極端に嫌います。
必ず**FQDN(ドメイン名)**でアクセスできる環境を作る必要があります。

3-1. 今回使用するドメイン名

本連載では、以下の架空のドメイン名を使用します。
あなたの環境に合わせて読み替えても構いませんが、混乱を防ぐために最初はこれに合わせることをお勧めします。

  • SSO基盤(Keycloak): sso.linuxkoubou.local
  • Webアプリ(テスト用): app.linuxkoubou.local

3-2. サーバー側のhosts設定

AlmaLinux自身が、自分自身のドメイン名を知っている必要があります。

sudo vi /etc/hosts

以下のように追記します(IPアドレスはサーバーの実際のプライベートIPにしてください)。

# /etc/hosts
127.0.0.1   localhost
::1         localhost
192.168.1.15  sso.linuxkoubou.local app.linuxkoubou.local

3-3. クライアントPC(Windows)のhosts設定

ブラウザでアクセスする手元のPC(Windows 10/11)も、このドメイン名を知る必要があります。
ここをやらないと、ブラウザで「ページが見つかりません」になります。

  1. メモ帳を「管理者として実行」で開きます。
  2. C:\Windows\System32\drivers\etc\hosts を開きます。
  3. 末尾に以下を追記して保存します。
192.168.1.15  sso.linuxkoubou.local
192.168.1.15  app.linuxkoubou.local

※IPアドレスは、AlmaLinuxサーバーのIPを指定してください。


4. SSL証明書の準備。「正しい」自己署名証明書の作り方

SSOでは、認証情報をCookieやトークンでやり取りするため、HTTPS(SSL/TLS)化が必須です。
しかし、.local ドメインのようなプライベートな名前には、公的な認証局(Let’s Encryptなど)は証明書を発行してくれません。

そこで、自分で証明書を作成します。
ただし、単なる openssl コマンド一発で作った証明書では、最近のChromeやEdgeは「保護されていない通信」としてブロックし、画面すら開かせてくれないことがあります。
これを回避するために、SAN (Subject Alternative Name) を含んだ「モダンなオレオレ証明書」を作成します。

4-1. 作業ディレクトリの作成

mkdir -p ~/sso-project/certs
cd ~/sso-project/certs

4-2. 設定ファイル (openssl.cnf) の作成

SANを含めるための設定ファイルを作成します。

vi openssl.cnf

以下の内容を貼り付けます。

[req]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_req
prompt             = no

[req_distinguished_name]
C  = JP
ST = Tokyo
L  = Chiyoda
O  = LinuxKoubou
CN = sso.linuxkoubou.local

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = sso.linuxkoubou.local
DNS.2 = app.linuxkoubou.local
IP.1  = 192.168.1.15

IP.1 の部分は、ご自身のサーバーIPに合わせてください。

4-3. 証明書と秘密鍵の発行

作成した設定ファイルを使って、証明書(.crt)と秘密鍵(.key)を生成します。

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
  -keyout server.key -out server.crt \
  -config openssl.cnf

これで、10年間有効な証明書セットが完成しました。

  • server.key : 秘密鍵(絶対に漏らしてはいけない)
  • server.crt : 公開鍵証明書(クライアントに配布するもの)

4-4. Windowsへの証明書インストール(信頼させる)

作成した server.crt を、WinSCPやTera Termのファイル転送機能を使って、手元のWindows PCにダウンロードしてください。
そして、以下の手順でWindowsに「この証明書は安全だ」と教え込みます。

  1. ダウンロードした server.crt をダブルクリック。
  2. 「証明書のインストール」をクリック。
  3. 保存場所:「ローカル コンピューター」を選択(要管理者権限)。
  4. 証明書ストア:「信頼されたルート証明機関」を選択してインポート。

これで、ChromeやEdgeでアクセスした際に「保護された通信」として鍵マークが表示されるようになります。


5. ディレクトリ構成の作成と準備完了

最後に、次回以降の作業で使うディレクトリ構成を整えておきましょう。

cd ~/sso-project
mkdir -p keycloak/data
mkdir -p postgres/data
mkdir -p openldap/data
mkdir -p openldap/config

現在のディレクトリ構成は以下のようになっています。

~/sso-project/
├── certs/
│   ├── openssl.cnf
│   ├── server.crt
│   └── server.key
├── keycloak/
├── postgres/
└── openldap/

これで、SSO環境を構築するための「土地(OS)」「重機(Docker)」「通行証(SSL/DNS)」が全て揃いました。


まとめ:土台作りこそ丁寧に

お疲れ様でした! 第2回はここまでです。

今回のチェックポイント:

  • AlmaLinux 9の初期設定とFirewalldの設定ができた。
  • DockerとDocker Composeコマンドが使えるようになった。
  • sso.linuxkoubou.local というドメインでPingが通るようになった。
  • SAN対応のSSL証明書を作成し、Windowsにインポートした。
コウ君

証明書のインポートって初めてやりましたけど、これでブラウザの警告が出なくなるんですね!
地味な作業でしたけど、なんだかプロっぽくてワクワクしてきました。

次回、【第3回】認証基盤 Keycloakの導入では、今回作った土台の上に、いよいよ主役であるKeycloakをコンテナとして立ち上げます。
管理画面にログインした瞬間、あなたのサーバーは「認証局」へと進化します。お楽しみに!

▼ 実践環境を用意しよう ▼

AlmaLinux 9が使える
「おすすめVPS」

VPSランキングを見る

インフラエンジニアへの道
「ITエンジニア転職」

転職エージェントを見る

コメント