
Contents
Let’s Encryptのススメ
Webサーバーの証明書というのは、そのサーバーが本物であることを証明するものなので、信頼できる(とされている)機関から「この証明書は本物です!」というスタンプ(署名)を押してもらわないといけません。
(ちなみに、このスタンプを自分で押したものは「オレオレ証明書」と呼ばれ、全く信用されませんww)
ところが、このスタンプはとても高くて、例えば世界で一番信頼できる(とされている)デジサートにスタンプを押してもらうためには年間55000円(2021年6月現在)かかります。高ぇ!
他にも信頼できる(とされている)機関はいくつもあり、信頼度やサービスの充実度に応じて価格もまちまちです。
ですが、個人の場合、1円でも安いところを探さないといけないのです・・・
で、ななななんと、実はこのスタンプ、タダで押してもらえるところがあるんです。
それが Let's Encrypt
です。
Let’s Encryptは数多くのIT関連会社がお金を出し合って運営しているオープンな認証局で、無料でスタンプを押してくれます。
申し込み手続きやサイトの本物確認など、人がやり取りする作業は一切なく、手続きが完全に自動化されています。
ただし、スタンプの有効期間は90日と短いので、定期的に更新しないといけません。
なのでちょっと設定が大変で敷居が高いのですが、一回やり方を覚えてしまえば3か月ごとに同じことを繰り返すだけ(しかもそれも自動化しておけば放っておくだけ)なので、これを使わない手はないです!
本記事では、BayServerでサイト運営をしている方向けに、Let’s Encryptで証明書を発行する方法、それをBayServerに設定する方法について解説したいと思います。
certbotのインストール
certbotは自動化された認証局と通信を行い、自動で証明書を発行してもらうのに必要なツールです。
これをインストールします
$ sudo yum install -y python3-certbot
Linuxディストリビューションやバージョンによっては python-certbot
または python2-certbot
という名前のパッケージかもしれません
ちなみに、AWSにcertbotをインストールする方法は本家で解説されています
BayServerの事前設定
次はBayServerの設定というか、ディレクトリを掘っておく作業になります。
BayServerをインストールしたディレクトリ(ここでは「$HOME/app/bserv」とします)に移動します。
$ cd $HOME/app/bserv
インストール時の設定のままであればドキュメントルートは www/root ディレクトリになっていると思うので、その下に「 .well-known/acme-challenge/
」というディレクトリを作ります。
このディレクトリにcertbotが秘密のファイルを置いて、Let’s EncryptがBayServer経由でそれを取りに来て本物確認をする、という算段です。
$ mkdir -p www/root/.well-known/acme-challenge/
(もしドキュメントルートを別のところに変えていたらその下に掘ります)
証明書の発行
Let’s Encryptでは1時間当たりの試行可能回数の上限が決まっているので、うまく行くまでは –test-cert オプションをつけてテスト発行をしましょう。
メアドとドメイン名が必要なので、各自のものに置き換えてください
email=account@yourdomain.com
domain=yourdomain.com
sudo certbot-3 certonly --non-interactive --agree-tos --keep --expand \
--email $email --no-eff-email \
--webroot -w $HOME/app/bserv/www/root -d $domain
成功したら /etc/letsencrypt/yourdomain.com
ディレクトリに鍵や証明書が生成されます。
ただし、何回かオプションを変えながらやっていると、yourdomain.com.2などという名前でどんどんディレクトリが増えていくので、最新のディレクトリはどれか注意して見てください。
ちなみに、生成されるファイルは以下の4つです
ファイル名 | 内容 | 備考 |
---|---|---|
privkey.pem | 秘密鍵 | |
cert.pem | サーバー証明書 | あまり使われない |
chain.pem | 中間証明書 | 古いApacheで使用 |
fullchain.pem | サーバー証明書と中間証明書両方含む | 多くのWebサーバーで使用 |
このディレクトリは root じゃないと見えないように設定されているので今後の作業にあたっては、sudoコマンドを使うなどしてアクセスしてください。
BayServerの事後設定
鍵と証明書のコピー
まず、生成された鍵や証明書を自分のところにコピーします。
ここでは、BayServerをインストールしたディレクトリのcert/yourdomain.comにコピーすることとします
mkdir -p certs
sudo cp -rL /etc/letsencrypt/live/yourdomain.com certs/
鍵や証明書はシンボリックリンクになっているみたいなので -L
オプションをつけて実体をコピっていることに注意してください。
で、コピーされたファイルたちの所有者は root なので、所有者を変えておきます。
sudo chown -R you certs/yourdomain.com
「you」のところがあなたのユーザー名です
鍵ストアの作成
BayServerに読み込ませるものは鍵と証明書で十分ですが、もし鍵ストアの形で読み込みたい場合は、鍵ストアを作成します。
以下のようにして鍵ストア「your_name.p12」を作成します。この鍵ストアを
$ cd certs/yourdomain.com
$ openssl pkcs12 -export -name your_name -in fullchain.pem -inkey privkey.pem -out your_name.p12 -password pass:your_password
そうすると、your_name.p12 という名前の鍵ストアが作成され、そこから鍵や証明書を取り出すパスワードは your_password となります。
BayServerの設定
portドッカーの設定を修正します。鍵ストアを使用せず、鍵と証明書で設定する場合は以下のようにします。
[port 2024]
[secure]
key certs/yourdmain.com/privkey.pem
cert certs/yourdmain.com/fullchain.pem
鍵ストアを使用する場合は以下のように設定します。
[port 2024]
[secure]
keyStore certs/yourdmain.com/your_name.p12
keyStorePass your_password
これでBayServerを再起動します。再起動した後は、以下のようにすれば起動したまま証明書の読み直しをさることもできます。
$ cd $HOME/app/bserv
$ bin/bayserver.sh -reloadCert
先ほどの証明書発行と読み直しの部分は、シェルスクリプトにしておくとよいでしょう。