結合しても証明書のエラーが出る
h2oはnginxのようにcat 証明書 CA証明書 中間CA証明書 > ssl.crt
という感じで証明書を結合しなければなりません。ここで結合すると「証明書がなんかおかしいです」といったエラーが起こりSSLが使用できないという事案が起こりました。
とりあえず問題の結合された証明書を見てみると…
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
これはダメですわ。ちゃんと改行しましょうね。
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
これで正しく使用できるようになりました。
ApacheのようにSystemd(かUpstart)から起動できるようにする
ApacheやNginxではSystemdやUpstartから起動するのですが、h2oでは同じようなことができないようなので、自分でスクリプトを書く必要があります。
大学にある自分のサーバー(VineLinux)はh2oをUpstartを用いてデーモン化しています。
書いたら設定をリロードして使えるようにします。ここらへんを参照してください。
description "H2O Daemon"
author "hotcocoa <cocoa@gochiusa.xyz>"
start on runlevel [2345]
stop on runlevel [016]
chdir /path/to/h2o
exec ./h2o -c h2o.conf
respawn
このように書けばOKかと思います。しかしUpstartはUbuntu 15.04からSystemdによって置換されてしまうのでこの手段は使えません。おそらくUbuntu 16.04 LTSにアップグレードするときに壁にぶつかるのではないでしょうか。
SystemdのUnitの書き方は次のような感じです。このUnitは現在動いている自宅サーバで使用しています。(おそらく間違えているかと思います。詳しい方教えてください)
# /etc/systemd/system/h2o.service
[Unit]
Description=H2O Daemon
After=hhvm.service
[Service]
PIDFile=/run/h2o.pid
ExecStart=/path/to/h2o -c path/to/h2o.conf
[Install]
WantedBy = multi-user.target
systemctl enable h2o.service
で有効化したらsystemctl start h2o.service
で使えるようになりますね。
※h2o.confでpidなどを正しく指定しないとこのUnitも動かないです。