2012/08/26

RapidSSL

http://www.rapid-ssl.jp/

SSLサーバ証明書は自分で設定したいと思っていたが、以前は値段が高くてなかなか手が出せなかったものだ。ところが最近は1年で数千円とかめちゃくちゃ安く、とりあえず遊ぶ程度でも十分に手が届く。しかも審査の内容は本当にSSL証明書を申請する人が、ドメインを持っているか、という審査のみ。自前でドメインを登録している人ならお手軽だ。

そこで、お手軽SSL認証局のひとつである RapidSSL でちょっと遊んでみた。以下は Debian Squeeze で実行している。

まずは認証局への署名要求(CSR) を生成する。そのための秘密鍵(server.key)を生成する
RapidSSL は2048bit以上の秘密鍵を要求するため、最後のオプションでその値を指定している。

$ openssl genrsa -des3 -out server.key 2048









次に秘密鍵をもとに署名要求(CSR) を生成する。

$ openssl req -new -key server.key -out server.csr


















ここで注意すべきなのは、CSRを生成するにあたって入力する情報は、SSL設定を行うドメインの管理情報と基本的に一致させておかなければならないということだ。つまり、ドメインの whois 情報と一致するようにすること、ということだ。少なくとも以下の情報は一致させておく必要がある。


Country Name
State or Province Name (full name)
Locality Name (eg, city)
Organization Name (eg, company)


また、SSLを設定したい FQDN を Common Name に指定し、Email Address にはドメインの登録者 Emailアドレスを設定すればよい。Emailアドレス は他にも指定できるが、多分これが一番やりやすい。「a challenge password」や「An optional company name」は空にしておく。

whois情報を隠すサービスってのが最近はあって、レジストラの情報でwhois情報が置き換わっているドメインが存在するが、そういうサービスは外した上で正しい情報を登録した方がよい。

----

CSR を生成したら、申し込みフォームから上記で生成したCSRを貼り付けて必要事項を記入してSubmitすると、CSR生成時に指定した Emailアドレス に「【重要】 SSLサーバ証明書発行承認のお願い」というメールが送られてくる。そのURLをクリックすると、以下のようなドメイン証明画面がブラウザで開く。










ここで「承認します」ボタンを押せば、RapidSSL から サーバ証明書と中間証明書が送られてくる。これだけで手続き完了。15分くらいしかかかっていない。whois情報さえちゃんとしていればお手軽だということがわかる。

----

あとはサーバ証明書と中間証明書をサーバにインストールするだけだ。Apache + mod_ssl なら一般的な手順は以下の通りとなる。

https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO6252

要するに、Apache の SSL 設定に以下を設定するだけだ。


SSLCertificateFile    -> 発行されたサーバ証明書
SSLCertificateKeyFile -> opensslコマンドで一番はじめに作った秘密鍵
SSLCertificateChainFile -> 発行された中間証明書


あとは、Debian 特有の注意点がある。デフォルトでインストールされる SSLサイトの設定ファイル /etc/apache2/sites-available/default-ssl だが、これをそのまま使うと 「Invalid method in request \x16\x03\x01」というエラーが出てSSLリクエストを受け付けてくれなかった。これについては多数の事例が報告されていて、バーチャルホストの設定が _default_:443 だとまずいらしい。自分はこの部分をIPアドレスまたはワイルドカードに置き換えるとうまくSSLリクエストを受け付けてくれるようになった。







[ Update January 17th 2013 11:09 by mumumu ]

サーバの秘密鍵(server.key)を作成したときにパスフレーズを設定するが、これを解除しておかないとサーバを再起動した時にパスフレーズを聞かれて処理が止まってしまう。パスフレーズを解除するには、以下のコマンドを使う

openssl rsa -in server.key -out server.key

複数証明書がある場合は、Apache の SSLPassPhraseDialog 設定を使うのも手かもしれない。

Blog Template changed

ちと悪趣味で見にくかった以前のブログテンプレートを、気分転換も兼ねて明るいものに変えてみた。昨日から10連休に入っており、いろいろ考えたり作業したり旅行したりな感じ。

ただ、手を動かすのはやめないでおこう、と。この更新もその一環である(*´〜`)

2012/08/24

Problem driven enginnering?


「少しでも楽をしたいから自動化したい。自動で信頼出来ることをしたい。そうすれば効率があがるよ」という思考は、「問題点がなければ何もしないでいいじゃん?」という問題ドリブンの考え方と対立するものだ。それは自己満足だ。コストがかかる(そりゃバランスも重要)と言われようと、問題がなければ何もしない、では進歩は望めないし、何より俺たちエンジニアは楽になれない。周囲の文化がなんであれ、『楽をするため』に向上心を持ち続けることは忘れないでいようと思う。

・・・と考えていくと「楽をしていないことが問題だ」という問題意識があると気付かされる。結局問題ドリブンに戻るわけだな。タハハ(´ー`;)

2012/08/18

meshi-only blog

http://mumumu-meshi.blogspot.jp/

思うところがあり、飯専用ブログを作った。
要するに太ったんでダイエットしますってことですよいわせんなよ恥ずかしい!( ;´Д⊂ヽ

2012/05/07

Titanium Module for Voice Recognition on Android

https://github.com/mumumu/Titanium-Android-VoiceRecognition

お久しぶりです。最近 Titanium Mobile を触っていて、Android へのかゆいところへの手の届かなさにムズムズしている mumumu です。

Android は 1.5 から 音声認識の機能にアクセスできるAPIを備えていて、Intent に情報を詰めてビルトインの Activity を起動すればいとも簡単に音声認識の結果が得られる。ならば Titanium でも簡単でしょう。と思って以下のコードを書いた。


上記のコードでも、Android 2.x 系で Ti.Android.currentActivity.startActivityForResult の結果が返ってこないので困った。3.x 系では返ってくるので不思議不思議。どうせ Titanium は getStringArrayListExtra による Intent からの結果取得に対応していないので、モジュールはどうせ書かねばならない。

よって、Titanium の JavaScript から Activity を起動するのではなくて、 Java 側で 「音声認識 -> 結果取得 -> 結果を戻す」 というモジュールを書いた。それが上のリンクである。

これを使えば以下のようなそれっぽいコードで Android 2 系でも 3系でも結果が取得できた。




実装の肝は、 Android ビルトインの Activity を起動する VoiceRecognitionProxy.java である。本当は Activity#startActivityResult で ビルトインのActivityの起動と動作結果取得を同時に行うのが筋であるが、呼び出し元の Activity が Titanium 側の初期化済みアクティビィティなので onActicityResult で結果が取得できない。なので、Titanium 側のアクティビティと呼び出し側のビルトインアクティビィティは Handler を包む Messenge と それを Intent で運ぶ Messenger を使って結ぶやり方を採っている。

正直迂回コードである。気持ち悪い。Titanium の startActivityForResult がちゃんと動いてくれればこんなモジュールはいらないのだが。。(´ー`; )