Docker Compose上のKeycloakをTLS/HTTPS化する(自己署名で)
1.はじめに
上記で利用したlocalhost上のKeycloakを、自己署名証明書を使ってTLS/HTTPSでアクセスできるようにします。
2.自己署名証明書の作成
docker-compose.ymlが存在するディレクトリにて、certsディレクトリを作成します。certsディレクトリ内で、以下のopensslコマンドを実行します。
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
上記コマンドは、Let's Encryptのページ(以下)に記載されているものを利用しました。
これで、certsディレクトリ内に自己署名証明書localhost.crt
とそれに対応する秘密鍵localhost.key
が生成されます。
3.docker-compose.yml
docker-compose.ymlは以下のとおりです。
version: '3'
services:
keycloak:
image: quay.io/keycloak/keycloak:21.1.1
container_name: keycloak
tty: true
stdin_open: true
ports:
- "8080:8080"
- "8443:8443"
volumes:
- ./data/keycloak:/opt/keycloak/data
- ./certs/localhost.crt:/etc/x509/https/tls.crt
- ./certs/localhost.key:/etc/x509/https/tls.key
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_HTTPS_CERTIFICATE_FILE: /etc/x509/https/tls.crt
KC_HTTPS_CERTIFICATE_KEY_FILE: /etc/x509/https/tls.key
command:
- start-dev --http-relative-path /auth
volumesでは、生成した自己署名証明書と秘密鍵を指定しています。
その上で、environmentにKC_HTTPS_CERTIFICATE_FILE
とKC_HTTPS_CERTIFICATE_KEY_FILE
を指定しています。
KC_HTTPS_CERTIFICATE_FILE
とKC_HTTPS_CERTIFICATE_KEY_FILE
については、以下に記載があります。
4.コンソールへTLS/HTTPSでアクセスしてみる
上記へアクセスしてみます。
ですよね。自己署名ですからね。
「詳細設定」を表示して、「localhostにアクセスする(安全ではありません)」を選択します。
アクセスできました。
5.おわりに
localhost上のKeycloakをTLS/HTTPS化できました。(自己署名ですけど)
なんでこんなことをしているかというと、FirebaseでSAMLをやりたいなー、と思ったからです。
しかもFlutterで。(できるのかな...? もちろんWeb Onlyだと思うので、Flutter Webでね。)
FirebaseのAuthenticationでSAMLを有効化してSSOのURLを指定しようとすると、httpsを求められるのですよね...だからです。
これを使って、今度試してみます。
自己署名じゃダメって言われたらどうしよう・・・
Discussion