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 の対処法メモ

App Storeからアプリケーションをインストールしようとした時に AMD-Action:authenticate:SP というエラーがででいた。 ここを参考に以下のコマンドを実行。

$ sudo -s
# cd /Users
# mkdir Shared
# chown root Shared
# chgrp staff Shared
# chmod 775 Shared
# exit

自分の場合は上記の手順で解決しました。

参考

www.tonymacx86.com

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を使って進めていきます。

環境の用意

VirtualBoxVagrant を利用して 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]からクライアントの設定をしていきます。 f:id:kent056-n:20180624231614p:plain 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 を押します。
上記の操作をした場合、以下のような設定になってるかと思います。 f:id:kent056-n:20180624231726p:plain 次に、Clients の Credentials タブを選択し、Client Authenticator が Client and Secret であることを確認し、Secret をメモしておきます。(Secret は後で使います) f:id:kent056-n:20180624232811p:plain

ユーザーの追加

SSO するユーザーを追加しておきます。 [Users] > [Add user]から追加していきます。今回は Username を u111 、Firest Name を u111 、Last Name を test として登録しておきました。 f:id:kent056-n:20180624234527p:plain 登録できたら、[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 をそれぞれ入力します。 f:id:kent056-n:20180625000237p:plain すると、以下のようなに同意を求められるので同意します。 f:id:kent056-n:20180625000039p:plain 最終的に以下のような画面が表示されたら成功です。 f:id:kent056-n:20180625000536p:plain

おわりに

色々設定できそうなのでやっていきたい。

参考資料

https://qiita.com/rawr/items/d4f45e094c39ef43cbdf

KeycloakでOTP認証を試してみたときのメモ

はじめに

以下の記事を参考に Keycloak で二要素認証をしてみた。
そのときのメモ。結論から言うと、めちゃめちゃ簡単にできた。

qiita.com

準備

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」が設定できます。
利用したい認証タイプの必要条件を変更することで多要素認証が実現できるようですね。今回は以下のような設定にしておきました。 f:id:kent056-n:20180621010202p:plain

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ポリシー」タブと同様に、以下のデフォルト値のまま進めていきました。(また別の記事か何かでいろいろと挙動を確認したい...) f:id:kent056-n:20180621010406p:plain

ユーザ設定

以下の Admin console から、右上の [Admin] > [Managed account] > [Authenticator]の順でユーザの OTP 設定をおこなう。 f:id:kent056-n:20180621013236p:plain ユーザ設定をしてみるを参考に、FreeOTPの設定をしてく。
以下のような画面が表示されたらおそらく設定がうまくできているかと思います。(全く同様の手順で設定できました) f:id:kent056-n:20180621013719p:plain

確認

ここまでできたら、最後に確認をします。
こちらも、認証の確認をしてみると同様の手順でパスワード > OTPの順で入力することで確認できました。

おわりに

かなり簡単にできました。

Freenomで取得した無料ドメインをDigitalOceanに設定する方法

Freenomでドメインの取得

Freenomでドメインを取得する方法については以下のページに詳しく書いてあります。こちらを参考にしてドメインの取得を行なってください。
無料でドメインを取得!Freenomでのドメイン取得方法!&ドメインをさくらインターネットのVPSに設定する方法 – ちんぷいどっとねっと

Freenom での設定

ドメインが取得できたら、必要なDNSの設定を行なっていきます。
トップページから、[Services] → [MyDomains] と選択し、MyDomainsのページへ移動します。
移動したのち、先ほど取得したドメインが表示されていると思うので、[Management Domain] を選択します。
すると、"Managing 【ドメイン名】"と書かれたページに移動しているかと思います。ここで[Management Tools] → [NameServers] を選択してください。
以下のような画面が表示されたら、DigitalOceanのNameserverを入力してください。
f:id:kent056-n:20180509234347p:plain

DigitalOceanでの設定

トップページの [Networking] タグから [Domains] を選択し、Add a domain で先ほど作成したドメインを追加してください。 必要に応じて、ドメイン名を選択して、各種レコードの設定をおこなてください。(自分が試した際はデフォルト設定のままで問題なかったはずです)

VagrantとVirtualBoxでAnsible Towerをインストールしてみた

事前にVagrantVirtualboxをインストールしておく。
以下のコマンドを実行し、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のインストールに関しては以下のページに詳細に書いてあったので、参考にさせてもらいました。

blog.serverworks.co.jp

まず、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というプロジェクトがデフォルトで用意されていることがわかります。
f:id:kent056-n:20171231231129p:plain

このプロジェクトはHello Worldを表示するだけのものであり、以下からPlay Bookの取得を行なっています。 (ジョブ実行後に/var/lib/awx/projects以下に配置されています。)
GitHub - ansible/ansible-tower-samples: Ansible Tower Playbook Samples
f:id:kent056-n:20171231231146p:plain

実際に[テンプレート]タブをクリックし、ロケットマークのジョブ実行アイコンをクリックします。
正しくJobが成功すると、Hello World! が表示されます。