SubsonicをSSL化してみる

    こんちっち。ひろーちか(@hir0_chika)です。

    最近Subsonicを使い始めたのですが、これどちゃくそ便利ですね。

    私は音楽のストリーミングにはGoogle Play Music(無料で手持ちの楽曲を50,000曲までホストできます。便利!)を使っているので、手持ちの動画のストリーミングのみに絞ってSubsonicを使っています。

    でもって、Subsonicってデフォルトでポート4040番でhttp使うんですけど、これだとログインIDとパスワードが平文で流れちゃうのでhttps化します。(ついでに常時SSL化もします)

    スポンサーリンク

    サーバ環境

    ・CentOS 7.4

    ・subsonic 6.1.1

    前提条件

    ・Subsonicが既にサーバにインストールされており、ログイン可能であること

    ・独自ドメインを取得済であり、ネームサーバの設定が完了していること(独自ドメインでサーバに接続できること)

    ・独自ドメインに対するSSL証明書が発行済であり、apacheに設定済であること(つまり、httpsでのサーバ接続は可能だが、:4040付けてSubsonicに接続しようとすると、繋がらない状態)

    1から説明するのは面倒だったので、少し前提条件を設定しました。

    Subsonicがインストールされているのは当たり前なのでいいとして、ドメインの取得とSSL証明書の設定もやってもらいます。そんな難しくないので。

    ドメインの取得はお名前.com使えば好きなドメインが3分で取れるし、SSL証明書はLet’s Encrypt使えば10分でhttps接続が可能になります。

    日本語ドメインをお使いの場合でも、最近はLet’s Encryptで証明書取れた気がするのでいけると思います。ダメならRapid SSL使いましょう。(このブログもRapid SSL使ってます)

    https化の手順

    /etc/sysconfig/subsonicをいじって、

    付ければいけるかな?と思ったら、なんか知らんけどapacheにインストールされている証明書ではなく、subsonicが作った自己署名証明書っぽいものが勝手に使われてしまったのでやめました。他に良い方法あるのかな?

    代わりにapacheのリバースプロキシ機能を使ってhttp:4040をhttps:4040に転送してあげます。まず、/etc/httpd/conf.d/ssl.confを開きます。(既存の設定ファイルを上書きしたくない方は、別に設定ファイルを作成してください)

    こいつを下のように変更します。

    この設定によりhttpは勝手にhttpsに転送され、かつそれは裏で4040番ポートで接続されるようになります。

    ファイルを保存したら、以下のコマンドでsubsonicとapacheを再起動します。

    転送先のURLがhttpの4040番になっており、転送後は80番ポートではないため<VirtualHost *:80>には引っかからずに、直接httpの4040番で平文で繋がってしまうのではと危惧していましたが、Wiresharkでパケットを拾ってみたところ、きちんと全てhttpsで通信がされているようです。

    また、IEの開発者ツールを使ってのキャプチャもしてみましたが、きちんとログイン時のPOST先もhttpsになっており、その後サーバから200 OKが返ってきていることが確認できました。

    正直なぜこの設定で動くのか自分でも謎ですが、とりあえず「自分で発行した証明書を使う」「接続を暗号化する」という目的は達成できましたので、記事を書くことにしました。

    詳しい方がいましたら、コメントやTwitterでのリプライで教えていただけると嬉しいです。

    それでは。

    スポンサーリンク