BayServerで使用する証明書をLet’s Encryptで発行する

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

先ほどの証明書発行と読み直しの部分は、シェルスクリプトにしておくとよいでしょう。

Twitterでフォローしよう

おすすめの記事