2013年2月11日月曜日

iOS開発おぼえがき

  • iOSでの開発を何ヶ月かやってみて感じたこと。
  • Cocoa Controlはひととおり目をとおしておいたほうがよい、トレンドもわかるしソースに目をとおすとなんとなく書き方もわかる。Cocoa Controlからgithubを眺めることも多かった。
  • 結果的にxibには頼らない書き方になった。StoryBoardもつきつめるといらない。というか量が多くなると却って面倒になってくる。
  • CocoaPodはまた今度機会があったら環境整えてやってみたい。構成管理ツールみたいなものか。
  • 整備されてないコンポーネントも多いので注意。コンポーネントのバグにあたると泥沼。
  • MacOSXと共通する部分も多そう、というかAppleの資源かな。CoreDataはWebObjects由来。
  • Quartz(Core Graphics,CoreAnimation)←UIKitという関係。UIKitは上位に存在するみたいな感じでいいんだろうか。雰囲気的にはWin32SDKにおける、GDI←UI(TextBoxとか)みたいな感じだが。色の扱いとか重複して存在していたり。
  • ライブラリ関連、AFNetworkingは便利、Nimbusは強いくせがあるけどサンプルの形のままいじるんなら問題ない。
  • こじんまりとしたものの中につかえるものがけっこうある印象、大規模ライブラリはiOS自体がいろいろかわってる経緯から使えるものも、まったく使えないものも。
  • Objective-Cはオートコンプリートがないと厳しいけど、慣れてくればまあ違和感なくかける。関数の宣言だけはどうしても素のCに比べると面倒
  • 継承のやりかたがどうも馴染まない
  • プロパティの宣言方法も馴染まない
  • つまり参照カウントの話なのだろうけど
  • ここらへんは時間をとってじっくりお勉強したほうがよろしいんだろうなあ
  • 静的でない部分がたくさんというか、処理系の上にのっていて、その主張がけっこう激しい言語という印象。

2013年2月7日木曜日

JettyでSSLを有効にする方法

あちこちら探して頑張ったけど、混乱したのでメモ

Jettyは最近だと、6、7、8あたりが広く使われていそう。
個人的にはいまだに6なので6でのやりかた。基本的には変化してないことを祈るばかり。
Javaのキーストアとか詳しくない人でもわかるように。


============================================================


◎SSL証明書の導入について

秘密鍵とCSR(CSR = 署名リクエスト)を証明機関に送って。サーバー証明書、中間証明書を受け取る。 証明書と秘密鍵の組がインストールされればSSL通信を行うことができる。
Apacheの場合はmod_sslをインストールして、OPENSSLで作った、秘密鍵とCSRを送れば上記が送られてくるので、インストールしてパスをとおしてあげればいい。


============================================================


◎結局のところJettyではなにをすればいいか?

同様に秘密鍵と、必要な証明書をJettyの参照できる妥当な場所にインストールすればよい。ただし、証明書に関して言うと、以下のようなチェーン構造になってることを認識しておいた方がいい。

ルート証明書 = 中間証明書 = サーバ証明書


============================================================


◎keytoolとkeystoreについて

ではどこにインストールすればよいか? これはJava特有の事情でkeystoreと呼ばれるファイルにインストールしてまとめておく必要がある。Javaにはkeytoolとよばれるツールが存在し。このファイルを作成したり、証明書をインストールしたり、チェックしたりする機能がある。

 keystoreファイルにはパスワードがかかっており、これはJavaの標準では'changeit'。Jettyの場合は特有で 'storepwd'となっている。またこのコマンドをつかって、CSRや秘密鍵を作ることもできるが、OPENSSLで作ったものでもその後の作業は可能なので、両方使ってるのならOPENSSLで作業して証明書と秘密鍵のインストールにkeytoolを使えばいい。


============================================================


◎keystoreへの証明書や秘密鍵のインストールについて

上記が理解できていれば、下記の内容で作業できるはず
https://jp.globalsign.com/support/server/05.html

Jetty6の場合はetc/binにkeystoreが入っているので、まずこれを消す

$(jdk)/binにパスがとおっていると、keytoolコマンドが実行できるはず。
コマンドは上のURLからの引き写しだが以下のとおり。

keytool -import -alias root -keystore ./server.keystore -file rootcacert.cer

ルート⇒中間⇒サーバ(自分)の各ファイルを登録する。


============================================================


◎Jettyの設定とSSLの起動について

Jetty6の場合jetty-ssl.xmlに設定が書いてある。$(jetty)/etc/keystoreを使う場合、キーストアの設定は変更しなくてよい。パスワードの欄には、md5やらOBFで暗号化するのがよいと書いてあるが、とりあえずそのままでも動くのでそのまま書けばよい。


============================================================


◎Jettyにおいて設定ファイルを読み込んでの起動について

jetty.sh startを呼ぶとjetty.xmlが読み込まれて実行されるのでjetty-ssl.xmlの中をコピーしてjetty.xmlに書き込んで、実行するのが結果的には楽。
ただし以下のようなコマンドで複数の設定ファイルを呼び出して起動することもできる。

jetty.sh start jetty jetty-ssl

============================================================

参考サイト :

https://jp.globalsign.com/support/server/05.html
http://d.hatena.ne.jp/yukinkster/20110828/1314563738