ローカルサーバでSSLしようとして試行錯誤の上結局WEBrick使った話

webrick_ssl_2

 

いつも認証局とか作った時の事が、忘却の彼方に行くので今日はエントリするで。

サーバーサイドスクリプトとかのコーディングをしていなくても、とりあえずカレントディレクトリをWebサーバーにしてしまいたい系の時ってあると思うんですね。
ちょうど、いまJSで webkitSpeechRecognition()とかを使ったアプリを書いているのですがどうもサーバーにデプロイしないとマイクが起動しないという事が分かりました。。
つまり、chromeで file://hogehoge と参照してるだけで一生jsの開発には困らないと思っていた私が激アマでしたすいませんでした。

というわけで、適当なディレクトリをサーバにしなくてはならなかったので、最初python先生のワンライナー
python -m SimpleHTTPServer
で動かしていました。 めっちゃ短くて助かりますね。

ところが、マイクは動いたものの webkitSpeechRecognition()を呼ぶ度にchromeが
「ホンマにマイク使うん? deny or allow 」
みたいな事質問してくるわけですよ。ポップアップで。

で、調べたらHTTPSじゃないと毎回ポップアップでるらしいんですよ。 
なんでやねん。

けど天下のchrome大魔神がそういう仕様なら仕方ないネ。

HTTPSを使おう

てなわけで個人的に未だちゃんと仕組みを理解できていなく、大変苦手意識のあるサーバー証明書(その中でも今回は完全に試験用ですから、オレオレ証明書)を作りhttpsでサーバー起動しようとなったわけです。

ところが、最初pythonのSimpleHTTPServerで動かそうとして下記のようなエントリを参考にしていたのですが・・
http://www.minnmyatsoe.com/2012/03/http-and-https-server-with-python/
まったく動かない。

全然動かないし、そもそもエラーとか出ない。
chromeのコンソールでも「REFUSED」的な表示されててハァ? って感じだったのでハマった。
久しぶりに数時間ハマりました。
MCハマー貼っときますね。(2014年度2回目)


E3838FE3839EE383BC

諦めてwebrick先生を使う

「webrickの方が日本語ドキュメントが多いし」
と思ったという事は秘密にしておこう。

ただ、webrickでhttps化しようとしたら、やはりみなさんRails環境での事が前提で、Railsありきの記事が多いですね。

今回参考にしたエントリ↓
http://labs.appshelf.info/2011/06/01/256/
これで普通に動きました。良かったぁ。

mac でのサーバー証明書作成について

macにはもともとopenSSLが入ってる風だったのですが、2つはいってて「え、なにこれ私怖いやだー」というわけで、ソースから入れました。

その時の参考がこちら。 参考だけに三項演算子。 はい。
http://qiita.com/ridewide/items/7b93854883bef4292686

インストール字オプションメモ
/config –prefix=/usr/local –openssldir=/usr/local/openssl

なお、少しだけ不可解な事が。
最後のserverca.crtファイルを作ると何故か0byteになってしまうので、なんやねん、と見てみると。
The stateOrProvinceName field needed to be the same in the
CA certificate (Tokyo) and the request (Tokyo)

なるメッセージが・・
何度このメッセージを読んでも言ってる事の意味が分からなかった
調べたら実際に意味の無い文であることが分かった。

http://hack.aipo.com/archives/319/

ここに書いてありました。助かりました。

早速webrickで動かそう

最終的にソースがこれ↓ (証明書は上記サイトの作り方に則る)

require 'webrick'
require 'webrick/https'

server = WEBrick::HTTPServer.new(
    :BindAddress => '127.0.0.1',
    :Port => 3000,
    :DocumentRoot => '.',
    :SSLEnable  => true,
    :SSLCertificate => OpenSSL::X509::Certificate.new(open('/usr/local/openssl/serverca.crt').read),
    :SSLPrivateKey => OpenSSL::PKey::RSA.new(open('/usr/local/openssl/server.key').read))
Signal.trap('INT') { server.shutdown }
server.start

動かない

なんで?

なんかブラウザからアクセスする度に
ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv2/v3 read client hello A

って出てくるので、なんでやねん・・
って思って調べてもよくわからなかったんですが。。。

ブラウザのアドレスバーでhttpをhttpsに変えて叩けばいいだけだったww
そりゃそうか。

というわけでやっとローカル環境でSSLが普通に動きました。わいおわいお(∩´∀`)∩
ワイオミング州

 

2014-10-29 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*