TORIPIYO DIARY

recent events, IoT, programming, security topics

おすすめのテック系ポッドキャストをコメントを交えて紹介してみる

【追記2】
2018年版はこちら
toripiyo.hatenablog.com


【追記】
なんだかいつもよりもアクセスが多いなと思ったら、白と水色のカーネーションの公式ツイッターアカウントでこのポストのことをツイートいただきました!ありがたし。

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

僕はテック系のポッドキャストを、もうかれこれ3年以上聞き続けています。これからテック系ポッドキャストを聞きたい人の参考となるように、これまで聞いてきたテック系のポッドキャストでおすすめのもの(テック系で無いのもあるけれど)を、感想と一緒に紹介していこうと思います。
一応、頑張ってランキングもつけてみました。ランキングは、そのポッドキャストに新しいエピソードが追加されたときに自分のテンションがどれだけ上がるか、という独自基準で決められています。

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

第7位 gunosy.fm

gunosiru.gunosy.co.jp
gunosyのエンジニアが配信しているポッドキャストgunosyで働いているエンジニアのことやサービスに使われている技術が話題の中心。司会のかとうさんが割と丁寧に進行を進めているので内容を把握しやすい。まだ配信回数が少ないけれど、応援しています。

第6位 migration.fm

migration.fm
セールスフォースの技術を中心にして、その周辺技術も交えて話されるポッドキャスト。ホストが他のポッドキャストと比べると謙虚な姿勢で好印象。あまり他のポッドキャストで扱われていない技術も話されているのが良い。

第5位 rebuild.fm

rebuild.fm
たぶん、一番有名なテック系ポッドキャスト。ゲストは豪華で様々なWeb系の最前線に立つエンジニアがゲストとして出演している。ただ、最近は宮川さんが忙しいのか更新頻度はちょっと減っている。話されるトピックも昔ほど特定技術の深い話は少なくなり、最近は、アニメ・ゲーム・映画・ガジェットの話を交えながらWeb系テクノロジーの話を紹介していくスタイルが相対的に増えているように感じる。

第4位 mozaic.fm

mozaic.fm
非常にシリアス。本気と書いてマジなポッドキャスト。最近、半年ほどの配信停止期間を挟んで再び走り出した。いまはWeb業界の話題を1ヶ月まとめて紹介するスタイルだけど、以前は1個の技術テーマを深く話す形式だったので、興味があるテーマをタイトルから見つけて聞くと理解が深まる。エンディングで流れる音楽の疾走感はテック系ポッドキャストNo.1。

第3位 engineer meeting podcast

https://engineer-meeting.tumblr.com/post/175452514584/トピックス-人によって受け取り方が違う
engineer-meeting.tumblr.com
サイバーエージェントの中の人がやっているポッドキャスト。比較的他のポッドキャストよりもゲストの種類がバラエティにとんでおり、もっと評価されてもいいポッドキャストだと思うが、iTunesの順位はそれほど高くない。更新頻度は他のポッドキャストがあまり更新されなくなっているので相対的にかなり高い方だと思う。プログラミングを書くエンジニアだけではなくて、新卒で入社したプロデューサーやデザイナーなども登場して普段の業務内容を語っているのでWeb業界に興味のある就活中の大学生にもおすすめできる。話題の展開の速さはポッドキャストの中でも随一。

第2位 だんごゆっけの平和な話

http://dandy.fm/dandy.fm
ゆっけさんとかまだんごさんで運営しているテック系ゆるゆるポッドキャスト。ゆっけさんのポテンシャルを最大限に引き出せるのはやっぱりかまだんごさん。残念ながら現在は配信が止まっている。登場するゲストのいじられっぷりは他のポッドキャストと比べても突き抜けている。あるエピソードではオープニングから30分ほど2人だけで話していて、30分経ってやっと思い出したようにそこにいるゲストを紹介したことがある。かまだんごさんがゲストに対して、何者ですか?と聞いていくスタイル。エンディングテーマの音楽は個人的には一番好き。是非、mozaic.fmのエンディングテーマと聴き比べると味わい深い。

第1位 wada.fm

www.wada.fm
わだえふえ〜む、わだえふえ〜む、わ、わ、わ、わ、わわわ、わだえふえええええむ〜!ボケてのエンジニア和田さんが始めたポッドキャスト。様々な効果音が飛び出し、聞いているものを惑わす。構成も非常に凝っており、その先の展開は読めない。wada.fmのアプリも心を鷲掴みにされたリスナーによって開発された。
https://itunes.apple.com/jp/app/%E3%82%8F%E3%81%A0%E3%81%88%E3%81%B5%E3%81%88-%E3%82%80/id990201922?mt=8&at=10l8JW&ct=hatenablog
僕も大好きなポッドキャストで、最後のエピソードが配信された時はランニング中だったが興奮して飛び跳ねていた。もうずいぶん長いこと配信されていないけれど、いつかまた配信される日を楽しみにしています。

番外編

テック系ポッドキャスト以外も聞いているのでおすすめを1個紹介します。

白と水色のカーネーション
www.carnation.jp
音楽をテーマにしたポッドキャスト。主に海外のバンドを紹介している。しかし実態は、すずきさんの日常をミカさんがふむふむと聞いて過ごすポッドキャスト。映画・本・旅行など話されるテーマは幅広く、心を揺さぶられる。しかし、ミカさんの相槌はいつもどこか緩い感じでそのコントラストが面白い。配信回数は結構長く、昔はひできんさんという人とすずきさんで配信していたらしい。ミカさんのエピソードで母親と一緒にデパートに買い物にいったが内容があまりにアレなのでスズキさんにカットされた回がある。ちなみに、このブログを書くにあたって初めてサイトを見たけれどオシャレ。さすがデザイナー。


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

こんな形になりました。(それにしても、xxxxxx.fmのタイトルが多い。rebuild.fmからの影響?)
今回はテック系ポッドキャストとして紹介していますが、現状のテック系ポッドキャストはほとんどがWeb系テックポッドキャストApple製品などのガジェットレビュー系ポッドキャストで占められています。素人にもわかりやすくハードウェアや自然科学を解説したポッドキャストがもっと増えてきて欲しいのですが、そういったところが専門の人たちにポッドキャストというメディアは認知されていないのか、あまり多くありません。
また、テック系(主にWeb系)のポッドキャスト自体も、2015-2016年をピークとして、継続して配信しているポッドキャストの数もしくは配信頻度は全体的には減っているように感じます。ポッドキャストは作業しながらでも気軽に聞けて、ニッチな話題も聞きたい人に届けられる優れたメディアなので今後も発展していけばいいなと思います。

個人的に聞いているものは今回紹介しているものが中心となりますが、これからも面白いポッドキャストを見つけていきたいと思います。

td-agent-bitでapacheのエラーログを検知してslackに通知させる

td-agent-bitでapacheのエラーログが出力されるとslackに通知が送られるように、raspberry piに設定をしました。(ずいぶんと不恰好な実装になってしまいましたが。)なぜ、td-agentではなくて、td-agent-bitなのかというとサーバ内でのメモリの消費をできる限り抑えたかったからです。td-agent-bitを利用した設定に関する日本語の記事はほとんど見かけない(td-agentはよく見るけど)ので、誰かの役に立つことを祈って残しておきます。

fluentdとfluent-bitの違いはこちらを参照
Fluentd & Fluent Bit |

td-agent-bitのインストールと設定

Raspberry Pi · Fluent Bit v0.11 Documentation

  • td-agent-bit.confでは、apacheのerror.logをみて、ログレベルがerror, crit, alert, emergの時はoutput.txtに出力させるように設定をしています。
  • FILTERのMatchは、basic regular expressionの正規表現がサポートされているようで、|を使ったOR表現は利用できなかった。 結構ハマったので注意。

POSIX BRE does not support any other features. Even alternation is not supported.
http://www.regular-expressions.info/posix.html

# make directory
mkdir -p /home/pi/script/apache_error_log_check

# server gpg key
wget -qO - http://packages.fluentbit.io/fluentbit.key | sudo apt-key add -

# update your sources lists
echo "deb http://packages.fluentbit.io/raspbian jessie main" >> /etc/apt/sources.list

# update repository database
apt-get update

# install td-agent-bit
apt-get install td-agent-bit

# td-agent configuration for apache log
vi /etc/td-agent-bit/td-agent-bit.conf
----------------------------------------------------------------------------------------------
[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    info
    Parsers_File parsers.conf

# error level
[INPUT]
    Name tail
    Path /var/log/apache2/error.log
    Tag  apache2.error_log
    Parser apache_error

[FILTER]
    Name grep
    Match apache2.error_log
    Regex level error

[OUTPUT]
    Name file
    Match apache2.error_log
    Path /home/pi/script/apache_error_log_check/output.txt

# crit level
[INPUT]
    Name tail
    Path /var/log/apache2/error.log
    Tag  apache2.crit_log
    Parser apache_error

[FILTER]
    Name grep
    Match apache2.crit_log
    Regex level crit

[OUTPUT]
    Name file
    Match apache2.crit_log
    Path /home/pi/script/apache_error_log_check/output.txt

# alert level
[INPUT]
    Name tail
    Path /var/log/apache2/error.log
    Tag  apache2.alert_log
    Parser apache_error

[FILTER]
    Name grep
    Match apache2.alert_log
    Regex level alert

[OUTPUT]
    Name file
    Match apache2.alert_log
    Path /home/pi/script/apache_error_log_check/output.txt

# emerg level
[INPUT]
    Name tail
    Path /var/log/apache2/error.log
    Tag  apache2.emerg_log
    Parser apache_error

[FILTER]
    Name grep
    Match apache2.emerg_log
    Regex level emerg

[OUTPUT]
    Name file
    Match apache2.emerg_log
    Path /home/pi/script/apache_error_log_check/output.txt

----------------------------------------------------------------------------------------------

# enable td-agent daemon
systemctl list-unit-files | grep td-agent
systemctl enable td-agent-bit
systemctl list-unit-files | grep td-agent

# start td-agent-bit
service td-agent-bit start
service td-agent-bit status

この設定だけでは、output.txtにerror, crit, alert, emergレベルのログが出力されるだけなのでslackに通知するにはまだ設定が足りません。本当は、td-agent-bitのHTTP outputを使いたくてtd-agent-bit.confに設定を試みたのですが、どうしてもPOSTメソッドで正しい形式でデータを送る設定をすることができなかったので、苦肉の策でoutput.txtのハッシュ値を調べて、変化があったらslackに通知するhellscriptを書きました。

HTTP · Fluent Bit v0.11 Documentation

gist.github.com


上記のファイルを、cronで1分ごとに実行するように設定すればapacheのエラーログを検知できるようになります。ただ、これなら無理してtd-agent-bitを使わなくてもshellscriptだけでもいけるような。。。

# set cron job
mkdir -pv /home/pi/script/apache_error_log_check
cd /home/pi/script/apache_error_log_check && pwd

# put apache-error-log-check.sh script
vi apache-error-log-check.sh
chmod 744 apache-error-log-check.sh

# edit crontab
crontab -e
----------------------------------------------------------------------------------------------
# apache error log detection
* * * * * sh /home/pi/script/apache_error_log_check/apache-error-log-check.sh
----------------------------------------------------------------------------------------------

# test slack alert notification
curl http://localhost/-------------------------------------------------------------------------------

夏の大菩薩峠

8月26日(土)に大菩薩峠に日帰り登山をしてきました。

f:id:ha107chan:20170827211058j:plain
コースタイムつき登山地図が無料! 登山地図&計画マネージャ「ヤマタイム」 - ヤマケイオンライン / 山と溪谷社


コースタイムはこんな感じです。

10:10 上日川峠
10:25 福ちゃん荘
11:40 雷岩
12:00 賽ノ河原
12:15 大菩薩峠到着 (お昼休憩 30分)
12:45 大菩薩峠出発
13:15 富士見山荘
13:35 上日川峠

朝6:30ごろに家を出て南武線と中央線で甲斐大和駅に向かい、9:20発の甲斐大和駅のバスに乗って上日川峠に到着。14:00発の上日川峠のバスに乗って甲斐大和駅に戻ります。駅から登山口までのバスは片道1000円でした。土曜日なので駅から登山口までのバスは補助席も全て利用するほど混んでいましたが、帰りのバスは分散して人が乗るので余裕がありました。

僕は大菩薩峠には大学生の頃に何度か、社会人になっても一度登っているので結構慣れています。今回は友達数人で行きましたが、誰も怪我をすることなく無事に帰ってこれました。
上日川峠から福ちゃん荘までは比較的緩やかな登りです。道もよく整備されているので迷うこともありません。福ちゃん荘から東に向かって大菩薩峠に行く人の方が多いのですが、僕たちは福ちゃん荘から北に向かい唐松尾根を登って、雷岩を経由して大菩薩峠に行くコースで歩きました。雷岩から大菩薩峠に向かう稜線コースは見晴らしがよく、天気がよければ富士山を見ながら稜線を歩けるからです。

唐松尾根を歩いているときは霞がかかっていて少し視界の悪い感じでしたが、
f:id:ha107chan:20170826105030j:plain

雷岩に着く頃には視界が良くなっていました。
f:id:ha107chan:20170826111817j:plain

雷岩から大菩薩峠に向かう稜線上は景色が良くてとても気持ちのいいコースになっています。今回は少し雲が出ていて、富士山を見ることが出来ませんでしたが、天空の道を歩いているように感じます。
f:id:ha107chan:20170826115539j:plain
f:id:ha107chan:20170826115256j:plain

賽ノ河原では石の積まれた山をあちこちで見ることが出来ます。天国のような景色が続いていたのですが、いつのまにか地獄に来たようです。
f:id:ha107chan:20170826115936j:plain

大菩薩峠の小屋の近くで30分ほど休憩をとりました。小屋を覗くと、なんと、小学生の兄弟が店番をしていました。夏休みに山小屋の手伝いをするなんて貴重な経験になりそうです。

小屋から下山を開始して少し歩くと、野生の鹿が数匹いました。
f:id:ha107chan:20170826125028j:plain

川の水もとても綺麗です。
f:id:ha107chan:20170826130823j:plain

大菩薩峠から富士見山荘までの登山道は唐松尾根よりも整備されており、スイスイ進みます。コースタイムでは40分とありましたが、30分ほどで富士見山荘まで到着できました。そこから、福ちゃん荘、上日川峠まで降りて、14:00のバスで甲斐大和駅に戻りました。甲斐大和駅からは各駅電車に乗って、勝沼ぶどう郷駅でおります。駅の前に止まっているタクシーを捕まえて、ぶどうの丘温泉天空の湯の温泉に入りました。
budounooka.com
この温泉の露天風呂からは甲府盆地が一望できてとても気持ちがいいです。下にある休憩所も窓から見える景色が素晴らしく、スペースが広いのでのんびりできます。勝沼がワイン有名で、併設されているショップで勝沼産ワインの購入もできます。

勝沼ぶどう郷駅で電車を待ちながら見える景色も最高です。
f:id:ha107chan:20170826165534j:plain

こんなところでリモートワークできたらいいなと思うのですが、山梨からリモートワークで開発している人もいるのでしょうか?

海だけが熱海ではない

夏休みに友達に会いに熱海に行ってきました。熱海というと、海というイメージがあるかもしれないですが、熱海は坂が多く、実は山がとても近くにあります。
f:id:ha107chan:20170820203747j:plain


僕が熱海に来る時はいつも海から玄岳まで走ることをしています。海抜0メートルの熱海のビーチから標高798メートルの玄岳までを山道を辿りながら一気に駆け上がって行くので結構辛いですが、頂上に到達した時の達成感は大きいです。今年は登っている時の日差しがそレほど強くなくて、最初に登った時と比べたらだいぶ楽に登ることが出来ました。ただ、玄岳の頂上に向かう最後の道は夏なので草が生い茂っていて、草を掻き分けながら進みました。今回は少しガスっていましたが、玄岳の頂上は開けているので、天気の良い時は熱海の街を一望することが出来ます。
f:id:ha107chan:20170819105607j:plain
熱海の街から山頂までは休憩を入れて今回は2時間ぐらいかかりました。前回登った時は65分で山頂までたどり着けたので、気象条件によってタイムはだいぶ変わります。山頂から熱海の街に帰るときには、途中の熱海自然卿で休憩するのがいいです。とてものどかな良い雰囲気なのですが少し交通が不便なので人はあまりいません。近くの自動販売機で飲み物を買って、ベンチに座ってのんびり休憩することが出来ます。去年の5月中旬に行った時はタンポポがあたり一面に咲いていてとてものどかな景色を堪能できました。

今回の熱海訪問では、もう少し普通の観光地らしい場所にも初めて行きました。来宮神社です。
f:id:ha107chan:20170819145949j:plain
半年ぐらい大阪に住んでいたことがあって、京都の神社もいくつか回ったのですが、来宮神社は今まで行ってきた神社の中では一番ホスピタリティに溢れた神社でした。手水舎にはどうやって手を水で清めればどうか説明が書いてあり、拝礼をどうやってすればいいのかの説明も丁寧に記載されているので、あれ二礼二拍手一礼だっけ?それとも一礼二拍手二礼だっけ?と焦ってスマホで調べる必要もありません。また樹齢2000年の大楠の前にはスマホを置く台が設置されていて、スマホのオートシャッターの機能を利用すれば一緒に来た人みんなで写真を取ることもできます。とても暑かったのですが、神社のカフェは雰囲気の良い木陰にあり、美味しい飲み物をいただくことができます。この日はいちごのスムージーを注文しましたがとても美味しかったです。
f:id:ha107chan:20170819151449j:plain

熱海は海と山があって、昭和の雰囲気を残しながらいまもなお開発が進められ発展を続けています。昔のバブルの頃と比べれば人は減っているのかもしれないですが、そのぶんゆっくり観光することができるのでオススメです。
f:id:ha107chan:20170819155833j:plain

WEBサイトの脆弱性学習に使えるOWASP Mutillidae IIのローカル環境での構築と簡単な使い方の紹介

【追記】
vagrantを立ち上げてすぐにphpmyadmin操作できるように、mutillidae_deploy.shにphpmyadmin/config.inc.php設定ファイルの書き換え処理を追加しました。

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

最近WEBアプリのセキュリティについて勉強しているのですが、今回は実際に手元のローカル環境で手を動かしながら脆弱性を学ぶことができるOWASP Mutillidae IIというWEBアプリを紹介します。WEBアプリのソースは下記のサイトから配布されています。
https://sourceforge.net/projects/mutillidae/sourceforge.net

OWASP Mutillidae IIのローカル環境への構築方法

vagrant仮想マシンを立ち上げる

OWASP Mutillidae IIアプリは、LAMP環境で動作するのですが、ゼロからLAMP環境を構築するのは少し面倒なのでVagrantfileを作りました。

上記2個のファイルを配置したディレクトリ上で、

vagrant up

を実行すれば、OWASP Mutillidae IIアプリのインストールされたvirtual machineがローカル環境上に立ち上がります。vagrantのインストール方法はWEB上にたくさん掲載されているので別サイトで確認してください。

Mutillidae用のデータベースを設定する

vagrant upで仮想マシンが立ち上がった後は、
http://192.168.33.10/mutillidae/ で仮想マシンにブラウザからアクセスします。

下記の画面が表示されるので、"setup/reset the DB"のリンクをクリックすると、
f:id:ha107chan:20170816123804p:plain

また下記の画面が表示されるので、OKをクリックすれば、Mutillidae用のデータベースが仮想マシンMySQL上に構築されます。
f:id:ha107chan:20170816124134p:plain

HTTPS接続の有効化

デフォルトではMutillidaeとはHTTPで通信を行います。ただ、HTTPS通信に関する脆弱性などの勉強をしたいときにはHTTPSを有効化する必要があります。上記のVagrantfileでは、仮想マシン側でHTTPS通信が出来るようになる設定をしているので、MutillidaeアプリでもHTTPS通信をするように設定させます。

下記URLにアクセスして、
http://192.168.33.10/mutillidae/

下記画面のEnforce SSLをクリック。
f:id:ha107chan:20170816124506p:plain

自己証明書なので、下記のような警告画面が出ると思いますが、無視して先に進めます。(Chromeであれば、Proceed to 192.168.33.10 (unsafe)をクリック)
f:id:ha107chan:20170816124700p:plain

そうすると、HTTPSが有効になります。
f:id:ha107chan:20170816125144p:plain

OWASP Mutillidae IIの簡単な使い方

OWASP Top 10とは、ウェブサイトでよく見られる脆弱性のTop10を世界中のセキュリティの専門家がまとめて公表したものです。
Category:OWASP Top Ten Project - OWASP
数年ごとに内容を見直しているようで、OWASP Top 10(2010), OWASP Top 10(2013)などがあります。

例えば、OWASP Top 10(2017)のA1 - Injection(SQL)の内容を確認したい場合は、左側のメニューから順番に階層構造をたどって目的の脆弱性のデモ画面のリンクをクリックします。
f:id:ha107chan:20170816134022p:plain

このような感じで各機能の脆弱性を実際に自分の目で確かめながら確認することが出来ます。下記は、入力したHTMLタグ(br)がそのまま出力の際に処理されてしまっている例です。
f:id:ha107chan:20170816134445p:plain

How to Implement Nginx Client Certificate Authentication

When we need to collaborate with outside companies to manage web site's content, admin tool site is sometimes used. So admin tool has to be exposed on the Internet network. In this case password authentication function is often used to restrict other client's access. But Nginx can also use client certificate authentication function. So I would like to introduce client certificate implementation in this article.

client certificate authentication benefits
1. Nginx can deny irrelevant user's access.
2. Nginx can revoke issued client certificate at any time.

About 1, even if username and password is not leaked, hackers try to do a brute force attack indiscriminately. So password authentication might be broken someday. Client certificate authentication doesn't allow user access who doesn't have a client certificate. This feature makes the site more secure that is exposed to the Internet Network.
About 2, Nginx administrator can revoke the client certificate to deny admin tool access from unauthorized user when outside company's contract finishes.

How to implement client certificate authentication by Nginx

Nginx server side settings

Off course root user is used when configure Nginx settings. In this example Nginx is installed under "/usr/local/nginx" directory. Please adopt below instructions to your environment properly.

1. generate CA certificate and Key

mkdir -pv /usr/local/nginx/conf/client-certificates
cd /usr/local/nginx/conf/client-certificates

openssl genrsa -out ca.key 2048

# set proper certificate expiration date, in this example 2 years
# set site's domain name on "CN" field
openssl req -new -x509 -days 730 -key ca.key -out ca.crt -subj "/C=JP/ST=Tokyo/L=Ota-ku/O=Cat Inc./OU=Development/CN=tool.toripiyo.com/emailAddress=admin@toripiyo.com"

2. generate CRL

# configure CRL for revocation settings
touch /etc/pki/CA/index.txt  && echo '01' > /etc/pki/CA/crlnumber
openssl ca -name CA_default -gencrl -keyfile ca.key -cert ca.crt -out ca.crl -crldays 730

diff -U0 <(openssl x509 -noout -modulus -in ca.crt) <(openssl rsa -noout -modulus -in ca.key)


3. generate client certificate for each user

# In this example "toripiyo" user's client certificate is generated
# Please iterate this process as you require
_CLIENTNAME='toripiyo'

mkdir /usr/local/nginx/conf/client-certificates/${_CLIENTNAME}
cd /usr/local/nginx/conf/client-certificates/${_CLIENTNAME}
openssl genrsa -out ${_CLIENTNAME}.key 2048
openssl req -new -key ${_CLIENTNAME}.key -out ${_CLIENTNAME}.csr -subj "/C=JP/ST=Tokyo/L=Ota-ku/O=Cat Inc./OU=Development/CN=${_CLIENTNAME}/emailAddress=admin@toripiyo.com"

openssl x509 -req -days 365 -in ${_CLIENTNAME}.csr -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -CAserial ../ca.seq -out ${_CLIENTNAME}.crt

# this command execution prompts the password input. don't forget the password. the password is used for client certificate registration
openssl pkcs12 -export -clcerts -in ${_CLIENTNAME}.crt -inkey ${_CLIENTNAME}.key -out ${_CLIENTNAME}.p12

# set file permission to 640
chmod 640 ${_CLIENTNAME}.*
ls -lta

4. configure Nginx settings

cd /usr/local/nginx/conf
cp -ivp nginx.conf{,.$(date +%Y%m%d)}
vi nginx.conf
# add the following directives that are related to client authentication
# - set clientcert log format
# - ssl_verify_client on: enable client certificate authenticate. if client certificate is not shown, access is defied.
----------------------------------------------------------------------------------------------
log_format clientcert '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for" '
                   '$request_time $upstream_response_time '
                   '"$ssl_client_s_dn($ssl_client_serial)"';

ssl_client_certificate client-certificates/ca.crt;
ssl_crl client-certificates/ca.crl;
ssl_verify_client on;

access_log  logs/host.access.log  clientcert;
----------------------------------------------------------------------------------------------

5. restart Nginx

# stop Nginx daemon
ps aux | grep -i nginx
/etc/init.d/nginx stop
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

# start Nginx daemon
/etc/init.d/nginx start
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

Client side settings

Client certificate file name will be ${_CLIENTNAME}.p12. On the way to client side settings requires the password that is set on above procedure.

macOS safari browser's client certificate settings

Adding a client certificate | Cybozu manual site

iOS safari browser's client certificate settings

Adding a client certificate | Cybozu manual site

typical regular operations for Nginx client certificate management

issue new client certificate for new user

If new client(tama) joins our team, issue the new client certificate by following below procedure.

1. issue client certificate
_CLIENTNAME='tama'

mkdir /usr/local/nginx/conf/client-certificates/${_CLIENTNAME}
cd /usr/local/nginx/conf/client-certificates/${_CLIENTNAME}
openssl genrsa -out ${_CLIENTNAME}.key 2048
openssl req -new -key ${_CLIENTNAME}.key -out ${_CLIENTNAME}.csr -subj "/C=JP/ST=Tokyo/L=Ota-ku/O=Cat Inc./OU=Development/CN=${_CLIENTNAME}/emailAddress=admin@toripiyo.com"

openssl x509 -req -days 365 -in ${_CLIENTNAME}.csr -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -CAserial ../ca.seq -out ${_CLIENTNAME}.crt

# password can be put on as a openssl option directly. "doraemon" is used as a password in this case
openssl pkcs12 -password doraemon -export -clcerts -in ${_CLIENTNAME}.crt -inkey ${_CLIENTNAME}.key -out ${_CLIENTNAME}.p12

# set file permission to 640
chmod 640 ${_CLIENTNAME}.*
ls -lta

2.Nginx restart is not required

3. Share new client certificate with new user

revoke specific client certificate

When tama leaves our team, following procedure makes the certificate to be revoked.

1. update index.txt
_CLIENTNAME='tama'
cd /usr/local/nginx/conf/client-certificates
openssl ca -name CA_default \
    -revoke ${_CLIENTNAME}/${_CLIENTNAME}.crt \
    -keyfile ca.key \
    -cert ca.crt

2. update ca.crl
openssl ca -name CA_default -gencrl \
    -keyfile ca.key \
    -cert ca.crt \
    -out ca.crl \
    -crldays 730

3. restart nginx
ps aux | grep -i nginx
/etc/init.d/nginx stop
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

/etc/init.d/nginx start
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

reactivate the revoked certificate

If tama withdraws team leaving, following procedure makes the certificate to be reactivated.

1. modify index.txt
vi /etc/pki/CA/index.txt
====================
1. change "R" => "V" on first column of corresponding certificate row
2. delete third column characters of corresponding certificate row (important: tabs between second and fourth colomn not to be deleted!! If not, openssl outputs error message.)
====================

2. update ca.crl
cd /usr/local/nginx/conf/client-certificates
openssl ca -name CA_default -gencrl \
    -keyfile ca.key \
    -cert ca.crt \
    -out ca.crl \
    -crldays 730

3. restart nginx
ps aux | grep -i nginx
/etc/init.d/nginx stop
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

/etc/init.d/nginx start
ps aux | grep -i nginx
less /usr/local/nginx/logs/error.log

友達に会いにマレーシアまで旅行に行ってきた

ちょっと前、7月の上旬にマレーシアで働いている友達に会いに行ってきました。
f:id:ha107chan:20170708124704j:plain

訪れた場所は、クアラルンプールとペナン島です。いままで東南アジアはタイとカンボジアに行ったことがあるのですが、マレーシアは一番治安が良いように感じました。ただ、ボルネオ島の東側は海賊が出るそうなので、東側の島に行くときは注意が必要です。マレーシアにはマレー系と中国系とインド系の人がいて、日本に比べれば多民族国家です。ごはんもマレー料理、中華料理、インド料理のレストランがあります。(マレー料理のレストランではアルコールは飲めないそうです。間違えてマレー料理の店にアルコールを持ち込まないように気をつけましょう。)物価は日本の3分の1ぐらいだそうで、大変住みやすそうな国でした。Gacktが住むのも納得です。

気候

気候は年中夏の天気で、天気予報を見るといつも晴れときどき雷雨となっています。ただ気温は30度前後で、自分が滞在していたときは40度近い気温にはなりませんでした。友達はいつも夏なので服をあまり買わなくなったそうです。
f:id:ha107chan:20170812144711p:plain

シムフリー

いつも海外旅行ではシムフリーを利用しているのですが、マレーシアが一番手続きが簡単でした。KLIA2の空港に着いて入り口を出るとプリペイドシムフリーを販売している販売店がいくつもあります。自分はdigiという会社のシムフリーを買いました。値段はたしか500~800円で3GBぐらいあったと思います。旅行中ずっと使いましたが、ペナン島でも問題なくLTEを利用できました。ただ、マレーシアの通過のリンギットでないとシムフリーを購入できなかったので、まず空港内の両替所で日本円からリンギットに両替しましょう。マレーシアで両替したほうが日本よりも交換レートは良いそうです。

街中の移動方法

マレーシアにもUberはあるのですが、Grabというアプリがマレーシアでは一番はやっているそうです。友達は空港に行くときによく利用すると言っていました。運転手は様々で、普通のおじさんからものすごい若い見た目(中学生?に見えた)の人まで様々な人が運転手をしていました。現金払いもできるようで、友達はクレジットカード登録は怖いのでいつも現金払いをしていると言っていました。
f:id:ha107chan:20170812151357j:plain

クアラルンプールからペナン島への行き方

マレーシアで働く友達が事前にエアアジアの国内便を予約してくれていたので飛行機で行きました。KLIA2とペナン空港を往復でチケット代は5000円ほどです。飛行機に乗る時間自体は1時間弱なのですが、空港までの移動や空港での待ち時間を入れると合計5時間ぐらいはかかっている気がします。

マレーシアのたべもの

中国料理

  • チャーシュー

初日の朝ごはんで行った中国料理店で食べたチャーシュー(?)はとても美味しかった。
一応、屋内だけど外と屋内を仕切る壁が全くなく、地元の人も朝から通っているようだった。
f:id:ha107chan:20170708090043j:plain

マレー料理

  • ホテルの朝ごはん

マレー系の人が経営しているホテルにペナン島では泊まったので朝食のメインはマレー系料理です。ココナッツの汁でといたごはんは甘いのかと思っていたのですが、食べてみるとそんなに甘さは感じませんでした。
f:id:ha107chan:20170709082335j:plain

  • ラクサ

マレーシアの麺料理ラクサ。ペナンの空港で食べました。麺が柔らかくて、酸っぱいスープは日本ではなかなか味わえないので、食べれば記憶に残ります。
【マレーシアソウルフード ヌードル編】 | マレーシアマガジン
f:id:ha107chan:20170709131357j:plain


インド料理
食べていない。。。。つぎ来たときは食べよう!

その他

  • あんぱん

見た目はそれほど美味しそうに見えないけれど、個人的にはものすごくお薦めしたいあんぱん。30~40円ぐらいでスーパーで売られていて、日本のコンビニで売られているアンパンよりもちもちして柔らかくて美味しかった。
f:id:ha107chan:20170709154436j:plain

日本では売られていない不思議な味がした。ポカリスエットに炭酸。これはこれで、ありかもしれない。
f:id:ha107chan:20170708194844j:plain

  • ドリアン

噂どおり、においが強烈!!結局、現地で生のものを食べる勇気は持てなかった。
f:id:ha107chan:20170708202510j:plain

行った場所
  • バトゥ洞窟

洞窟の中にあるお寺で、ヒンドゥー教の聖地だそうです。自分が訪れたときには洞窟内で工事が行われていました。洞窟内にある像の配色がとてもカラフルで、京都などのお寺にある仏像とは全然異なっていました。お土産物屋さんの商品もとてもカラフルです。
f:id:ha107chan:20170708101654j:plainf:id:ha107chan:20170708102334j:plain

  • バードパーク

クアラルンプールにある様々な種類の鳥を見ることができる施設です。入場料は1000円を超えてマレーシアにしてはちょっと高いですが、入ればいろんな種類の鳥を見ることが出来るので元は取ることが出来ると思います。この施設の中にはドクターフィッシュの出来る場所があって、日陰で休みながら魚に古い角質を食べてもらいました。ドクターフィッシュ自体の料金はそんな高くなかったと思います。
f:id:ha107chan:20170708111849j:plainf:id:ha107chan:20170708112646j:plain

ちょうどペナン島に行ったときには夜にお祭りがやっていたようで、夜の街はたくさんの人で賑わっていました。人が多いので荷物には気をつけていたのですが、置き引きなどがいるようには感じませんでした。ストリートパフォーマンスをしている人や、いろんな露店があるので、食べながら夜の街並みを探検するのも楽しいです。
f:id:ha107chan:20170708194148j:plainf:id:ha107chan:20170708195253j:plain

  • ペナンプラナカンマンション

ペナン島にある昔の中国系の富豪の家を博物館として公開している場所です。華やかな暮らしを数々の装飾品から感じることが出来ます。自分もこんな家に住みたい。。。
f:id:ha107chan:20170709094803j:plainf:id:ha107chan:20170709095828j:plain

おみやげ
  • ドリアンチョコ

現地で生のドリアンを食べる機会はなかったので、空港の売店でベリーズのドリアンチョコを買いました。チョコになっているので少しドリアンの風味がするぐらいかなと思っていたのですが、強烈な匂いはチョコになっても健在ですw 自分は結局1個しか食べることが出来なくて、会社に持っていっても日本人はほとんど食べず中国人や台湾人の方が食べていました。次は普通のチョコを買おうと思います。



まだまだいろいろと食べてない料理や行ってない場所など、マレーシアにはたくさんあるので、友達が働いている間にまた行こうと思います。