気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

公開鍵暗号方式とは?

インターネットで安全に情報をやり取りするための暗号化の仕組みとして、
公開鍵暗号方式と、共通鍵暗号方式が上げられます。
違いは、暗号化や復号化する際に、「公開鍵」を使うか、「共通鍵」を使うかの違い。

公開鍵暗号方式

情報の暗号化と復号化に別々の鍵を使うのが特徴。
データの暗号化の際に、「公開鍵」を用い、復号化の際に、「秘密鍵」を用います。

公開鍵はその名の通り、公開されている鍵で、公開鍵を入手すれば、だれでも秘密鍵を持っている人に
安全に情報を贈ることができます。
逆に秘密鍵は、公開されず、厳重に保管することで保持している人だけが情報を見ることが
できるようになっています。

Apache Tomcatの基本を復習してみる

Java ServletをWebサーバー上で動作させるための「サーブレットコンテナ」の一つ。
作成したJava Servletの動作確認をするための簡易的なWebサーバーとしての機能も備えています。

本格的にWebサービスを作成する場合は、Apache(Webサーバーソフト)をサーバーにインストールして
サーバーを動作させます。

ディレクトリ構成

Tomcatで重要なディレクトリとファイルを記載します。

tomcat($CATALINA_HOME)
  ∟ bin ・・・Tomcatプログラム格納先
  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml
  ∟ lib ・・・必要なAPIを格納。DB接続など
  ∟ logs ・・・ログ格納先
  ∟ temp
  ∟ webapps ・・・作成アプリの格納先(デプロイ先)
    ∟ ROOT ・・・http://localhost:8080/でアクセスできる(ROOTの名前の通り、ルートでアクセス可)
      ∟ index.html
      ∟ WEB-INF ・・・WEB-INF以外は公開される。WEB-INF以下は、公開されない。設定ファイルなどを配置
        ∟ web.xml ・・・classes以下のクラスファイルへどのようなURLでアクセスさせるかを記載
        ∟ classes ・・・コンパイル済みファイルを格納
    ∟ docs・・・http://localhost:8080/docs/でアクセスできるアプリ
    ∟ examples
    ∟ host-manager
    ∟ manager
  ∟ work

設定ファイル

次にTomcatの設定ファイルの概要について確認していきます。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ context.xml
    ∟ sever.xml
    ∟ tomcat-users.xml  
    ∟ web.xml

実際の設定ファイルの配置先は、conf¥Catalina¥localhost以下になります。 localhostはホスト毎のディレクトリ。

  ∟ conf ・・・各種設定ファイル格納先
    ∟ Catalina
      ∟ localhost
        ∟ ROOT.xml  ・・・ 静的ファイルを保持するプロジェクトの読み込み使ったりする
        ∟ sampleApp.xml ・・・実際に作成したアプリのcontext.xml

context.xml

コンテキストの登録を行うファイルです。
アプリの配置先とその呼び出し方を設定します。

<Context path="/hello"
docBase="c:/sampleApp/helloworld"/>

docBaseにアプリケーションのルートディレクトリを指定。
pathには、アプリケーションを呼び出すための文字列を指定します。

helloworld以下にindex.htmlが配置されている前提とすると。
呼び出す際は以下のようなURLとなります。

http://localhost:8080/hello/index.html

sever.xml

サーバー単位の設定ファイルです。
Webアプリケーションの登録、ロギング、アクセス方法などが指定してあります。

EnginタグのNameでCatalinaが指定してあったり、defaultHostでlocalhostが指定して
あったりします。Catalinaがサーブレットコンテナ。

昔は、Context pathの指定もこのファイルに存在していたが、現状は、context.xmlとなっている。

tomcat-users.xml

Webアプリケーションマネージャーを使う際にお世話になるファイル。
Webアプリケーションマネージャーは、ウェブ画面でサーバーの配備や起動、停止を行えるツールです。

ウェブ画面にログインするためのアカウントを設定したりします。

以下のアカウントを設定する場合、は以下のように設定します。
ユーザー名:admin
パスワード:pass

<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="pass" roles="manager"/>

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
-->
</tomcat-users>

web.xml

コンテキストの登録により、静的ファイル(.html)などは参照できますが、
Servletなどは、別途web.xmlに指定が必要です。

フレームワークを導入していると、独自の設定ファイルやアノテーションやクラス名からの推測で設定が不要だったりします。
フレームワークなしの場合の設定を押さえておくことで、Servletを用いていた際の基本設定を理解しておきます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/helloworld</url-pattern>
  </servlet-mapping>
</web-app>

上記のようにサーブレットのクラス名とサーブレット名、サーブレット名と呼び出しURLに付与するパス名を 紐付けるように指定します。

以下のように呼び出します。

http://localhost:8080/hello/helloworld

IE11 社内サイト向けのCookieをOFFにする方法

IECookieをOFFにするには、インターネットオプション ⇒ プライバシータブ インタネット ゾーンの設定で バーを一番上に移動し、「すべてのCookieをブロック」を選択する。

もし、社内サイトへのCookieブロックを行いたい場合は、 ローカル イントラネットゾーン判別設定をOFFにして、インタネット ゾーンの設定の設定(CookieをOFF)を有効する必要があります。

ゾーン(セキュリティーゾーン)とは?

Webサイトが「ネットワーク上どの位置にあるか」を判定していずれかの"ゾーン"を割り当て、割り当てられたゾーンに 基づいてセキュリティー管理を行う、IE独自の機能です。

  • インターネットゾーン 通常のインターネット上のサイト。セキュリティー厳しめ
  • ローカルイントラネットゾーン 社内、内部ネットワーク。信頼できる管理者に管理されているため、セキュリティー緩め

他にも信頼済みゾーン、制限付きサイトゾーンなどがある。

ローカル イントラネットゾーン

ローカル イントラネットゾーンに追加されているサイトは問答無用でローカル イントラネットゾーンと判定。

どのゾーンにも追加されていないサイトは、設定よって自動判別がなされる。

以下の設定をON,OFFすることでローカル イントラネットゾーンと見なすかのルールを設定する。

  • ほかのゾーンにないローカル (イントラネット) のサイトをすべて含める
  • プロキシ サーバーを使用しないサイトをすべて含める
  • すべてのネットワーク パス (UNC) を含める

上記のチェックをすべて外すと、インターネットゾーンと判別されるようになる。

関連用語

UNCパス

Universal Naming Conventionの略称。 コンピュータネットワーク上のフォルダやファイルへアクセスするための構文

構文
\\<computer name>\<shared directory>\

例
\\pondermatic\public\studyarea.gdb
\\omnipotent\shared_stuff\wednesday\tools

HerokuにJavaアプリをデプロイする

昔、RubyでHerokuにアプリを上げたりしてましたが、
Javaアプリをデプロイするやり方がわからなかったので、作業メモとして、残します。

Herokuのアカウント作成していない方は、作成して下さい。
クレジットカード番号は、不要で、メールアドレスのみ登録ができるようです。

Heroku用開発ツールの設定

「Heroku Toolbelt」というコマンドラインツール(CLI)をダウンロード、インストールします。
このツールにより、herokuへのログインやデプロイを行うコマンドのインストールを行います。

以下のURLを参考。
DL&Install

設定できたら、ログインする。

$ heroku login
Enter your Heroku credentials.
Email: xxxx@xxxxxx.xxx
Password:xxxxxx
Logged in as xxxx@xxxxxx.xxx

Herokuへアプリ作成

アプリのルートディレクトリで、以下のコマンドを実行。
アプリ名を省略するとherokuでランダムな名称のアプリを作成してくれます。

$ heroku create [アプリ名]

これにより、Heroku上にgitリポジトリを作成し、そのリポジトリにローカルgitリポジトリが紐付けられる。
ローカルgitのremoteへHeroku上のgitリポジトリが設定される。
デフォルトのpush先が指定されるわけですね。

アプリのデプロイ

もし、すでにデプロイ済みでデプロイ先を変更したい場合は、以下が参考になるかもしれません。
Heroku 接続先URLを変更する

以下のコマンドで、デプロイします。herokuに対して、masterブランチをpushします。 mavenタスクがダダダッと走ります。エラーなく、完了すれば、デプロイ完了です。

$ git push heroku master

・
・
・
remote:        https://new-app123.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/new-app123.git
 * [new branch]      master -> master

以下でデプロイアプリを確認できます。お疲れ様でした。

$ heroku open

もし、エラーが出る場合は、ログを確認してみると良いです。

$ heroku logs

【参考】DB設定

アプリ内でposgreSQLを使用する設定をpom.xmlに書いておくと、Herokuに勝ってにDBが作成されます。

pom.xml内のposgreSQLの設定

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

flywayなどのマイグレーションを設定しておくとアプリデプロイ時にDB作成までやってくれますが flywayが未設定の場合は、テーブル作成やマスタデータ登録などが必要です。

ローカルにpsqlがインストールされていると以下のコマンドでheroku上のアプリのDBに接続できます。
この状態でSQLコマンドでテーブル作成をすると良いです。

$ heroku pg:plsql

・
・
--> Connecting to postgresql-xxx-11111
psql (9.5.0, server 9.6.1)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

new-app123::DATABASE=> 

PostgreSQLの初期設定

PostgresSQLをインストール

$ brew install postgres

PostgreSQLサーバーの起動

自動起動の設定を以下で行います。

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
/Users/user_name/Library/LaunchAgents/homebrew.mxcl.postgresql.plist -> /usr/local/opt/postgresql/homebrew.mxcl.postgresql.plist
~
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

停止したい場合は、以下コマンドを実行

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

ログイン

% psql -U postgres
psql (9.5.0)
Type "help" for help.

※現時点、9.5.0は古いので最新を入れて下さい。。 10系を入れて下さい。

ロール(ユーザー)作成

今回は、postgres以外のユーザーが欲しかったので、以下で作成

postgres=# create role user_name with superuser createdb login password 'passString';
CREATE ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB              | {}
 user_name | Superuser, Create DB                           | {}

DB作成

一旦、¥qでログアウトした後、作成したユーザーで新しいDBを作成します。
¥lで作成DBを一覧で確認します。

postgres=# \q

$ psql -U user_name -d postgres
psql (9.5.0)
Type "help" for help.

postgres=# create database new_db;
CREATE DATABASE

postgres=# \l
                                 List of databases
     Name     |  Owner   | Encoding |   Collate   |    Ctype    | Access privileges
--------------+----------+----------+-------------+-------------+-------------------
 postgres     | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 new_db        | user_name  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

あとは、テーブル作成、データ投入など行って、初期設定を整えて下さい。

Heroku 接続先URLを変更する

heroku リモートのリポジトリを消した場合、push先のURLを変更しないとpushできなくなる。

現状のリモートURLを確認する。

% git remote -v 
heroku  https://git.heroku.com/before-12345.git (fetch)
heroku  https://git.heroku.com/before-12345.git (push)

pushする際に、以下の様なコマンドを打つが、originにあたるのが、上記のheroku

git push origin master

以下のコマンド、push先のリモートURLを変更する。

git remote set-url heroku https://git.heroku.com/after-12345.git

変更完了したら、めでたく、pushができるようになります。
よかった。。

hostsの使い方

hostsファイル、よく使うファイルですが、 用途や使い方の理解が不十分かつ、よく忘れるので、備忘として記載します。

hostsファイルとは?

  • DNSより先に参照されるIPアドレスドメイン名の一覧のこと。
  • あるドメインのアクセス先IPを自分の端末だけ変更するために用いる。新サーバー構築時など。

ローカルでDNSサーバーのような役割を担う。
DNSサーバーはドメイン(www.google.co.jpなど)にIPアドレスを紐づけるサーバー

ファイルパス(Windows)

以下にhostsファイルが存在する。

c:¥windows¥system32¥drivers¥etc

使用例

DNSサーバーで指定しているロードバランサーを通さず直接、各Webサーバーにアクセスさせる

通常アクセスしているドメインにWebサーバーのIPを指定する。

192.168.122.5 abc.co.jp  

1つのアドレスに複数ドメインを指定して、複数のドメインを一つのサーバーにアクセスさせる

192.168.122.5 aaa.co.jp bbb.co.jp

192.168.122.5のサーバーに複数アプリを載せておき、指定ドメインでアクセスするアプリを切り替えることも可能です。