OpenAMをDockerで立ち上げる(俺俺認証編)

2019年4月18日

SSOSAMLといった、主に大、中企業向けのID連携の話になります。

今回はそんななかオープンに実装できそうなSAML認証を実装すべく
まずはIDプロバイダーとなるOpenAMという物をDockerで立ち上げてみたいと思います。

準備する物

  • docker
  • docker-compose
  • OpenAMを稼働させるためのドメイン名
    ※ローカルでやる場合は、hostsに設定
    ※サーバ証明書作成の時にもこのドメイン名を使う

OpenAMのDockerイメージですが、今回は

https://hub.docker.com/r/vault/openam

こちらのイメージを使ってみます。

基本的には、overviewに書かれているとおりやれば起動する。。。。。。。
と思うのですが、このvault/openamのoverviewはちょっと端折りすぎているので手順を順を追って試してみようと思います。

OpenAM 13 with TLS Support

と書いてあるとおり、証明書の準備が必要になります。また、OpenAMはlocalhostIPでの起動が出来ない仕様になっています。

localhostやIPでは起動が出来ないとは言っても
ローカルで試す環境になりますので、今回は俺俺証明書で対応したいと思います。

証明書の準備自体は

ここにある手順で作成が可能です。
※ドメイン名はあらかじめ「準備する物」で考えておいたドメイン名を使用します。
一通り手順を実行すると、ca~~~というファイルとserver.~~~というファイルが作成されます。

$ ls -l
-rw-rw-r-- 1 ubuntu ubuntu    3 Apr 18 16:28 ca-cert.srl
-rw-rw-r-- 1 ubuntu ubuntu 1082 Apr 18 16:26 ca.crt
-rw------- 1 ubuntu ubuntu  891 Apr 18 16:25 ca.key
-rw-rw-r-- 1 ubuntu ubuntu  956 Apr 18 16:28 server.crt
-rw-rw-r-- 1 ubuntu ubuntu  712 Apr 18 16:25 server.csr
-rw------- 1 ubuntu ubuntu  891 Apr 18 16:15 server.key
-rw------- 1 ubuntu ubuntu 1738 Apr 18 16:41 server.p12

作成されているのが確認できたら
次はOpenAMで使用するPKCS #12ファイルを作成します。

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name tomcat

パスワードを設定するプロンプトが出るので、今回はsecretと入れます。
※各自パスワード設定してください。

keytool -importkeystore -deststorepass secret -destkeypass secret -destkeystore server.keystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass secret -alias tomcat

keytoolコマンドでkyestoreファイルを作成します。
うまく実行出来た結果はこんな感じになります。

$ ls -l
-rw-rw-r-- 1 ubuntu ubuntu    3 Apr 18 16:28 ca-cert.srl
-rw-rw-r-- 1 ubuntu ubuntu 1082 Apr 18 16:26 ca.crt
-rw------- 1 ubuntu ubuntu  891 Apr 18 16:25 ca.key
-rw-rw-r-- 1 ubuntu ubuntu  956 Apr 18 16:28 server.crt
-rw-rw-r-- 1 ubuntu ubuntu  712 Apr 18 16:25 server.csr
-rw------- 1 ubuntu ubuntu  891 Apr 18 16:15 server.key
-rw-r--r-- 1 ubuntu ubuntu 1775 Apr 18 16:42 server.keystore
-rw------- 1 ubuntu ubuntu 1738 Apr 18 16:41 server.p12

続いて
Dockerで起動する準備をします。

Dockerコマンドをoverviewの通りに叩いても良いのですが、面倒なのでdocker-compose.ymlファイルを作成してしまいます。

# docker-compose.yml

version: "2"

services:

  main:
    image: vault/openam:master

    volumes:
      - .:/products
      - /dev/urandom:/dev/random
      - ./server.keystore:/opt/server.keystore
      - ./config:/root

    ports:
      - "8443:8443"

    extra_hosts:
      - "openam.gendosu.jp:127.0.0.1"

    environment:
      KEYSTORE_PASS: secret

あとは

docker-compose up main

を実行すればOpenAMが起動します。

https://[ドメイン名]:8443/openam

でアクセス出来ることを確認できると思います。

トラブルシューティング

extra_hostsでドメイン名を指定しているのは
OpenAMの初回起動時に自信に対してアクセスして初期設定をするために設定してます。

次回予定

OpenAMを使用して実際に認証してサービスにログインできる状態まで設定していく所