planet-green.com

[開発/備忘録] 個人でSSL証明書を取得してHTTPS化してみた話



個人でSSL証明書を取得して当サイトをHTTPS化してみました。
証明書はGeoTrust社のRapid SSLです。

実はその少し前に無料のLet’s Encryptを試しに入れていたのですが、次章で書く懸念事項があり、Rapid SSLが3年間3,200円(税別)と安かったので購入することにしました。ちなみにニジモさんで購入しました。

Let’s Encryptについて

無料なのは大変ありがたいです。理念も素晴らしいと思います。

証明書を取得・更新するためには、一時的にWEBサーバー(Apacheやnginxなど)を停止し、専用のスクリプトを走らせる必要があります。

このスクリプトはサーバーの80ポートまたは443(SSL)ポートを独占して認証サーバーのAPIにアクセスし証明書を取得するようです。
(おそらくサーバーの所有者であることを確認するためにそのようにしているのでは無いかと思います)

証明書は90日ごとに更新が必要なので、サーバー管理者が手動で行うか自動化スクリプトをcronで登録する必要があります。

怖いのは、いつか忘れた頃にLet’s Encrypt側のAPI仕様やURLが変更されて自動更新に失敗したり、無料サービスが打ち切られてしまうことですね。

最初は無料で始まったサービスがいつのまにか有料になったり、大手企業に買収されて理念が大きく変質してしまった例を何度か見てきていますので・・。
(前者ならDynDNS、後者ならMySQLなどですね)

また、サーバーを管理する者としては、自分が忘れている間にWebサーバーが一時停止された後、何らかのトラブルで再起動に失敗するのが一番怖いです。

・・・と、懸念事項を思いつくだけ書いてみましたが、個人が趣味で運営しているようなサイトなら大きな問題にはならないでしょう。

しかし、商用利用してるサーバーや業務で扱うサーバーではリスクが大きいかもしれません。

Rapid SSLとFUJI SSLの比較

ニジモさんではFUJI SSLという日本のセコム社が販売しているSSLも取り扱っていて、こちらの方が3年2,400円(税別)と安かったので、購入時の比較対象としました。

ちなみに両者の対応ブラウザは次のようになっています。

RapidSSL

  • Internet Explorer ver.6以降 ※1
  • Chrome 1.0以降
  • Opera 9.5以降
  • Firefox 1.0.0以降
  • Mac OS X Safari 2.0以降 ※1
  • Android Ver.1.5以降 ※2
  • iOS Safari iOS3.0以降
  • Windows Phone 7以降

https://www.geotrust.co.jp/products/resources/compatibility_listing/より抜粋

FUJI SSL

  • Internet Explorer 8以上
  • Chrome(IEと同様 Windows XP SP3以降)
  • Opera 9.5以上
  • Firefox 12.0以上
  • Mac OS X 10.6.7以上
  • Android ver1.5以上 ※2
  • iOS ver2.0以上 ※2
  • Windows phone ver7以上

https://www.fujissl.jp/certificate/cer-browser/より抜粋

※1 実際にはSHA-2(SHA-256)の制限があるので、IE7以降・Mac OS X 10.5以降になるはずです。
※2 中間CA証明書を追加する必要あり。
 
携帯電話、いわゆるガラケーに関してはFUJIの方が対応率が高いようですが、当サイトに携帯からのアクセスはほとんど無いので気にしないことにします。

IEに関してはVer.7を使っている人はもうほとんどいないので問題ないのですが、Mac OSに関しては、当サイトはMac関係の記事も書いているせいか、アクセスログを見ると10.4や10.5のユーザーが稀にいるのです。

これら古いMac OS Xのサポートはとっくに切れているので使い続けるとセキュリティ的に危険なのですが、現実としてまだ使い続けている人がいる以上、完全に切り捨てるわけにもいかないというところです。

(本当は切り捨てた方が、新しいOS・ブラウザへの移行を促すのでいいのかもしれないですけど)

というわけでRapid SSLを導入したのですが、個人的には、今回の有効期限が切れる3年後ならFUJI SSLにしてもいい時期かなと思います。両者とも最近のスマホには完全対応しているので、スマホ向けサイトなどであればFUJI SSLは魅力的な選択肢になるのではないでしょうか。

»ç¶šãã‚’読む

コメント
planet-green.com

ffmpegのインストール及びavconvとの比較 (追記あり)



私が開発してるサービスで動画のエンコードが必要になった時の作業メモです。
ちなみにサーバー環境は Linux 64Bit(Ubuntu 12.04.3 LTS)、さくらサーバーのVPS。
(※Ubuntu16での変更点は追記に記載してます。)

ubuntuにパッケージで用意されているのはffmpegから派生したavconvだったので、当初はパッケージ版のavconv(v0.8.9)をインストールして動画をコンコードするプログラムを書いていました。
といいますか、ubuntuで apt-get install ffmpeg を実行するとffmpegではなくavconvがインストールされます。

ところが、いくつかのタイプの動画をテストでエンコードしてみてわかりましたが、このパッケージ版には不具合があります。
QuickTimeでエンコードされたmovファイル(動画コーディックはmp4)を再エンコードしようとすると Floating point exception というエラーが出て止まってしまいます。

既にプログラムはavconv用に書いていたので、気を取り直してソースから最新版のavconv(v0.9.10)をビルドしてみました。
すると、先ほどのmovファイルの再エンコードではエラーは出なくなりましたが、今度は別のwmvファイルを再エンコードしようとすると、

Application provided invalid, non monotonically increasing dts to muxer in stream 1: 13568 >= 13024
av_interleaved_write_frame(): Invalid argument

というエラーが出て止まります。

v0.8.9のソースからビルドすると、上記2つの動画は正常にエンコード出来るようになりましたが、古いバージョンを使うというのは気持ち的にあまり嬉しくありません。
そこでavconvは諦め、本家ffmpegに回帰することにしました。

ソースから ffmpeg v8.90 + libx264 + libvpx + FDK-AAC をビルドして、上記の二つの動画も問題なくエンコードできる事を確認。
オプションの挙動がavconvと若干異なっているのでプログラム側を微調整。

avconvは -movflags faststart に対応してないようでqt-faststartを後から実行する必要がありましたが、ffmpegではオプション一発で済むので楽ちんです。
また、動画フィルターとサイズ指定オプションの実行される順番なども異なってるようです。

以下、ffmpegをインストールした時の作業メモ。

【yasm】
ubuntuのyasmが1.1系でx264のビルドには1.2系が必要なので、先にインストール。
http://yasm.tortall.net/Download.html

./configure
make
make install

【FDK-AAC】
http://sourceforge.net/projects/opencore-amr/files/fdk-aac/

tar xzvf fdk-aac-0.1.*.tar.gz
cd fdk-aac-0.1.*
./configure --prefix=/usr/local
make
make install-strip

もし、 ./libtool: line 1125: g++: command not found の等エラーが出たら
apt-get install g++ でg++をインストール。

【libx264】
http://www.videolan.org/developers/x264.html

git clone git://git.videolan.org/x264
cd x264
./configure --prefix=/usr/local --enable-shared --enable-pic --extra-cflags=-fPIC --extra-ldflags=-fPIC --extra-rcflags=-fPIC --enable-strip
make
make install

【libvpx(WebM VP8/VP9 Codec SDK)】

git clone --depth 1 http://git.chromium.org/webm/libvpx.git (※下に追記あり)
cd libvpx
./configure --prefix=/usr/local --disable-examples
make
make install
ldconfig

【ffmpeg】

git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg

./configure \
--prefix=/usr/local \
--libdir=/usr/local \
--shlibdir=/usr/local \
--incdir=/usr/local \
--mandir=/usr/local \
--arch=x86_64 \
--disable-debug \
--extra-cflags="-s -O3 -mtune=native -march=native" \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libvpx \
--enable-libx264
make
make install
ldconfig
  • 結局のことろ、本家公式サイトが一番参考になりました。
    https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide
  • AACエンコーダーはNeroAACCodecが最も音質がいいらしいですが、ffmpegへは組み込めず外部プログラムを呼び出す形になるため、次点のFDK-AACでいいかなと。

#追記 2016/10/13

Ubuntu 16.04 LTS にインストールしてみました。
基本的には上記のままで大丈夫でした。
yasm は1.3系がパッケージに含まれているのでapt-getでいけます。

apt-get install yasm

libvpxのレポジトリが移転してました。

git clone https://chromium.googlesource.com/webm/libvpx

FDK-AACの高音質が欲しくてソースからビルドしてみましたが、そこまでこだわりが無ければ、Ubuntu16の標準パッケージで全然問題ないかも・・・。

コメント
planet-green.com

AWstatsのnginx環境へのインストール



AWstatsをnginxが稼働中のサーバーにインストールした時のメモです。

公式サイトよりダウンロードして /usr/share/awstats に展開。
http://awstats.sourceforge.net/#DOWNLOAD

# tar xzvf awstats-7.6.tar.gz 
# mv awstats-7.6 /usr/share/awstats

そして、〜/awstats/tools/nginx/awstats-nginx.conf に書かれている設定をnginxのサイト設定ファイルに追記すればいいのですが、私の環境では次のように書き直す必要がありました。

#
# AWstats
#
location ^~ /awstats/classes/ {
 alias /usr/share/awstats/wwwroot/classes/;
}

location ^~ /awstats/css/ {
 alias /usr/share/awstats/wwwroot/css/;
}

location ^~ /awstats/icon/ {
 alias /usr/share/awstats/wwwroot/icon/;
}

location ^~ /awstats-icon/ {
 alias /usr/share/awstats/wwwroot/icon/;
}

location ^~ /awstats/js/ {
 alias /usr/share/awstats/wwwroot/js/;
}

# Dynamic stats.
location ~ ^/cgi-bin/(awredir|awstats)\.pl {

 #↓必要に応じて追加
 #auth_basic "Secret Area";
 #auth_basic_user_file "/home/*****/.htpassword";

 #↓これを先に書かないと設定が上書きされてしまうのか正常に動作しない
 include fastcgi_params;
 #fastcgi_pass 127.0.0.1:9000;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_param SCRIPT_FILENAME /usr/share/awstats/wwwroot/cgi-bin/awstats-fcgi.php;
 fastcgi_param X_SCRIPT_FILENAME /usr/share/awstats/wwwroot$fastcgi_script_name;
 fastcgi_param X_SCRIPT_NAME $fastcgi_script_name;
}

あるいは、fcgiwrapを入れている環境では下記でも動きます。

fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /usr/share/awstats/wwwroot$fastcgi_script_name;
include fastcgi_params;

この awstats-fcgi.php、コードを読むとperlスクリプトをシェルから実行して出力結果を返しているようで、なるほどと思いました。
nginxを導入してる環境でfcgiwrapをインストールしてるところは少ないと思うので、これはありかも。)

cp /usr/share/awstats/tools/nginx/awstats-fcgi.php /usr/share/awstats/wwwroot/cgi-bin/
mkdir /var/lib/awstats
chmod -R 755 /usr/share/awstats/

 

perl /usr/share/awstats/tools/awstats_configure.pl

上記perlスクリプトを実行し、設問に適切に答えてプロファイル名も登録すると、
サイト設定ファイルが /etc/awstats/以下に作成されるので下記項目を修正

LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/nginx/access.log /var/log/nginx/access.log.*.gz |"
# ↑実際のログファイル名に合わせて修正してください。

DirData="/var/lib/awstats"

DirIcons="/awstats/icon"

# SiteDomain,HostAliasesはサイトに応じて修正。

そして集計実行。

perl awstats.pl -output=pagetype -config=登録したプロファイル名)

するとブラウザで集計結果を表示できるようになります。

http://(サイトのホスト)/cgi-bin/awstats.pl?config=(登録したプロファイル名)

集計をcronで1日1回実行したい場合は、/etc/crontabに下記追加

05 15 * * * root /usr/bin/perl /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=(登録したプロファイル名) -update 1>/dev/null 2>&1

CRONデーモン再起動

/etc/init.d/cron reload

・思い出しながら書いているので、間違ったり抜けたりしてる箇所があるかもしれません。

 


#追記 2017/03/11
2016年以降、Googleの全面HTTPS化に伴う仕様変更により、referrerから検索キーワードを取得できなくなりました。
今後、他社の検索エンジンも追随していくと思われます。
そうなると、残念ながらAWStats等のアクセス解析ソフトを導入する意義が半減してしまいます。

GoogleウェブマスターツールやGoogleアナリティクスを利用すればGoogleで検索された時の検索キーワードは取得できますが、他社の検索エンジンで検索された時の検索キーワードを取得するためには、それぞれの会社別の同様のツールを利用しなければならず、かなり不便になりそうです。

また、そうなった時にAWstatsのようなサーバーサイドのアクセス解析は完全に不要になるかというと、そういうわけではなく、例えば画像や動画などのメディアファイルに直リンクされた場合、GoogleアナリティクスのようなJavaScriptのタグをHTMLに貼り付けるタイプのツールではアクセス情報が取得できません。

ですので、AWStatsの存在意義が無くなることは無いのですが・・・・うーん。

 

コメント