2016年8月13日土曜日

Tomcatのマルチインスタンス化

Tomcatではマルチインスタンスをサポートしている。
異なるIPとポート番号で複数のインスタンスを起動させることが可能である。
  1. 事前にインストールしたTomcatフォルダ直下にインスタンスフォルダを作成する。

    <フォルダ構成>
    C:\Program Files\Apache Software Foundation\Tomcat 9.0\instance
          \instance1
          \instance2
  2. instance1とintance2のフォルダには、Tomcatインストールフォルダから以下のフォルダをコピーする。
    ・conf
    ・logs
    ・temp
    ・webapps
    ・work
  3. instance2のconf\server.xmlファイルを開き、ポート番号がinstance1と重複しないように変更する。例えば、以下のように設定する。

    instance1のポート番号

    HTTPポート:8080
    シャットダウンポート:8005
    AJPポート:8009
    リダイレクトポート:8443

    instance2のポート番号
    HTTPポート:8081
    シャットダウンポート:8006
    AJPポート:8010
    リダイレクトポート:8444
  4. コマンドプロンプトを起動する。
    ・JAVA_HOMEには、JAVAのインストール先ファイルパスを指定する。
    ・JAVA_JREには、JREのインストール先ファイルパスを指定する。
    ・CATALINA_HOMEには、Tomcatのイントール先ファイルパスを指定する。
    ・CATALINA_BASEには、instance1またはinstance2のファイルパスを指定する。
    ・service installコマンドを実行し、インスタンスをインストールする。

    <instance1のインストール>

    <instance2のインストール>
  5. インスタンスを以下のコマンドで切り替えることができる。

    Tomcat9w.exe //ES/instance1
    Tomcat9w.exe //ES/instance2

Tomcat 9 をインストール

最新版である9.0.0.M9をインストールしてみる。

  1. 以下のサイトからWindows用インストーラをダウンロードする。
    https://tomcat.apache.org/download-90.cgi
  2. ダウンロードしたインストーラをダブルクリックする。
  3. セットアップ画面が表示されるため、「Next」ボタンを押す。
  4. ライセンス許諾画面が表示されるため、「I Agree」ボタンを押す。
  5. インストールするコンポーネントを選択する。適宜設定し、「Next」ボタンを押す。
  6. ポート番号や管理ユーザのID/パスワードなどの設定画面が表示される。適宜設定し、「Next」ボタンを押す。
  7. 利用するJVMを選択する(1.7以降)。「Next」ボタンを押す。
  8. Tomcatのインストール先フォルダを指定する。「Install」ボタンを押すと、インストールが開始される。
正常にインストールが完了すると、Tomcatが自動起動される。
画面右下に、以下のようなマークが表示される。右クリックして「STOP」すれば停止できる。




以下のURLにアクセスし、Tomcatの管理画面が表示されることを確認する。
http://localhost:8080/



さらに、ログインすると、以下のようなステータス画面が表示される。


2016年5月29日日曜日

R言語のインストール



  1. 以下のサイトにアクセスし、「Getting Started」の「download R」リンクをクリックする。

    https://www.r-project.org/
  2. インストールするマシンが存在する場所に最も近いミラーサイトを選択する。
  3. Linux、MacまたはWindows用の基本パッケージを選択する。
  4.  install R for the first time」を選択する。
  5. Download R 3.3.0 for Windows」を選択する。
  6. ダウンロードしたexeファイルをダブルクリックすると、インストールが開始される。
  7. 「日本語」を選択し、「OK」ボタンを押す。

  8. セットアップウィザード画面で「次へ」ボタンを押す。
  9. そのまま「次へ」ボタンを押す。
  10. コンポートの選択では、そのまま「次へ」ボタンを押す。
  11. 起動オプションでは、そのまま「次へ」ボタンを押す。
  12. プログラムグループはそのまま「R」に設定し、「次へ」ボタンを押す。
  13. 追加タスクの選択ではデフォルトの値のまま、「次へ」を押下する。
    インストールが開始される。
  14. インストールが完了したら、「完了」ボタンを押下する。
  15. 下記のようなRコンソール画面が表示されることを確認する。

2016年5月21日土曜日

Go言語 開発環境の構築手順

Eclipseを使って、Go言語の開発環境を構築する。
なお、Go言語を開発するためには、Eclipse用プラグイン(GoClipse)を事前に入手・設定する必要がある。また、オートコンプリート機能(*)を使う際には、別途gocodeが必要となる。

(*)自動的に、関数のメソッドやフィールドの候補を補ってくれる機能。

Eclipseのインストール

  1. 以下のサイトからEclipseのインストール媒体をダウンロードする(最新のNEONシリーズを選択)。
    https://mergedoc.osdn.jp/
  2. ZIPファイルを解凍する。解凍したフォルダ下のeclipse.exeを起動する。
  3. Eclipse上の「ヘルプ」メニューから「新規ソフトウェアのインストール」を選択する。
    以下を入力して「Next」ボタンを押す。
    http://goclipse.github.io/releases/
  4. さらに「Next」ボタンを押すと、利用許諾画面が表示される。
    同意するにチェックし、「Finish」ボタンを押す。インストールが開始される。
  5. Eclipseの再起動が求められるため、再起動する。

Eclipseでの設定(GoClipse&gocodeの設定)

  1. Eclipse上の「ウィンドウ」メニュー→「設定」を選択する。
  2. 左欄から「Go」を選択し、Go言語をインストールしたフルパスを指定する。
    「OK」ボタンを押す。
  3. Eclipse上の「ウィンドウ」メニュー→「設定」を選択する。画面左側で「Go」を選択し、「GOPATH」にgocodeをインストールするフォルダを指定する。「OK」ボタンを押す。
  4. Eclipse上の「ウィンドウ」メニュー→「設定」を選択する。
    画面左側で「Go」を選択し、「Tools」を選択する。「Download」ボタンを押す。
    これで、オートコンプリート機能が使えるようになる。

Goプロジェクトの作成

  1. Eclipseの「File」→「New」→「Project」を選択する。
  2. 「Go Project」を選択し、「Next」を押す。

  3. プロジェクト名(任意)を指定し、「Finish」ボタンを押す。
    以下のようなプロジェクトが作成されていることを確認する。
  4. 「src」を右クリックし、「Folder」を選択する。任意のフォルダ名を指定する。
  5. 作成したフォルダ下に、下記のようなGoプログラム(拡張子は.goとすること)を記述したら、プロジェクトを右クリックし、実行ボタンを押す。


  6. Console画面に実行結果が表示されることを確認する。



Go言語のインストール


  1. 以下のURLにアクセスする。
    https://golang.org/dl/
  2. 「Microsoft Windows」版をダウンロードする。

  3. ダウンロードした「go1.6.2.windows-amd64.msi」をダブルクリックする。
  4. Windows画面が立ち上がるため、「Next」ボタンを押す。

  5. ライセンス許諾画面に遷移するため、チェックボタンを押し、「Next」ボタンを押す。

  6. インストール先フォルダを指定し、「Next」ボタンを押す。次に、「Install」ボタンを押せば、インストールが開始される。
  7. インストールが完了したら、「Finish」ボタンを押す。
    Windows版では、Go言語へのパスの環境変数は自動で設定されるため、手動での設定は不要である。
  8. 以下の単純なプログラムを記載し、hello.goファイルとして保存する。

    package main

    import  "fmt"

    func main() {
       fmt.Println("Hello,world!")
    }
     
  9. コマンドプロンプトを起動する。
    以下のコマンドを実行し、"Hello.world!"と表示されることを確認する(場合によっては管理者権限でコマンドプロンプトの起動が必要)。



    (補足)
    一旦、ビルドして実行ファイル(exe)を生成し、exeから実行することも可能。


2016年4月3日日曜日

OpenAM 13.0.0 ソースのビルド

OpenAM13.0.0のソースをビルドする手順を説明する。
なお、ビルドする際には、Maven v3.1.0以上が必要である。

  1. 以下のサイトからOpenAMソース一式をダウンロードする。
    (事前にアカウント登録が必要である)
    https://stash.forgerock.org/projects/OPENAM
  2. SecureID認証モジュールで使ってるjarの中にはPUBLICに公開されていないものがある模様。そのため、SecureID認証モジュールを含めてOpenAMをコンパイルしたい場合は、別途mvnのリポジトリに登録する必要がある。以下のコマンドを実行してmvnリポジトリに登録する。

    c:\work\openam-master>mvn  install:install-file -Dfile=./authapi-2005-08-12.jar -DgroupId=external -DartifactId=authapi -Dversion=2005-08-12 -Dpackaging=jar

    なお、SecureID認証モジュールを含めたくない場合は、以下のpom.xmlファイルからopenam-auth-securidの箇所をコメントアウトする。
    openam-authentication/pom.xmlopenam-server-only/pom.xml
  3. 以下のコマンドを実行し、OpenAMのソースをビルドする。
    c:\work\openam-master>mvn  install clean
ビルドに成功した場合、以下のディレクトリにOpenAMのwarファイルが作成される。

$TRUNK_HOME/openam/openam-server/target

2016年3月26日土曜日

OpenAM13.0.0でStateless Sessionを使ってみた。

OpenAM13.0.0の新機能の1つであるStateless Session(ステートレスセッション)を使ってみた。

V12までは、認証クッキーにセッション情報と紐づくセッションIDを格納していた
(OpenAM本体(正確にはOpenDJ)でセッション情報を管理)
そのため、冗長構成の場合、各OpenAMサーバ間でセッション情報を共有するために、OpenDJのレプリケーション機能が使われていた。この方法だと、大規模になるにつれて、セッションの共有処理が性能のボトルネットになりうる。
ステーレスセッション機能を使えば、セッション情報そのものがクライアント端末とOpenAM間でやりとりされるため、セッション情報の共有処理自体が必要なくなるというわけだ。
セキュリティも考慮し、セッション情報の署名及び暗号化機能を提供している。
(署名検証と復号化はオーバーヘッドになるかもしれない。。。)

ポイントは以下である。
  • ステートレスセッションが利用できるのは一般ユーザのみ。
    トップレベルの管理ユーザ(amAdmin)は、ステートフルセッションしか使えない。ステートレスセッションだと、暗号化されているとはいえ、クライアントにセッション情報そのものが通知されてしまうため、セキュリティを考慮してのことか。
  • セッション管理がつかえない。
    ステートレスセッションを有効にすると、従来のセッション管理が使えなくなる。換言すれば、セッション情報のモニタリングや認証ユーザの即時無効化ができなくなる。
  • ステートレスセッションを使える機能には制限がある
    残念ながら、13.0.0では、ステートレスセッションが利用できる機能が限られているらしい。OpenAMのマニュアルをみると、以下の機能が制限になっている。現状、SAMLで使えないのは残念。
    • Session upgrade
    • Session quotas
    • Authorization policies with conditions that reference current session properties
    • Cross-domain single sign-on
    • SAML v2.0 single sign-on and single logout
    • SAML 1.x single sign-on
    • SNMP session monitoring

実際に、ステートレスセッションのCookieをキャプチャーしてみた。
比較するために、スレートフルセッションのCookieも採取した。

■ステートフルセッションのCookie
AQIC5wM2LY4SfczzPRZPPHAkzI7A_Tnam7j70ysaIRw-588.*AAJTSQACMDEAAlNLABM3NTUwODMzNjAyNTk0NDk3MjA5AAJTMQAA*

■ステートレスセッションのCookie
AQIC5wM2LY4SfcwNh6HptjlRcECnoKwmcDYSjjqSBxv9JH8.*AAJTSQACMDEAAlNLABQtNDMzMDA4MzM4NDU3OTI0OTU2OAACUzEAAA..*eyAidHlwIjogIkpXVCIsICJhbGciOiAiSFMyNTYiIH0.eyAic2VyaWFsaXplZF9zZXNzaW9uIjogIntcInNlY3JldFwiOlwiZDgyMGE5YjctMWIyYS00OGRiLThiNWUtYTJjNTMyOGUyYzNhXCIsXCJleHBpcnlUaW1lXCI6MTQ1OTAwMzg5NDM1MixcImxhc3RBY3Rpdml0eVRpbWVcIjoxNDU4OTk2Njk0MzUyLFwic3RhdGVcIjpcInZhbGlkXCIsXCJwcm9wZXJ0aWVzXCI6e1wiQ2hhclNldFwiOlwiVVRGLThcIixcIlVzZXJJZFwiOlwidGVzdFwiLFwiRnVsbExvZ2luVVJMXCI6XCIvT3BlbkFNLTEzLjAuMC9VSS9Mb2dpbj9yZWFsbT0lMkYmZ290bz1odHRwJTNBJTJGJTJGb3BlbmFtLmxvY2FsLmNvbSUzQTgwODAlMkZPcGVuQU0tMTMuMC4wJTJGYmFzZSUyRkFNQWRtaW5GcmFtZVwiLFwic3VjY2Vzc1VSTFwiOlwiL09wZW5BTS0xMy4wLjAvY29uc29sZVwiLFwiY29va2llU3VwcG9ydFwiOlwidHJ1ZVwiLFwiQXV0aExldmVsXCI6XCIwXCIsXCJTZXNzaW9uSGFuZGxlXCI6XCJzaGFuZGxlOkFRSUM1d00yTFk0U2ZjeFJmQkNoVF9BNU1HQlZjSkJjSHBZbWNpUDdKM3V3RURRLipBQUpUU1FBQ01ERUFBbE14QUFBQUFsTkxBQlF0TWpnek5qQXdNVEUxTVRZME5UWTVNVFk0TncuLipcIixcIlVzZXJUb2tlblwiOlwidGVzdFwiLFwibG9naW5VUkxcIjpcIi9PcGVuQU0tMTMuMC4wL1VJL0xvZ2luXCIsXCJQcmluY2lwYWxzXCI6XCJ0ZXN0XCIsXCJTZXJ2aWNlXCI6XCJ0b3RwXCIsXCJzdW4uYW0uVW5pdmVyc2FsSWRlbnRpZmllclwiOlwiaWQ9dGVzdCxvdT11c2VyLGRjPW9wZW5hbSxkYz1mb3JnZXJvY2ssZGM9b3JnXCIsXCJhbWxiY29va2llXCI6XCIwMVwiLFwiT3JnYW5pemF0aW9uXCI6XCJkYz1vcGVuYW0sZGM9Zm9yZ2Vyb2NrLGRjPW9yZ1wiLFwiTG9jYWxlXCI6XCJqYVwiLFwiSG9zdE5hbWVcIjpcIjEyNy4wLjAuMVwiLFwiQXV0aFR5cGVcIjpcIlRPVFB8RGF0YVN0b3JlXCIsXCJIb3N0XCI6XCIxMjcuMC4wLjFcIixcIlVzZXJQcm9maWxlXCI6XCJSZXF1aXJlZFwiLFwiQU1DdHhJZFwiOlwiNjczMmMzZTgwYzU4Y2YzNTAxXCIsXCJjbGllbnRUeXBlXCI6XCJnZW5lcmljSFRNTFwiLFwiYXV0aEluc3RhbnRcIjpcIjIwMTYtMDMtMjZUMTI6NTE6MzRaXCIsXCJQcmluY2lwYWxcIjpcImlkPXRlc3Qsb3U9dXNlcixkYz1vcGVuYW0sZGM9Zm9yZ2Vyb2NrLGRjPW9yZ1wifSxcIm1heFRpbWVcIjoxMjAsXCJzZXNzaW9uSURcIjpudWxsLFwiY2xpZW50SURcIjpcImlkPXRlc3Qsb3U9dXNlcixkYz1vcGVuYW0sZGM9Zm9yZ2Vyb2NrLGRjPW9yZ1wiLFwiY2xpZW50RG9tYWluXCI6XCJkYz1vcGVuYW0sZGM9Zm9yZ2Vyb2NrLGRjPW9yZ1wiLFwic2Vzc2lvblR5cGVcIjpcInVzZXJcIixcIm5ldmVyRXhwaXJpbmdcIjpmYWxzZSxcIm1heENhY2hpbmdcIjozLFwibWF4SWRsZVwiOjMwfSIgfQ.XKISz77Cx0Q41672Sq6LOGBAUR8SK7GzFa7-w4HjPQw

セッション情報は、デフォルト設定では、署名はされているが、暗号化はされていないため、注意が必要である。
サポートしている署名アルゴリズムと暗号化アルゴリズムは以下である。

■署名アルゴリズム
HS256 - HMAC using SHA-256 hash algorithm.
HS384 - HMAC using SHA-384 hash algorithm.
HS512 - HMAC using SHA-512 hash algorithm.
RS256 - RSA using SHA-256 hash algorithm.


■暗号化アルゴリズム
AES-128 in CBC mode with HMAC-SHA-256 for message authentication, using a random Content Encryption Key (CEK). The CEK is encrypted using the configured RSA public key.

ログアウトについて

ステートレスセッションを有効にした場合、1つのOpenAMでログアウトしても、セッションの有効期限内であれば、他のOpenAMにアクセスできてしまう。この問題に対して、セッションブラックリストという機能を提供している。ログアウトしたユーザに確実に再認証させるために、ログアウトしたセッション情報(=ブラックリスト情報)は各OpenAMサーバ間で共有できる機能である。
デフォルト値はOFFになっているため注意が必要である。
(この機能はまだ実機確認してないため、今度ためしてみよう)

OpenAM13.0.0で二段階認証(ID/パスワード+TOTP認証)を使ってみる

ID/パスワード認証+ワンタイムパスワード認証という二段階認証を試してみる。
ワンタイムパスワード認証(以降、OATH認証と略す)を使う際、事前に、クライアントとサーバ間で同じ秘密鍵を共有する必要がある。
OpenAM13.0.0では、この初期登録時の負荷を下げる以下のような新機能を提供している。
  1. 最初に、利用者はOpenAMにID/パスワードでログインする。
  2. OTP生成アプリ(Google Authenticator等)を使い、OpenAMが表示するQRコードをスキャンし、クライアントのデバイスを登録する。
    (このタイミングで、クライアント側に秘密鍵が自動的に登録される)
  3. OTP生成アプリが発行したOTPを使って、OpenAMにログインする。
今回の動作確認では、ワンタイムパスワード(以降、OTPと略す)の発行には、Google Authenticatorを利用する。
また、OpenAMでは、以下の2つのOATH認証方式をサポートしているが、今回は「TOTP」を使ってみる。
  • 時間ベースのOTP(TOTP:Time-based One Time Password RFC 6238)
  • カウンターベースのOTP(HOTP:HMAC-based One-Time Password RFC 4226
OpenAMの設定(事前準備)

  1. OpenAMの管理コンソールに管理ユーザでログインする。
  2. 「/(レルム)」→「Authentication」→「Modules」の順に押す。
    「Add Module」を押し、認証モジュールの名前(任意)と認証タイプ(ForgeRock Authenticator)を選択する。「Create」ボタンを押す。
  3. OATH認証の設定画面で、TOTP認証に必要となる項目を設定する。
    設定後、「Save Change」ボタンを押す。
  4. 「/(レルム)」→「Authentication」→「Chains」の順に押す。
    「Add Chain」を押し、新規に認証連鎖を作成する。このとき、認証連鎖の名前(任意)を入力する。「Create」ボタンを押す。
  5. 作成した認証連鎖画面において、データストア認証→TOTP認証の順番になるように設定する。また、条件として「REQURED(必須)」を選択する。「Save Changes」ボタンを押す。
  6. 「/(レルム)」→「Authentication」→「Settings」の順に押す。
    「組織認証設定」項目において、先ほど作成した認証連携名「totp」を選択する。
    「Save Changes」ボタンを押す。
以上で、OpenAM側の環境設定は完了である。


動作確認

  1. 事前に登録していたユーザでOpenAMにログインする (ID/パスワード認証)。
  2. OTP認証画面に遷移する。
    まだデバイスが未登録なので、「DEVICE REGISTER」ボタンを押す。
  3. QRコードが画面表示されるため、Google Authenticatorで読み取る。
  4. Google Authenticatorで生成したOTPを、OpenAMの認証画面に入力する。


  5. TOTP認証が成功し、ユーザのプロフィール画面に遷移することを確認する。

(補足)

  • 上手く動作しない(デバックする)際には、OpenAMのデバックログを確認する。
    ログファイル名は、「amAuthAuthenticatorOATH」である。
  • 管理ユーザでログインする際には、以下のように認証モジュールを明に指定して、TOTP認証を回避する。

    http://openam.local.com:8080/OpenAM-13.0.0/XUI/#login/?module=DataStore

    「/(レルム)」→「Authentication」→「Settings」で「管理者認証設定」項目に
    「totp」を指定してしまうと、管理者もTOTP認証が必須となってしまうため、注意が必要。
  • ユーザエントリには、"oathDiviceProfiles"という属性に秘密鍵などの情報がJSON形式で格納される。





2016年3月25日金曜日

Windows10でhostsファイルを編集もしくは上書きできない。。。。

先週、Windows7からWindow10にアップグレードした。
独自のFQDNを定義しようとしてhostsファイルを編集しようとしたら、他のプロセスがつかっていると警告がでて編集ができない問題が発生した。。。

ネットでいろいろ調べてみると、
可能性としては以下が考えられるとのこと。

  • 管理者権限で実行していない。
  • Windows Defenderにプロセスをにぎられている。
  • セキュリティ製品(マカフィーやWebrootなど)に編集をブロックされている。


調べてみたら、使っているセキュリティ製品(Webroot)の禁止項目になっていた。
下図のように、禁止項目からチェックを外したら、hostsファイルを無事編集することができた!



2016年3月14日月曜日

OpenAM13.0.0のインストール

2016年2月にリリースされたOpenAM13.0.0のインストール手順を説明する。
なお、Tomcat7.0.68(Windows版)上に配備する。

  1. 以下のForgeRock社サイトからOpenAM媒体をダウンロードする。
    (あらかじめIDとパスワードの登録が必要)

    https://backstage.forgerock.com/#!/downloads/OpenAM/OpenAM%20Enterprise/13.0.0/OpenAM%2013/zip#list

  2. ダウンロードしたOpenAM-13.0.0.zipを解凍する。
    「OpenAM-13.0.0.war」がOpenAMのwarファイルである。

  3. Tomcatに配備する前に、Tomcatの管理画面からアップロードできるファイルサイズを増やす。
    増やさないと、SizeLimitExceededExceptionエラーが発生する
    web.xml(..\Tomcat 7.0\webapps\manager\WEB-INF配下)の以下の要素に、OpenAMのwarファイルのサイズを設定する。
    <multipart-config>  
     <!-- 50MB max -->
      <max-file-size>113916465</max-file-size>
      <max-request-size>113916465</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>

  4. Tomcatの管理画面から、OpenAMのwarを指定して配備する。



  5. OpenAMのURLにアクセスし、以下のセットアップ画面が表示されることを確認する。
    「新しい設定の作成」ボタンを押す。



  6. ライセンス許諾画面が表示されるため、同意して「Continue」ボタンを押す。
  7. OpenAMの管理ユーザ(amAdmin)のパスワードを入力し、「次へ」ボタンを押す。
  8. サーバー設定画面でサーバーURLなどを入力し、「次へ」ボタンを押す。
  9. 設定データストア画面でOpenAMの環境情報を格納するデータストアの設定を行う。「次へ」ボタンを押す。
  10. ユーザーデータストア画面でユーザ情報を格納するデータストアの設定を行う。本手順では、OpenDJを選択する。「次へ」ボタンを押す。
  11. サイト設定画面でロードバランサの設定を行う。本手順では、負荷分散構成にはしないため、「いいえ」を選択する。「次へ」ボタンを押す。
  12. デフォルトのポリシーエージェントユーザーのパスワードを入力し、「次へ」ボタンを押す。
  13. 設定ツールの概要と詳細画面で設定項目を確認する。内容に問題がなければ、「設定の作成」ボタンを押す。
  14. 下記のように、OpenAMのインストールが開始される。
  15. 以下のように、「設定が完了しました」メッセージが表示されることを確認する。「ログインに進む」ボタンを押す。
  16. IDとパスワードを入力し、ログインできることを確認する。
  17. 下記のように、OpenAMのセットアップ画面が表示されたら、セットアップは完了である。