id0-rsa.pubのメモ【Intro to RSA】
Intro to RSA
RSAが何かという話。
以下問題文。
Given the following public key, private key, and encrypted message (c=me mod N), compute the original message (m). Submit your answer as a hex integer (no lead 0x, all lower case characters). (e, N) = (0x3, 0x64ac4671cb4401e906cd273a2ecbc679f55b879f0ecb25eefcb377ac724ee3b1) d = 0x431d844bdcd801460488c4d17487d9a5ccc95698301d6ab2e218e4b575d52ea3 c = 0x599f55a1b0520a19233c169b8c339f10695f9e61c92bd8fd3c17c8bba0d5677e
cを復号すれば良い。dが与えられているのであとは計算するだけ。
$ python >>> hex(pow(c, d, N)) '0x4d801868d894740b2be29309fcd3edcd51bd2c2a685028b89290f9268c727581L'
今日は夜遅いのでこれだけでおしまい。
id0-rsa.pubのメモ【Intro to Hashing】
crypto強くなりたいということでid0-rsaをちまちまやっていき、その記録を残していくお気持ち。
Intro to Hashing
ハッシュ関数とはなんぞやという話。
Introなので記載されている方法に沿ってやればOK。
id0-rsa.pub
のsha256ハッシュの値をさらにmd5ハッシュしてsubmitして終了。
$ printf "id0-rsa.pub" | sha256sum 4b4c17690546df5edf6dd8c5a6c399a02e07367810c95f3d2776b730b4a326c8 $ printf "4b4c17690546df5edf6dd8c5a6c399a02e07367810c95f3d2776b730b4a326c8" | md5sum b25d449d86aa07981d358d3b71b891de
echoじゃなくてprintfコマンドを使う理由としては改行コードが入らないようにするためっぽい。
Notice the use of the command printf as opposed to echo, this prevents a new line from being appended to our data, so the string is piped to the md5sum exactly as is.
AMD-Action:authenticate:SP の対処法メモ
KeycloakでOpenID Connectを使ってSSOしたときのメモ(認可コードフロー)
はじめに
Keycloak で OpenID Connect を使って SSO をしてみたときのメモです。
今回の内容は以下の記事を参考に実際にやってみた際の手順になります。
ですので、詳しい内容は以下の記事をみていただけたらと思います。
qiita.com
前提条件
Keycloak に関しては、以下の記事で構築済みとします。(http://localhost:8080 で起動済みであることを前提とします)
http://kent056-n.hatenablog.com/entry/2018/06/11/235544kent056-n.hatenablog.com
また、認可コードフローに関しては先ほど紹介した記事の「というか、認可コードフローってなんだっけ?」に記載してありますので、割愛します。
環境
Relying Party の環境
項目 | 値 |
---|---|
OS | CentOS 7.2 |
URL | http://192.168.33.11 |
クライアントID(client_id) | apache24 |
リダイレクトURI | http://192.168.33.11/private/callback |
OpenID Provider(Keycloak の環境)
項目 | 値 |
---|---|
OS | CentOS 7.2 |
URL | http://192.168.33.10:8080 |
エンドポイント | http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration |
Relying Party(RP)構築
Relying Party に関しては、「Relying Party (RP) を作る」を参考にmod_auth_openidc
を使って進めていきます。
環境の用意
VirtualBox と Vagrant を利用して Relying Party のサーバーを用意していきます。
$ mkdir relying_party $ cd relying_party $ vagrant init bento/centos-7.2
次に、ip アドレスと ssh のポート番号が重複しないように Vagrantfile を編集し、以下の二行を追記します。
config.vm.network "private_network", ip: "192.168.33.11" config.vm.network "forwarded_port", guest: 22, host: 22222, id: "ssh"
編集できたら保存し、サーバーの起動及びログインをします。
$ vagrat up $ vagrant ssh
ログインできたら、必要なものをインストールしていきます。vim は任意です。
# sudo -s # yum install vim # yum install mod_auth_openidc
Keycloak 設定
Keycloak 管理コンソールに管理者でログインしておきます。 このとき、realm が Master になっていることを確認してください。(realm が Master である必要はないですが、realm によって設定が変わる箇所があるので一応...)
クライアントの設定
[Clients] > [Create]
からクライアントの設定をしていきます。
Client ID は Relying Party の設定で書いた apache24、Client Protocol はopenid-connectを選択して Save を押します。 また、Access Type を public から confidential 、Consent Required を ON 、Valid Redirect URIs にhttp://192.168.33.11/private/callback
をそれぞれ設定して Save を押します。
上記の操作をした場合、以下のような設定になってるかと思います。
次に、Clients の Credentials タブを選択し、Client Authenticator が Client and Secret であることを確認し、Secret をメモしておきます。(Secret は後で使います)
ユーザーの追加
SSO するユーザーを追加しておきます。
[Users] > [Add user]
から追加していきます。今回は Username を u111 、Firest Name を u111 、Last Name を test として登録しておきました。
登録できたら、[Credentials]
タブの Manage Password からパスワードを設定しておきます。
Relying Party 設定
mod_auth_openidc の設定
「mod_auth_openidc(Apache)を設定する」を参考に httpd.conf を編集して Relying Party の設置をおこなっていきます。
# vim /etc/httpd/conf/httpd.conf
今回は httpd.conf に以下の内容を追記しました。
IDCPreservePost ディレクティブに関してはエラーが出ていたので、コメントアウトしました(ちゃんと調べよう...)
個人的に感じた注意点としては以下の二点ですかね。
・OIDCProviderMetadataURL ディレクティブに設定する URL が realm によって変わる
http://192.168.33.10:8080/auth/realms/【realm 名】/.well-known/openid-configuration
・OIDCClientSecret に先ほどメモしておいた Secret を入れる
LoadModule auth_openidc_module modules/mod_auth_openidc.so OIDCProviderMetadataURL http://192.168.33.10:8080/auth/realms/master/.well-known/openid-configuration OIDCClientID apache24 OIDCClientSecret c45d6804-40d6-4b46-8d62-6f6b36bba7d6 OIDCResponseType code OIDCScope "openid" OIDCSSLValidateServer Off OIDCProviderTokenEndpointAuth client_secret_basic OIDCRedirectURI http://192.168.33.11/private/callback OIDCCryptoPassphrase passphrase #OIDCPreservePost On <Location /private> AuthType openid-connect Require valid-user </Location> <Location /public> OIDCUnAuthAction pass AuthType openid-connect Require valid-user </Location>
コンテンツの追加
ドキュメントルート以下にコンテンツをおいておきましょう。今回は /var/www/html/private/
以下に 以下のような html ファイルを index.html としておいておきます。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>SSO の確認</title> </head> <body> <h1> success!!</h1> </body> </html>
確認
http://192.168.33.11/private/index.html
にアクセスします。
以下のように Keycloak のログイン画面へ遷移するので、Username と Password をそれぞれ入力します。
すると、以下のようなに同意を求められるので同意します。
最終的に以下のような画面が表示されたら成功です。
おわりに
色々設定できそうなのでやっていきたい。
参考資料
KeycloakでOTP認証を試してみたときのメモ
はじめに
以下の記事を参考に Keycloak で二要素認証をしてみた。
そのときのメモ。結論から言うと、めちゃめちゃ簡単にできた。
準備
Keycloak のデプロイは以下の記事を参考にすでにできているものとします。あとは、「FreeOTP」がインストールされた IPhone を用意します。(今回は試していないのですが Google Authenticator でもできるようですね) http://kent056-n.hatenablog.com/entry/2018/06/11/235544kent056-n.hatenablog.com
やったこと
上記で紹介した qiita に書かれている記事通りの手順で問題なくできた。
Keycloak 管理設定
まず、Keycloak管理設定を確認してみるを参考に、Keycloak管理コンソールにアクセスして設定していきます。
前回の記事通りの設定であれば、http://192.168.33.10:8080/auth/admin/master/console/
にアクセスして、[Configure] > [Authentication]
で認証フローの設定画面にたどり着けます。
記事にも記載されていますが、こちらの認証フロー設定画面で、各認証タイプに対して、「ALTERNATIVE」、「REQUIRED」、「OPTIONAL」、「DISABLED」が設定できます。
利用したい認証タイプの必要条件を変更することで多要素認証が実現できるようですね。今回は以下のような設定にしておきました。
OTPポリシー設定
先ほどの Authentication のページの OTP Policy タブをクリックすることで OTP のポリシーが設定できます。
設定できる項目としては、「OTP Type」、「OTP Hash Algorithm」、「Number Digits」、「Look Ahead Window」、「OTP Token Period」、「Supported Application」があります。それぞれの設定できる値と?
マークに記載されている説明をまとめてみました。
項目 | 説明 | 設定値 |
---|---|---|
OTP Type | totp is Time-Based One Time Password. 'hotp' is counter base one time password in which the server keeps a counter to hash against | TimeBased・Councer Based |
OTP Hash Algorithm | What hashing algorithm should be used to generate the OTP. | SHA1・SHA256・SHA512 |
Number of Digits | How many digits should the OTP have? | 6・8 |
Look Ahead Window | How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? | 任意の値?(デフォルトは 1) |
OTP Token Period | How many seconds should an OTP token be valid? Defaults to 30 seconds. | 任意の値?(デフォルト 30) |
Supported Applications | Applications that are known to work with the current OTP policy | FreeOTP, Google Authenticator |
OTP Hash Algorithm といったものだけでなく、TOTP、HOTP といった OTP Type まで UI から選べるのは良いですね。(Supported Applications の追加はできないのかどうか気になる...)
今回は「OTPポリシー」タブと同様に、以下のデフォルト値のまま進めていきました。(また別の記事か何かでいろいろと挙動を確認したい...)
ユーザ設定
以下の Admin console から、右上の [Admin] > [Managed account] > [Authenticator]
の順でユーザの OTP 設定をおこなう。
ユーザ設定をしてみるを参考に、FreeOTPの設定をしてく。
以下のような画面が表示されたらおそらく設定がうまくできているかと思います。(全く同様の手順で設定できました)
確認
ここまでできたら、最後に確認をします。
こちらも、認証の確認をしてみると同様の手順でパスワード > OTP
の順で入力することで確認できました。
おわりに
かなり簡単にできました。
Freenomで取得した無料ドメインをDigitalOceanに設定する方法
Freenomでドメインの取得
Freenomでドメインを取得する方法については以下のページに詳しく書いてあります。こちらを参考にしてドメインの取得を行なってください。
無料でドメインを取得!Freenomでのドメイン取得方法!&ドメインをさくらインターネットのVPSに設定する方法 – ちんぷいどっとねっと
Freenom での設定
ドメインが取得できたら、必要なDNSの設定を行なっていきます。
トップページから、[Services] → [MyDomains] と選択し、MyDomainsのページへ移動します。
移動したのち、先ほど取得したドメインが表示されていると思うので、[Management Domain] を選択します。
すると、"Managing 【ドメイン名】"と書かれたページに移動しているかと思います。ここで[Management Tools] → [NameServers] を選択してください。
以下のような画面が表示されたら、DigitalOceanのNameserverを入力してください。
DigitalOceanでの設定
トップページの [Networking] タグから [Domains] を選択し、Add a domain で先ほど作成したドメインを追加してください。 必要に応じて、ドメイン名を選択して、各種レコードの設定をおこなてください。(自分が試した際はデフォルト設定のままで問題なかったはずです)
VagrantとVirtualBoxでAnsible Towerをインストールしてみた
事前にVagrantとVirtualboxをインストールしておく。
以下のコマンドを実行し、CentOS7系のboxを入手する。
$ mkdir tower $ cd tower $ vagrant init bento/centos-7.2 $ vagrant up
Ansible TowerはRAMが2GB以上でないと動かないのでVagrantfileに以下の内容を追記する。
$ vim Vagrantfile config.vm.provider "virtualbox" do |vb| vb.memory = "2048" end
また、以下の行のコメントアウトを外して、IPアドレスの設定も行なっておきます。
config.vm.network "private_network", ip: "192.168.33.10"
ここまでできたら、AnsibleとAnsibleTowerをそれぞれインストールする。
Ansible Towerのインストールに関しては以下のページに詳細に書いてあったので、参考にさせてもらいました。
まず、Ansibleをインストール時、EPEL リポジトリを使用するため以下を実行して有効化します。
$ sudo yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Ansible Tower インストール時に以下のリポジトリが必須のため、yum-config-managerで有効化します。
$ sudo yum -y install yum-utils (yum-config-managerが入っていない場合のみ) $ sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
パッケージを最新の状態にする。
$ sudo yum update
Ansibleをインストールする。
$ sudo yum install ansible wget
Ansible Tower をインストール及び解凍する。
$ wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz $ tar xvzf ansible-tower-setup-latest $ cd ansible-tower-setup-【バージョン】
Inventoryファイルを編集し、パスワードを設定する。
$ vi inventory admin_password='【パスワード】' pg_password='【パスワード】' rabbitmq_password='【パスワード】'
$ sudo ./setup.sh
セットアップが成功したら、実際にプレイブックを実行してみます。
プレイブックの実行に関しては以下のスライドを参考にさせてもらいました。
Ansible tower 構築方法と使い方
以下のコマンドでIPアドレスを確認してブラウザでアクセスします。ユーザー名はadmin、パスワードは先ほどInventoryファイルに記載したものでログインすることができます。
$ ip a
ブラウザでアクセスするとライセンスを要求されるので画面の指示にしたがって必要事項を記入していきます。
[プロジェクト]タブをクリックすると、Demo Projectというプロジェクトがデフォルトで用意されていることがわかります。
このプロジェクトはHello Worldを表示するだけのものであり、以下からPlay Bookの取得を行なっています。 (ジョブ実行後に/var/lib/awx/projects
以下に配置されています。)
GitHub - ansible/ansible-tower-samples: Ansible Tower Playbook Samples
実際に[テンプレート]タブをクリックし、ロケットマークのジョブ実行アイコンをクリックします。
正しくJobが成功すると、Hello World! が表示されます。