Quantcast
Channel: SHANON Engineer's Blog
Viewing all 210 articles
Browse latest View live

Mojolicious::Lite で作成したアプリを、Mojolicious コントローラにしてみたおはなし

$
0
0

この記事は Perl入学式 Advent Calendar 2015の 6日目の記事です。

というわけで、今回はPerl入学式向けの記事ということで、私 munepom ( @__munepom__ ) がお送りします。
大片付けからの大掃除前半戦が終わりまして。
どうしよう。。。1時間で書けるネタが。。。あ、ありました。

Perl入学式は、2012年に大阪で始まったプログラミング初心者向けの勉強会のようですね。
私は参加してはいないのですが、シャノンでの Perl 研修時、このサイトで学ぶとイイよ!
と教えていただき、過去の教材を漁って勉強し、Perl の基礎を理解することができました。
カリキュラムの内容が全てテキストとして公開されている点が、助かりますね!

そんなPerl入学式のカリキュラムより、2014年の第6回では、
Webアプリケーションフレームワークの1つである、Mojoliciousが紹介されていました。
機能が少ないWebアプリケーションを作るなら、Mojolicious::Liteを利用することで、とりあえず動作する環境が作れますね。
Catalystよりも使い易いフレームワークなのでは?と思っています。

Mojoliciousの詳細については、yuki-kimoto氏のGitHubに日本語訳がまとまっている雰囲気ですので、そちらを参照していただければと思います。

というわけで、今回は、Hello World アプリを Mojolicious::Lite で作成し、それを後で構造化する方法をお届けしまーす!
(当初は、perl-5.22.0 を利用して heroku 上で動作させる話まで書く予定でしたが、また別の話とさせていただきます。。。ヒント:heroku-buildpackとかperlokuを使うと?)

まずは、Mojolicious::Lite で、Hello World アプリを作ってみましょう。ファイル名は、、、myapp.pl とでもしておきますか。


use Mojolicious::Lite;

# Render template "index.html.ep" from the DATA section
get '/' => {template =>'index'};

app->start;
__DATA__

@@ index.html.ep
% my $url = url_for 'title';
<div>I ♥ Mojolicious!</div>
これを、$ morbo myapp.pl で実行すれば、localhost の 3000 番ポートで、サーバが起動しますね。

Mojolicious::Liteの良いところは、直感的なパス指定で、動作とテンプレートの結びつきが見易いところだと思っています。
しかし、規模が大きいWebアプリになってくると、共通ロジックなどは構造化しておかないと、後の負債につながりますよね。。。

では、Mojolicious::Liteで作成したアプリを、Mojolicious Controller ディレクトリ構成で利用できるようにしてみましょう!
基本的には、
・ルーター作って
・対応するコントローラ作って
・アプリ起動スクリプトでは、start_app を実行する
という構成です。
あとは、起動用に引数を組み込んだスクリプトを作成しておくと便利なので、作成しておきます。
とりあえず、以下の4ファイルを作成すれば、Controller っぽくしたアプリが起動できます。

lib/MojoStructureTest.pm


package MojoStructureTest;
use Mojo::Base 'Mojolicious';

sub startup {
my $self = shift;

# Router
my $r = $self->routes;
$r->any('/')->detour('root#', name =>'Root');
}

1;
lib/MojoStructureTest/Controller/Root.pm

package MojoStructureTest::Controller::Root;
use Mojolicious::Lite;

# Render template "index.html.ep" from the DATA section
get '/' => sub {
my $c = shift;
$c->render('index');
};

1;
__DATA__

@@ index.html.ep
% my $url = url_for 'title';
<div>I ♥ Mojolicious!</div>
script/start.pl

#!/usr/bin/env perl

use strict;
use warnings;

use lib 'lib';

# Start command line interface for application
require Mojolicious::Commands;
Mojolicious::Commands->start_app('MojoStructureTest');
Perloku

./script/start.pl daemon -l http://*:$PORT -m mojostructuretest

あとは、$ PORT=3000 ./Perloku を実行すると、localhost の 3000 番ポートで、サーバが起動します。
http://localhost:3000/ へアクセスすると、、、
I ♥ Mojolicious! と表示されます。
(perl-5.22.0 にて、動作確認済みです。)

さて、これで Controller として利用できるようにはなりましたが、__DATA__ セクションにテンプレートがあるのは気持ち悪いですね。
View と Controller 一体型はちょっと。。。ですね。
これらの分離については、今月のどこかで、別の話として記事にしますね。

Enjoy! (・ω・)ノ


渋谷 FabCafe(ファブカフェ)で会社のロゴをスタンプとマカロンにしてきたよ

$
0
0
こんにちは!ueharak です。

週末に FabCafe へ行ってきました。


FabCafe は「ものづくりカフェ」と呼ばれるもので、レーザーカッターや 3D プリンタが設置してあるのが特徴です。今回はこれらの装置を使って簡単な製作が楽しめるキットを体験してきました。



選んだのは マカロン と スタンプ のキット。どちらも画像を持ち込むだけで出力してもらうことができ大変お手軽です。

素材は…と思ったところ、ちょうど良いのがありました。
弊社のロゴです!
じゃーん!

レーザー出力するのにもってこいですね!
これをマカロンに焼き付けたりスタンプにしてみたいと思います。

というわけであらかじめグレースケールに変換したファイルを店員さんに渡してセッティングをお願いします。

位置を決めてもらって…


出力開始!



ものすごいスピードでヘッドが左右に動き、マカロンに絵が焼き付けられていきます。



じゃーん!
濃淡も美しく再現されています。


続いてスタンプ。
同じようにデータを店員さんに渡します。



位置を決めてもらい、フタをしてスタート!




こちらも猛スピードで動くヘッド。印面となるゴムが焼けるにおいがします。時々ボッと燃えるのもカッコイイです。炎上する弊社ロゴ!!




焼きあがった印面をスタンプ台に設置します。




じゃーん!組み立て完了です。



さっそく試しに押してみます。キレイに仕上がりました!


いかがでしたでしょうか?とても手軽に体験することができました。
次回はぜひ 3D プリンタにも挑戦してみたいなと思いました。

みなさんもぜひ、師走の息抜きとして試してみてはいかがでしょうか。

では!

しゃのんあどべんとかれんだー 5日目 (less コマンドをカラフルに!source-highlight)

$
0
0

この記事は Shanon Advent Calendar 2015の 5日目の記事です。

さてさて、今回も私 munepom ( @__munepom__ ) がお送りします。
週末は大片付けと大掃除に追われとりまして、どうしよう。。。30分で書けるネタが。。。あ、ありました。

less コマンドで表示されるテキストをカラフルに見る方法についてのおはなしです。

ターミナルで作業をしている際、ソースコードをチェックしたくなることがありますよね!
vim などのエディタですと、大抵は構文に従ってある程度カラフルに見やすい画面が表示されると思います。
でも、vim だと単純に見る目的で利用するには、ちょっと気が引けます。
(間違って編集して保存しちゃったよ!とか。。。)

単純に内容を確認するだけなら、less コマンドをよく使っています。
ですが、この less コマンド、ちょっと難点がありまして。
色付いてないんです。。。ちょっと見づらいんです。。。もうちょっと楽しみたいんです。。。

そこで、source-highlight の出番です! 正確には、GNU Source-highlightというもののようですね。
C++ で作られたライブラリのようでして、様々な言語の構文をサポートしているようです。 というわけで、早速インストールして使ってみましょう。

CentOS をお使いでしたら、
$ sudo yum install boost-devel
$ sudo yum install source-highlight
を実行すれば、/usr/bin/src-hilite-lesspipe.sh が作成されます。
Boost::regex という、C++ のライブラリが必要なようですね。

Mac をお使いでしたら、homebrew でのインストールが単純でしょうか。
$ brew install source-highlight
を実行すれば、/usr/local/bin/src-hilite-lesspipe.sh が作成されます。

あとは、環境変数として
LESS='--RAW-CONTROL-CHARS'
LESSOPEN='| /path/to/src-hilite-lesspipe.sh %s'
を指定してあげると、カラフルな less 画面となります。
(私は、LESS='-gj10 --no-init --quit-if-one-screen'も付けています。)
(12/08 追記、--quit-if-one-screen も付けていますね。。。1画面に収まる情報なら、cat っぽく使えます。)

こんな .pm ソースコードが。。。


カラフルに!

というわけで、モノクロな世界に色付けて
レッツ Enjoy! (・ω・)ノ

Graphviz でメンテナブルに可視化しよう!

$
0
0
こんにちは!ueharak です。

この記事は Shanon Advent Calendar 2015 の 10 日目の記事です。


みなさん、可視化してますか?
見えるようにすることで気づきを得たり、お互いの認識を合わせることは重要ですよね。でもそのためにイチイチ絵を描くのは大変…

そういう時はツールで可視化しましょう!

http://www.graphviz.org/

Graphviz を使うと、簡単な記法でグラフを生成できます。


こんな風に書いて

digraph {
Lorem -> ipsum
}

こうやって実行すると

dot.exe test.dot -Tpng -o test.png

こんな感じのグラフを出力することができます。





日本語はフォントを指定すれば OK です。

digraph {
node[fontname="meiryo"];
風がふく -> 桶屋がもうかる
}





書式が非常に簡単なため、プログラムでデータを走査した結果を出力して可視化するなどの作業にもってこいです。テキストファイルだからバージョン管理も簡単です。

みなさんもぜひお試しください!

では!


とあるプロジェクトマネージャーの奮戦記(五里霧中な課題編)

$
0
0
こんにちは。Omiです。プロダクトマネージャーやってます。

このチームは2015年2月くらいから3ヶ月の準備期間を持って立ち上げされ、
2015年6月に正式な組織として誕生しました。発足半年の若いチームです。

この発足半年で成果が出たこと、出なかったこと、苦労したことを自分の通信簿を付ける意味でも
まとめていきたいと思います。

<発足の経緯>
あるあるなのかもしれません。
シャノンは設立15年目。設立時の会社が小さなときは

  • 作る人と売る人が机を並べて働いていて、仕様とかの意思の疎通もバッチリ。
  • もっと言えば、業務は専門化されていないから、作る人≒売る人だったりする。
  • 同時並行案件なんてない(少ない)から優先順位の調整なんて必要なし。
  • 目の前のお客さんの要求に応えればいい(明快な仕様&汎用化なにそれ?状態)

だったのですが、幸せなことにお客様のご支援により会社が大きくなり

  • 体制が大きくなり、業務が専門化される。
    • そもそものコミュニケーション量が減少する。
      • そのせいで思うてたんのとちゃう!という製品ができあがる。
  • 同時並行案件の増加
    • 開発ラインの優先順位調整が必要になる。
    • 一石二鳥な開発が必要になる。
  • 複数のお客さんの声。求められる汎用化の声。disられる複雑化した仕様。
    • 当事者の声一つ一つが当事者にとっては最優先事項。
      • 結果、すべての仕様は満たすためにすげー時間がかかる。
      • すべての仕様を満足させた結果、機能が複雑化して満足してもらえない。

    な事態が発生し、最後には
    時間がかかりすぎたため、ニーズがなくなってしまい、開発を途中でやめてしまう
    という開発にとっても、それを売る側にとってもお客様にとっても最大の不幸が発生してしまいました。

    これをどうにかしようということで、シャノンではプロダクトマネジメントを専業とする
    チームが発足することになりました。

    <今回のまとめ>
    • (シャノンにとっては)会社が小さい頃はプロダクトマネジメントがなくてもうまく回ってた。
    • プロジェクトが大きくなるとうまくいかないよね。
    • ということで専業のチームが作られました。

    <次回予告>
    上記のような問題をどのように解決しようとしていったかをお届けします。

    ■おいでませ、プロダクトマネージャーチームへ。
    こんなPMチームですが、現在新メンバーを絶賛募集中ですので、ご興味のある方はぜひご応募ください。(ここがこのブログの本題。)

    詳しくは↓から。

    プロダクトマネージャー
    http://www.green-japan.com/job/35115
    ※(参考画像はこちら)他の人はちゃんとしています。(応募終了しています)
    http://www.green-japan.com/job/31684


    おっさんがお待ちしております。

    ■簡単な自己紹介(おまけ)
    現在37才。シャノンは30代の人が多いのですが、37才は技術部では上から5番目位。
    趣味はスポーツ観戦とゲーム、ですかね。

    <やってきたこと>
    1社目:出版社
     雑誌で記事を書いたり、広告の営業をやったり。そのうちにi-modeサービスが始まったので
     i-modeサイトの運営を行うようになる。

    2社目:ケータイ向けゲーム会社
     ガラケー向け(当時)のゲーム開発やゲームサイト運営を行う。
     → 色々な会社方針で最後の1年は半導体(BLE)製品の企画をちょっとやる。

    3社目:シャノン
    最初はイベントだったり、新製品の導入作業とか。
    異動してプロダクトマネージャーチームの立ち上げ?を行う


    とあるプロダクトマネージャーの奮戦記(悪戦苦闘の立ち上げ編)

    $
    0
    0

    こちらは五里霧中な課題編の続きです。
    よろしければ、課題編をお先にどうぞ。
    前回の内容と若干かぶります。筆は遅いです。

    こんにちは。Omiです。プロダクトマネージャーやってます。
    毎週金曜日の餃子の王将が生きがいです。

    さて今回は立ち上げ編ということで、当初何を考えていたかをまとめていきます。

    <当初の狙い>

    1. プロダクトマネージャー業務を引き取る
    2. 判断を早くする
    3. ステータスを見える化する

    <説明>
    チームの発足まではプロダクトマネジメント業務は明確に定義されていませんでした。
    結果としてCTO側と開発側でゆるい感じで分業していたのですが

    【CTO側】
    判断者としては存在していましたが、兼務ゆえプロダクトマネジメント業務にコミットできておらず。
    さらに言えば、ここ数年のSHANON MARKETING PLATFORM(以下、SMP)は機能改修や顧客要望といった開発が開発ラインの殆どを占めていたので、製品としてのSMPとシャノンの成長戦略とのギャップ発生。

    【開発側】
    マネジメントしながら開発をするのはかなり難しい。
    マネジメントするための情報収集にコストがかかりすぎる。
    各部との合意形成に時間がかかりすぎる。

    また、判断ぽい作業をとにかくプロダクトマネージャーに集約させることで、情報が集まり、判断が早くなることを期待。

    副次的に、情報が一箇所に集まっているので、情報の見える化が推進しなくとも
    Omiに聞けば状況はわかるようになる。

    ということで一石二鳥的な効果を狙って、情報や判断のフローをいったんプロダクトマネージャーに
    集約させてみることにしました。

    <まとめると>
    プロダクトマネジメント業務を明示的に引き取り
     ・CTOには製品戦略をしっかりやってもらう。
     ・開発チームには開発をしっかりやってもらう。
     ・開発プロジェクト全般で統一した軸で判断できるようにする。
     ・見える化は難しいかもしれないが、外部から見て「誰に聞けばいいか」がわかるようにする。
    辺りを狙いました。

    そこでプロダクトマネジメントの業務定義から始めても、
    プロダクトがそれを待てないと思われたので、
    一旦開発以外と思われるものをプロダクトマネージャーチームで全部引き受ける
    ことにしました。

    ■おいでませ、プロダクトマネージャーチームへ。
    こんなPMチームですが、現在新メンバーを絶賛募集中ですので、ご興味のある方はぜひご応募ください。(ここがこのブログの本題。)

    詳しくは↓から。
    http://www.green-japan.com/job/35115
    ※(参考画像はこちら)他の人はちゃんとしています。(応募終了しています)
    http://www.green-japan.com/job/31684




    この写真(PMチーム設立前)から-17kg減量したおっさんがお待ちしております。
    同じチームの人(♂)も53kg→50kgに減量。

    ダイエットに 効果的だぞ プロマネチーム。

    余談:個人的に嫁も募集しております。

    しゃのんあどべんとかれんだー 6日目 (Blogger で Markdown を試してみたおはなし)

    $
    0
    0

    しゃのんあどべんとかれんだー 7日目 (JavaScript 一発ネタ console.table)

    $
    0
    0

    しゃのんあどべんとかれんだー 8日目 (Atom エディタの設定)

    $
    0
    0

    しゃのんあどべんとかれんだー 9日目 (Java にも REPL がくるー?)

    $
    0
    0

    しゃのんあどべんとかれんだー 11日目 (Java にも REPL がくるー? #2)

    $
    0
    0

    安全なWebサイトの構築方法(SSL編) ~Qualys SSL LABSでA評価を目指して~

    $
    0
    0
    年末をいかがお過ごしですか?おはこんばんちは、インフラチームのfujyaです。昨年の年末は色々とあって休みがほとんどありませんでしたが、今年はのんびり年末を過ごしています。2015年を振り返ってみるとOpenSSL周りの脆弱性や証明書のsha1からsha2への切り替えなど、SSL全般に関しての対応が多かったような気がします。
    シャノンでは、通信の秘密を守るために日夜SSL関連のチューニングを怠らなようにしてます。


    チューニングの結果を外部診断して確認する手段としてQualys SSL LABSの「SSL Server Test」を活用しています。SSLサイトチェックの定番です(よね?)。ここでA評価をもらう事が一つの安全の指標といえるのではないでしょうか。

    シャノンのサービスではもちろんA評価です。皆様に安心にご利用して頂くため、日々セキュリティアップデートがあれば対応を続け、A評価を保ち続けます。(ただし利便性を損なう設定がA評価に必要な場合は要検討となります)
















    今回はApacheをインストールしてから、Qualys SSL LABSでA評価を貰えるまでの道のりを説明していきたいと思います。


    ■コピペでOK? コンフィグのジェネレーターを活用してみる


    Aランクを取る方法はとっても簡単。3ステップでOkです。

    https://mozilla.github.io/server-side-tls/ssl-config-generator/
    1:上記サイトにアクセスして
    2:生成されたコンフィグをサーバにコピペして
    3:Apacheを再起動

    A+評価!













    このサイトはmozillaが公開している、良い感じのSSLコンフィグの生成するサイトです。これを利用すると簡単にA評価を取ることができます。が、それでは何がどうなって、どうして安全かという説明が出来ません。
    また、このサイトのIntermediateやModern の設定は非常にセキュリティ的には強固な設定になりますが、ブラウザサポートを考慮していません。基本的には最新物、アップデートされているものだけ、パッチがあったって居ない人からのアクセスは考慮していない、レガシー何それ?というような優しい世界の産物になります。


    Qualys SSL LABSのチェックでは、様々なクライアントの初期設定からのSSLハンドシェイクのシミュレーションを行い、対応しているブラウザや対応していないブラウザについて一覧で表記されるようになっています。
    先ほどのジェネレーターで生成したコンフィグの場合、Android4.3以下、Win7/IE10以下、java6/java7/openssl0.9.8系からの接続ができない事がシミュレーション結果として表示されています。

    これでは、セキュリティはA+だとしてもサイトのサポート状況としてはあまり良いものとは言えないでしょう。






























    [Protocolo or ciper suite mismatch]と表記されている箇所は接続できないクライアント



    ■Apache + mod_sslの初期設定からAランクを目指してみる


    今回はCentOS6系で試してみましょう。まずはapacheとmod_sslをインストールします。

    - 検証環境
    CentOS release 6.7 (Final)
    httpd-2.2.15-47.el6.centos.1.x86_64
    mod_ssl-2.2.15-47.el6.centos.1.x86_64

    今回チューニングするディレクティブは二つあります。

    SSLProtocol と SSLCipherSuite です。

    この二つの設定を変更することで、対応するプロトコル(SSLv3/TLSv1等)と暗号スイート(鍵交換_署名_暗号化_ハッシュ関数 の組み合せと対応表)が変わってきます。

    初期設定は以下の通りでした

    SSLProtocol all -SSLv2
    SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES


    まずはこの状態でQualys SSL LABSにかけるとどうなるでしょうか。






















    そうですね。Cランクになりました。では、解消していきましょう。解消していくポイントについてもQualys SSL LABSは表示してくれているので1個ずつ見ていきましょう。

    ■POODLEは可愛くない


    This server is vulnerable to the POODLE attack. If possible, disable SSL 3 to mitigate. Grade capped to C. 

    はい。POODLE(CVE-2014-3566)さんです。ちょうど昨年の年末頃に騒いでいた問題ですね。

    参考
    http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-004670.html

    https://community.qualys.com/blogs/securitylabs/2014/10/15/ssl-3-is-dead-killed-by-the-poodle-attack 


    この問題に対応するためにはSSLv3を無効化にする事がまずはじめにやるべきことです。SSLProtocolを以下のように変えてみましょう


    SSLProtocol all -SSLv2 -SSLv3


    これにより、SSLv3が無効化されました。(デフォルト設定でSSLv2については無効化済み)SSLv3が無効化された場合は、openssl1.0.1以降のサーバであれば、TLSv.1.0/TLSv.1.1/TLSv.1.2が対応プロトコルとなり、openssl1.0.0未満であれば(0.9.8系も同様)TLSv.1.0のみが対応となります。


    ■no more RC4

    This server accepts RC4 cipher, but only with older protocol versions. 


    かつて、BEAST攻撃が発見された時にAESを含むブロック暗号をCBCモードで行った場合に脆弱であると発表され、その際に対策の一つとしてRC4を使うことが推奨されました。色々と議論は有りましたが現在ではRC4は危険とハッキリ報告されていますのでこの考えは止めたほうが良いです。

    http://www.rc4nomore.com/

    RC4がいま問題視されている理由としては上記サイトに書いてあります。

    ・RC4に対する攻撃は、TLS通信の場合で2000時間以上もかかっていたが機器を使った研究者の実証では52時間で攻撃に成功した(cookieの解読)
    ・cookie以外の暗号化された情報も解読できるほか、「WPA-TKIP」による無線LANの暗号化通信も影響を受ける
    ・この問題を解決する唯一の方法はRC4を使わないこと

    とあります。
    つまりRC4を利用することは現実的な脅威にさらされる事になります。RC4は使わないようにしましょう。

    SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4

    !をつけて設定することで、対象の暗号が無効化されます。ここでは!RC4と書いたので、RC4が無効化されます。


    PFS 対応を考えた Logjam 対策

    The server does not support Forward Secrecy with the reference browsers. 

    Diffie-Hellman(DH)鍵交換の脆弱性で、TLS接続の強度を意図的にダウングレード出来てしまう問題があります。(通称Logjam(CVE-2015-4000))この問題を対応するためには大きく二つの対応方法があります。

    1:512bitの暗号サポートを解除し、1024bit以上を強制する
    2:Diffie-Hellman(DH)鍵交換を止める


    1の対策には問題点があり、私はあまり推奨していません。理由としては大学研究機関規模の計算リソースがあれば 768bit、国家規模の計算リソースがあれば 1024bitまでは現実的に計算可能な範囲に含められる可能性があると指摘されています(参考:https://weakdh.org/)
    では、2048bit以上を強制すれば良いのか?ということなのですが、これはこれでまた問題が出てきます。まずは、Apacheのバージョンは2.2.30以降でなければ2048bit以上にする事ができない事。次に仮に最新バージョンのApacheを利用し、DH 2048bitを優先できた場合でも、java6からのアクセスができなくなってしまう事です。
    APIを開放していサービスを運用していると色々なクライアントからの接続を受け付ける必要があります。その中のユーザエージェントでも意外と多いのがjava6を利用したレガシーシステムからのリクエストがあります。これらのリクエスト遮断してしまうと、お客様のビジネスに対して価値が届かなくなってしまうので良くない対策と考えています。

    Apacheの2.2.26以降であればECDHE(楕円曲線ディフィー・ヘルマン鍵共有)が有効になりますので、DHが利用できなかった場合にはECDHEが利用されるようになります。



    SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH
    SSLHonorCipherOrder On


    RC4の時と同様にDHを無効化設定を追加します。合わせてSSLHonorCipherOrder を有効にします。通常設定ではクライアント側からの暗号スイート提案が優先されますが、SLHonorCipherOrder をOnにする事でSSLネゴシエーションの際に暗号の選択をサーバ側で決定するようになります。この設定を有効にすることで、SSLダウングレード攻撃を防ぐことができます。

    ここまで設定を変えてみて現状のQualys SSL LABSの評価はどうなったか見てみましょう。


















    来ましたA評価!





    今回、Apacheのインストールから最短でA評価もらうまでの設定変更を紹介していきましたが、本当は暗号スイートとプロトコルは環境に合わせて最適なものを設定する方が良いです。例えば、接続するクライアントが決まっているようであれば、そのクライアントにあわせて暗号スイートの強度を最大にしてみたり、httpを開放していて常にhttpsへリダイレクトするようなサイトであれば、HSTSヘッダをレスポンスしたり、色々な対策やチューニング方法が考えられます。
    今回はあくまで初期設定からA評価をもらうまでの最短経路を紹介しただけですので、これが最適とは言えません。
    例えば明示的にMD5を無効化設定にした方が良いですし、(MD5はSSLv3とセットになっているため、一緒に無効化される)スイートのDEFAULTに何が含まれているのか等知っておく必要があると思います。自分で設定している暗号スイートがどういうものか把握していないと、新しい脆弱性が報告された際にすぐに対策することができない可能性もあるかもしれません。

    シャノンでも常にセキュリティを担保しつつ、お客様の利便性を損なわないような設定を常日頃から模索しながらチューニングしていっています。セキュリティを高めすぎてしまい、本当は使えるはずの人が使えなくなるようでは意味がありません。



    • セキュリティは人の為にある
    • セキュリティは1日してならず



    という事を心がけ日々サイトの安全性を保ち続けたいと思います。こんなセキュリティチューニングに興味がある方はぜひ
    http://www.green-japan.com/job/37651
    にアクセスして、ボクと握手!(採用目的)




    ■番外編その1:SSLチューニングする時の便利なツール

    私がSSL周りのチューニングする際によく使うツールがあります。
    https://github.com/jvehent/cipherscan

    opensslコマンドのクライアントモードで対象に接続し、対象のサイトのcipherをチェックする事ができるツールです。これにより俯瞰して現在の設定を見ることが出来ます。また、設定変更した後にキチンと意図した変更になっているかを確認する事ができます。

    実行結果のサンプル
    $ ./cipherscan <対象のサイト>
    .................
    Target: <対象のサイト>:443
    prio ciphersuite protocols pfs curves
    1 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 ECDH,P-256,256bits prime256v1
    2 ECDHE-RSA-AES256-SHA384 TLSv1.2 ECDH,P-256,256bits prime256v1
    3 ECDHE-RSA-AES256-SHA TLSv1,TLSv1.1,TLSv1.2 ECDH,P-256,256bits prime256v1
    4 AES256-GCM-SHA384 TLSv1.2 None None
    5 AES256-SHA256 TLSv1.2 None None
    6 AES256-SHA TLSv1,TLSv1.1,TLSv1.2 None None
    7 CAMELLIA256-SHA TLSv1,TLSv1.1,TLSv1.2 None None
    8 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 ECDH,P-256,256bits prime256v1
    9 ECDHE-RSA-AES128-SHA256 TLSv1.2 ECDH,P-256,256bits prime256v1
    10 ECDHE-RSA-AES128-SHA TLSv1,TLSv1.1,TLSv1.2 ECDH,P-256,256bits prime256v1
    11 AES128-GCM-SHA256 TLSv1.2 None None
    12 AES128-SHA256 TLSv1.2 None None
    13 AES128-SHA TLSv1,TLSv1.1,TLSv1.2 None None
    14 CAMELLIA128-SHA TLSv1,TLSv1.1,TLSv1.2 None None
    15 ECDHE-RSA-DES-CBC3-SHA TLSv1,TLSv1.1,TLSv1.2 ECDH,P-256,256bits prime256v1
    16 DES-CBC3-SHA TLSv1,TLSv1.1,TLSv1.2 None None
    Certificate: trusted, 2048 bit, sha256WithRSAEncryption signature
    TLS ticket lifetime hint: 300
    OCSP stapling: not supported
    Cipher ordering: server
    Fallbacks required:
    big-SSLv3 config not supported, connection failed
    big-TLSv1.0 no fallback req, connected: TLSv1 ECDHE-RSA-AES256-SHA
    big-TLSv1.1 no fallback req, connected: TLSv1.1 ECDHE-RSA-AES256-SHA
    big-TLSv1.2 no fallback req, connected: TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384

    対応している暗号スイート一覧の情報が表示される。この結果を見ながらチューニングを行うと見通しが非常に良いです。


    ■番外編その2:TLS1.0は死んでしまうのか?


    ジェネレーターで生成したコンフィグで設定したサイトの場合はA+評価になっていました。では、この + が付くか付かないかの差はどこで付くかという所ですが、一つあるのがTLS1.0の有効、無効で差がついてきます。(+HSTSヘッダの有無)
    TLSv1.0が有効な場合、BEAST攻撃やLucky13攻撃に対して特定の条件下で脆弱であることが分かっています。この状況をうけてPCI-DSSの最新バージョン(3.1)では、TLS1.0を非推奨としました。
    (参考:https://www.pcisecuritystandards.org/documents/Migrating_from_SSL_Early_TLS_Information%20Supplement_v1.pdf


    ・SSL 3.0およびTLS 1.0の使用を非推奨(新規の場合は禁止)
    ・2016年6月30日までに移行計画を策定及び実行し、それ以降には通常のPCI DSS要件として必須

    また、Quakys SSL LABSのサイトでもTLS1.2が無効の場合はペナルティが設けられるなどTLS 1.0オワコン風潮が高まってきているようです。TLS 1.1以降に対応していないクライアントは多々あるため、これからPCI準拠のクレジットカード決済システム周りで接続できない等、2016年はまた色々とセキュリティのスタンダートってなんだ?というような議論が続いてくようです。



    俺達の戦いはこれからだ!


    という感じで、皆様セキュリティ対策にお疲れになり過ぎないよう良いお年をお過ごしください。

    しゃのんあどべんとかれんだー 12 日目 (Atom で独自キーバインド設定)

    $
    0
    0

    しゃのんあどべんとかれんだー 13 日目 (Perl のエラー処理におけるちょっとした気遣い)

    $
    0
    0

    しゃのんあどべんとかれんだー 14 日目 (そういえば、気になるコマンドラインのアレ。--)

    $
    0
    0

    しゃのんあどべんとかれんだー 15 日目 (Perl のサブルーチン定義で引数の個数をチェックできる方法について)

    $
    0
    0

    しゃのんあどべんとかれんだー 16 日目 (Perl のサブルーチンで引数の型をチェックする方法について)

    $
    0
    0

    しゃのんあどべんとかれんだー 17 日目 (選択的代入時、undef(ined) の場合にのみ変数を初期化する方法)

    $
    0
    0

    しゃのんあどべんとかれんだー 18 日目 (Perl 5 で HTML パースしましょ)

    $
    0
    0

    しゃのんあどべんとかれんだー 19 日目 (Perl 5 で HTML5 パースしましょ)

    $
    0
    0
    Viewing all 210 articles
    Browse latest View live