【XAMMP】バーチャルホスト + SSL証明書を有効にする <Windows>

ローカルでささっと確認するのにXAMPPを使っているのですが、テストしたりするのにXAMPP環境もSSL化しておかないとなっていうことで、調べながら対応させたのでメモ。

目的

https://site01/
https://site02/
でアクセスできるようにする。
環境:Windows7、Google Chrome
 

1.バーチャルホストの設定

1.php.iniファイルを確認

extension=php_openssl.dllがコメントアウトされていないか確認
xamppをC直下にインストールした場合は以下のパス
C:\xampp\php\php.ini
デフォルトではされていないもよう。

;extension=php_openssl.dll
↓
extension=php_openssl.dll

頭に ; がついていたら削除
 

2.httpd-ssl.confの編集

以下のファイルに追記
C:\xampp\apache\conf\extra\httpd-ssl.conf

<VirtualHost *:443>
    ServerName site01
    DocumentRoot "C:/xampp/htdocs/site01"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

<VirtualHost *:443>
    ServerName site02
    DocumentRoot "C:/xampp/htdocs/site02"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

DocumentRootにはルートディレクトリのパスを指定。

SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
のパスはバージョンによってか変わるみたいなので、httpd-ssl.conf内でSSLCertificateFileSSLCertificateKeyFileで検索して同じパスを設定しておく。
 

2.hostsファイルの編集

hostsファイル追記します。通常以下のパスにあります。
C:\Windows\System32\drivers\etc\hosts
一番最後に以下を追記します。

127.0.0.1 site01
127.0.0.1 site02

保存したらApatcheを再起動してブラウザで一旦確認。
https://site01/でブラウザでアクセスしてみます。

f:id:annykyon:20180322131603p:plain

こんな感じで警告が表示されますが、site01にアクセスする(安全ではありません)からとりあえず無理やり表示。
アドレスバーに以下のように警告が表示されますが、ひとまずバーチャルホストの設定はOK。

f:id:annykyon:20180329132100p:plain
 

2.SSL証明書の発行と設置

1.OpenSSL設定ファイルを編集する

C:\xampp\apache\conf\openssl.cnfをコピーして、openssl-san.cnfにリネーム。
一番下に以下を追記します。

[ SAN ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = localhost
DNS.2 = site01
DNS.3 = site02

 

2.サーバ証明書、秘密鍵の作成

Git Bashなら、そのままopensslコマンドを使えるということなので、Git Bahを使いました。

# ディレクトリ移動
$ cd /c/xampp/apache/conf

# サーバ証明書、秘密鍵を生成
$ openssl req \
> -newkey  rsa:4096 \
>  -keyout  my-server.key \
> -x509 \
>  -nodes \
> -out my-server.crt \
> -subj  "//CN=localhost" \
> -reqexts  SAN \
> -extensions  SAN \
> -config  openssl-san.cnf \
> -days  3650
Generating a 4096 bit RSA private key
.............................................................................................................................++
...............................................................++
writing new private key to 'server.key'
-----

これで $C:\xampp\apache\confに、 my-server.crt my-server.key ができました。

このファイルをそれぞれ以下のディレクトリに移動します。
my-server.crtC:\xampp\apache\conf\ssl.crt\
my-server.keyC:\xampp\apache\conf\ssl.key\

 

3.サーバ証明書、秘密鍵のパスを変更

C:\xampp\apache\conf\extra\httpd-ssl.conf のサーバー証明書と秘密鍵のパスを作成したファイル名に書き換えます。

<VirtualHost *:443>
    ServerName site01
    DocumentRoot "C:/xampp/htdocs/site01"
    SSLEngine on
#server.crtをmy-server.crtにserver.keyをmy-server.keyに書き換え
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

<VirtualHost *:443>
    ServerName site02
    DocumentRoot "C:/xampp/htdocs/site02"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

 

4.証明書のインストール

1.C:\xampp\apache\conf\ssl.crt\my-server.crt をダブルクリックし、証明書ウィンドウが開いたら証明書のインストールを選択。

f:id:annykyon:20180329150752p:plain

2.証明書をすべて次のストアに配置するを選択。
3.参照ボタンをクリックし、信頼されたルート証明機関を選択し次へをクリック。
4.セキュリティ警告がでますが、はいを選択

以上で、証明書がインストールされました。

 

5.確認

apacheを再起動し、 https://site01/ でアクセスしてみます。
アドレスバーが保護された通信になっていたら成功です。

f:id:annykyon:20180329151951p:plain

 

参考記事

XAMPP for WindowsでSSLを有効にする - Qiita

opensslでマルチドメイン証明書用のCSRを作成

IRKit + Google Home + IFTTT でスマートじゃない家電を操作する

Google Homeがうちにやってきたので、やっぱ音声アシスタントといえば家電を操作したいよね。といってもうちの家電はスマートでもなんでもなく7年前の霧ヶ峰なので、以前から使っているIRKitをそのまま使ってやってみたのでその時のメモです。

IRKitはいわゆる学習リモコンで赤外線情報を学習してWiFiを通じて家電を操作できるもので、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しているという素敵なものです。
 
 

 

1.IRKitのIPアドレスを取得

IRKit公式ではBonjourで取得する方法が紹介されていましたが、私はルータの設定画面で確認しました。

f:id:annykyon:20180308161458p:plain

こんなかんじで私の環境では192.168.11.2でした。

 

2.赤外線信号を取得

IRKitで受信した最も新しい赤外線信号を返してくれます。
192.168.11.2のところはIRKitのIPアドレスです。

% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

 

3.コマンドで赤外線信号を送ってみる

{"format":"raw","freq":38,".... } のところはさっき取得した赤外線信号にします。

% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}'

ピッっとエアコンがついたらここまで成功☆  
 

4.clienttoken, clientkey, deviceid を取得する

この赤外線信号を外部から送信するために、IRKitのclienttoken, clientkey, deviceid を取得します。

clienttokenを取得

% curl -i "http://192.168.11.2/keys" -d '' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

取得したclienttokenからclientkey, deviceid を取得。

% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 08 Mar 2018 14:45:52 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff

{"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}

 

5.APIリクエストの作成

clientkeyとdeviceidのところはさっき取得したものにします。

https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXXXXXXXXX&deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&message={"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

 

6.Google Home→IFFFT経由でIRKitに信号を送る

ここから先はIFFFTというサービスを使いました。IFFFTはサービスとサービスを連携させる仕組みを提供しているシステムで、例えば「Instagramにアップした画像をDropboxに保存する」とか「Gメールにスターをつけたら自動的にEverNoteに保存する」とかIF(もし)○○したら△△するというのを組み合わせを好きなようにつくれます。 今回はGoogle Homeに話したらWebhookでIRKitのAPIにリクエストするということになります。  

IF(Google Homeにあるフレーズを話したら)を設定する

IFTTTへのログインはすませておき、My Applets > New Applet を選択。
「if + this then that」+ this をクリック。検索に「google」と入力するとGoogle Assistantが出てくるのでこれを選択。そしてSay a simple phraseを選択します。

ここでGoogle Homeにトリガーとなるフレーズを設定するんですが、ちょっと壁が…。「エアコンをつけて」とか「エアコンオンにして」とかにすると、もともとスマート家電用に予約されているようで、Google Homeに「設定ができていない」とかなんとか怒られてしまいました。

(これは後で解決したのでこちらで記事にしてます)
Google Home で予約語「エアコンつけて」を使えるようにする - Silent Lips

回避方法はあとで調べようってことで、ひとまずエアコンに「ぽかぽかさん」とかニックネームつけるかなーとつぶやいていたら、横から
「エアーコントローラーオンにして」 にしたら?
というアドバイスが…
エアコンはエアーコントローラーの略じゃないでしょ…と思いつつ、つっこむのが面倒だったのでそのまま設定します。

f:id:annykyon:20180309003730p:plain

What do you want the Assistant to say in response? のところはGoogle Home からのレスポンスなので「エアーコントローラーok」としました。エアコンはエアーコントローラーの略ではありません。
Languageは日本語なのでJapaneseに設定したら create trigger でセット。

that(IRKitのAPIにリクエストを送信)を設定する。

「if then + that+ thatをクリックして検索に「webhooks」と入力するとwebhooksがでてくるのでこれを選択。さらにMake a web requestを選択。

1.URLのところにさっき 5.APIリクエストの作成 でつくったURLをいれる。
2.MethodPOSTに設定
3.Content Typetext/plain
4.Creat action で登録
5.Finish ボタンで終了

f:id:annykyon:20180309133744p:plain
 

7.Google Homeで実際に確認

エアーコントローラーオンにして と問いかけるとピッとエアコンの電源が入り、 エアーコントローラーokです と返してくれました。
あと、エアコンはエアーコントローラーの略ではありません。

 

参考記事

IRKit - Open Source WiFi Connected Infrared Remote Controller

https://kotodama.today/?p=855

【Terraria】TerrariaをドラクエのBGMでプレイする【WaveBank】

 f:id:annykyon:20180303222846p:plain

「Terraria」がおもしろいです。
久々に人生棒にふるくらいおもしろいです。

  私はPC版でプレイしていますが、PS版やWii U版やスマホアプリまであるくらい色んなハードで出てるけど、あんまり聞いたことがなくてメジャーなのかマイナーなのかわからないゲーム「Terraria」。
このドットと横スクロールの世界観で一見ライトな感じなのに総アイテム数2000以上とかなんとかでやり込み要素もありどっぷり没入するハードコアなゲーム「Terraria」。

 この世界観はぜひ初期ドラクエのビットサウンドでプレイしたいよね!ということで、Terrariaをインストールしたらまずは、TerrariaのBGMをドラクエ化しましょう。

 

 

1.Wave Bank.xwbのバックアップ

steam版TerrariaのBGMデータはゲームデータ内のWave Bank.xwbというファイルで、このファイルは複数のサウンドデータがグループ化されているものです。この中に全てのBGMが入っているのでこのファイルを置き換えることでBGMをドラクエ化します。

通常以下のパスにあるかと思います。コピーするなどしてバックアップをとっておきましょう。

C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

f:id:annykyon:20180302154213p:plain

 

2.QuickWaveBankのダウンロード

 以前やったときは、ちょっと大変だったんですが、簡単にWave Bankデータをつくれるツールを公開している方がいました。ありがとうございます。

ここからQuickWaveBankをダウンロードします。現時点での最新版は1.0.2.3なのでこれを適当な場所に保存。

 

3.Wave Bankの中身をとりだす

 もともと入っているTerrariaのサウンドデータを取り出します。この手順をふまなくてもWave Bankファイルは作れるのでとばしてもかまいませんが、一部オリジナルのサウンドを使うなどの場合は中身をとりだしておきましょう。雨の効果音も入っているのでそこらへんはオリジナルデータを使った方がいいかもしれません。

 

1.ダウンロードしたQuickWaveBank-1.0.2.3.exeを起動

2.下の方にある【Ectract】ボタンをクリック

f:id:annykyon:20180302152922p:plain

3.ファイル選択のダイアログが開くので以下のファイルを選択
C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

f:id:annykyon:20180302153046p:plain

4.保存先を聞かれるので適当にデスクトップなどに保存用のフォルダを作成して【OK】ボタンをクリック

f:id:annykyon:20180302153121p:plain

5.指定したフォルダにwaveファイルが展開されました

これがTerarraのBGMデータになります。

f:id:annykyon:20180302153224p:plain

 

4.置き換え用のWave Bankデータの作成

 以下リストがTerrrariaのBGMリストです。

Terraria BGMリスト
  1. Overworld Night
  2. Eerie
  3. Overworld Day
  4. Boss 1
  5. Title Screen
  6. Jungle
  7. Corruption
  8. Hallow
  9. Underground Corruption
  10. Underground Hallow
  11. Boss 2
  12. Underground
  13. Boss 3
  14. Snow.
  15. Space
  16. Crimson
  17. Boss 4
  18. Alt Overworld Day
  19. Rain
  20. Underground Snow
  21. Desert
  22. Ocean
  23. Dungeon
  24. Plantera
  25. Boss 5
  26. Temple
  27. Eclipse
  28. Rain Ambience
  29. Mushrooms
  30. Pumpkin Moon
  31. Alt Underground
  32. Frost Moon
  33. Underground Crimson
  34. Lunar Event
  35. Pirate Invasion
  36. Hell
  37. Martian Madness
  38. Moon Lord
  39. Goblin Invasion
  40. Sandstorm
  41. Old One's Army

 

1曲目がOverworld Nightなので森林の夜。2曲目はEerieブラッドムーンですね。

どの曲がどの場所のなのかわからなければこちらを参考に。(英語)
Music - Official Terraria Wiki

 後はこの順番にQuickWaveBankにwaveファイルを追加していきます。
利用できるファイルはwaveファイルのみでmp3などは使えません。mp3などしかない場合は、以下のエンコードソフトなどをつかって変換しておきましょう。

XMedia Recode - Download

 

1.QuickWaveBankを起動

2.QuickWaveBankのウィンドウに上のTerraria BGMリストの曲順通りに置き換えたいサウンドファイルを追加していきます。ファイル名はなんでもかまいませんが日本語が入っているとファイル作成時にエラーがでるっぽいので半角英数字にしておきましょう。置き換えたいファイルはお好みで。ですが、5曲目のTitle Screenはタイトル画面なのでドラクエ3のテーマをお勧めします。

追加するファイルの置き場がデスクトップなどの場合、パスのユーザー名に日本語が入っているとファイル作成時にエラーがでるのでCドライブ直下などにフォルダを作るなどして置いておきましょう。

f:id:annykyon:20180303212610p:plain

3.すべての曲を追加し終わったら上のOutput Fileのフォルダアイコンをクリックし、ファイルの保存場所を適当な場所に設定し、一番下の【Build】ボタンをクリックするとWave Bank.wxbが作成されます。

 

4.作成したファイルで以下の場所のファイルを置き換えます。
C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

 

5.terrariaを起動し、タイトル画面であのテーマ曲が流れれば成功です!

ENJOY Terraria!!!!

f:id:annykyon:20180303222846p:plain

 

個人で楽しむ範囲で遊びましょうー。 

ゲーム音源はご自身で購入してくださいね。

「ドラゴンクエスト」ゲーム音源大全集1