Xibo チュートリアル Vol.08「自己証明書でのxibo https化」
httpsにすると宣言してもう1年もたってしまいましたがようやくhttpsの記事が書けました!
httpsにする場合、自己証明書をつくるか、SSL証明書を購入するか、Let's Encryptのような無償で使える認証局を使うかというのが現在の選択肢かと思います。昔(10年以上前かな)は入力フォームなど暗号化が必要なページでしかSSLは使っていませんでした。しかし、2018年から一般のページであっても常時SSLにすることが世界的に半ば義務化されたため、webサイトは基本全部SSLにしなくてはいけなくなってしまいました。ブラウザ側も認証局の発行したSSL証明書でないと”危険なサイトです!”という警告出して、危険を承知の上でボタンを押さないとつながらなくなってしまいました。自己証明書のサイトが危険な訳ではないのですが、そういう表示が出てしまうようになったので、自己証明書はテスト用であるとか、自己証明書がってん承知の助しかつないでこないサイトにしか使えなくなりました。
わかっている人は読み飛ばしてけっこうですが、そもそもSSLって何かと言えばwebサイトを閲覧したり、入力したりするときの通信を暗号化するプロトコルのことで、SSLでつないでおればその通信を盗聴できなくなるということです。なので、IDとかパスワード入れたりするようなサイトや入力フォームなんかはSSL化すべきですが、そんなのはwebサイトができたころからわかっていた話で既にそういうページをSSL化してくれるサービスというのは提供されていて普通に皆使っていました。 それが全ページをSSL化しないといけないという話が出始めて、まさかSSL証明書を毎年買わないといけないのか!?と一時期は思ったのですがLet's Encryptのようなサービスが提供されて助かりました。ちなみにSSL証明書の値段はどれぐらいかと言えば、Let's Encryptのような無償もあれば 年間数千円からverisignのような年間10万円以上するような証明書売ってるところもあります。何が違うかというのは認証局の信用度!?らしいです。暗号化の方式は同じですし、サーバー証明書自体はwebサイトのあるサーバーに入れるのですから、サーバーの信頼度が高いって訳でもありません。なんでこんなことで10万円も払う人(会社)がいるのかわかりませんが、それが信用ビジネスってものなんでしょうね…。

前置き長くなりましたが、まずは自己証明書でいってみよう!自分で管理しているサーバだったら、手順的にはSSL証明書買ってきても途中から同じです。Let's Encrypt使ってのやり方はちょっと違うので、それは次回に送ることにします。
1)自己署名証明書の作成
以下、linuxコマンドラインでの作業になります。
まずはopenSSLをinstall。
sudo apt install openssl -y
SSL関連ファイルを格納するディレクトリを作成します。厳しいアクセス権限つけておきます
sudo mkdir /etc/ssl/private
sudo chmod 700 /etc/ssl/private
自己署名証明書を生成するために、まず秘密鍵を生成し、その秘密鍵を使って証明書を作成します。証明書の有効期限はひとまず365日に設定しておきます。何日でもいけますが。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
コマンドを実行すると、国名、州名、都市名、組織名、コモンネーム(FQDN)、電子メールアドレスなどを尋ねるプロンプトが表示されます。コモンネームには、サーバーのドメイン名(FQDN)を入力します。実在しないドメインでも通りますが、このあとapche2の設定ファイルでも記述するので、コモンネームは控えておきましょう。
これで、ひとまず自己証明書(オレオレ証明書)はできました。
ちなみに、証明書を買ってきた場合はもちろん自分でつくらなくて良くて、その買ってきた証明書を所定のフォルダにコピーしておけば良いことになります。
また、xiboのdocker環境ではApache2をwebサーバとして使っていますがSSLをサポートするために、mod_sslモジュールを有効にします。このモジュールはSSL/TLS接続を処理するためのApacheモジュールです。また、proxyなどのモジュールも使うので有効にしておきます。
apache2は既に入っているかと思いますが、apache2インストールのコマンドものせときます
sudo apt install apache2
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
2)xibo docker 環境にSSLを追加
ここからが、xiboのdocker環境でSSLを使えるようにする話になります。
まず、現在のdocker環境を止めます。
cd /opt/xibo
sudo docker compose down
カスタムポートを使うとき用のymlファイルのテンプレートがあるので、これをコピーして使います。
cp cms_custom-ports.yml.template cms_custom-ports.yml
直すのは以下2点
cms-xmrの
ports:- "65500:9505"
→ "9505:9505"
cms-webの
ports:- "65501:80"
→ "127.0.0.1:8080:80"
docker composeでこのファイルを読み込ませます
sudo docker compose -f cms_custom-ports.yml up -d
次はapache2の方のSSLの設定
/etc/apache2/sites-available/default-ssl.conf
のファイルを編集します。まずは、さきほどつくった証明書とキーのファイルの位置を記述します
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
ProxyPass
ProxyPassReverse
を追記します
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
これで完了。apcheを再起動して設定を読み込ませます。
sudo service apache2 restart

これで、このxiboサイトに httpsでアクセスできるようになります。
危険な接続です!みたいなメッセージがでますが、気にせず進んで接続しましょう。なにしろ自分がつくった証明書ですから危険ではありません!がってん承知で一回接続すれば、以降このメッセージは出ません。しかし、外向きのサーバーではこれは今や通らないので、後日紹介する無料のSSL Let's encryptを使いましょう!
今回は以上になります。
参考にしたサイトは以下です。
https://tech-win.jp/2024/08/31/ubuntu%E3%81%A7%E8%87%AA%E5%B7%B1%E7%BD%B2%E5%90%8Dssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6apache%E3%81%ABhttps%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9/
https://community.xibo.org.uk/t/xibo-cms-with-docker-on-ubuntu-22-04/9392
https://community.xibo.org.uk/t/https-on-docker-install-with-own-ssl-cert/28469