さくらのレンタルサーバ(スタンダード)だけでLet’s Encryptの認証をする

※※公式にLet’s Encryptに対応してくれたので、面倒臭い更新作業をしなくて良くなりました!わーい!
【無料SSL】サーバコントロールパネルからの導入手順 – さくらのサポート情報
なので、以下の記事は不要になりました。

※サードパーティ製のスクリプトを使用します。セキュリティ上の問題が発生する可能性があるため、必ず事前にスクリプトの中身を熟読して理解してからご使用下さい。
※自己責任で実行して下さい。

Summary

以下のコードでrootが取れないさくらのレンタルサーバでも面倒な更新作業が半自動化出来るよ
ちゃんとgitのコードを読んでから利用してね
Wordpressは追加で一工夫必要だよ

*username*:自分のアカウント名
example@example.net:リマインダが来るメールアドレス
example.com:証明書を置きたいドメイン
/home/*username*/www/:上のドメインのルートディレクトリ

[ acme.shのインストールと初回認証 ]

cd /home/*username*/
git clone https://github.com/Neilpang/acme.sh.git
./acme.sh/acme.sh --install --accountemail "example@example.net" --nocron
rm -R ./acme.sh
$/home/*username*/.acme.sh/acme.sh --issue --log -d example.com -w /home/*username*/www/

→証明書は/home/*username*/.acme.sh/example.comに入ってるので、cerとcaとkeyをさくらのコンパネからインスコ

[ 更新 ]

/home/*username*/.acme.sh/acme.sh --renewAll

→さくらのコンパネの「証明書の再インストール」でexample.com.cerだけ更新すればOK

 

Intro.

さくらのレンタルサーバでLet’s EncryptしたいけどCertbotはroot権限がないと使えないんだとよ!ってことで、別マシンのLinuxとかUbuntu on Windows10とか考えた。
参考:
さくらのレンタルサーバにLet’s EncryptのSSL環境を導入してみた
さくらレンタルサーバーのサイトを、Let’s EncryptでHTTPS化する方法(Mac El Capitan版)

 

けど、webrootへのacme-challengeのコピペが死ぬほど面倒臭い。

Let’s EncryptのDocumentation見てたら、「他にもACMEクライアントあるよ(推奨はCertbotね!)」って書いてたので、使ってみた。

準備

今回使用したやつ:GitHub – Neilpang/acme.sh: An ACME Shell script, an acme client alternative to certbot : acme.sh

sshでログインできる環境で行います。
作業フォルダに移動して、gitから落としてきてインストール。
メールアドレスにはLet’s Encryptから有効期限のリマインドメールが来ます。

git clone https://github.com/Neilpang/acme.sh.git
./acme.sh/acme.sh --install --accountemail "example@example.net" --nocron
rm -R ./acme.sh

installでacme.shが行う動作は以下のとおりです。

Create and copy acme.sh to your home dir ($HOME): ~/.acme.sh/. All certs will be placed in this folder too.
Create alias for: acme.sh=~/.acme.sh/acme.sh.
Create daily cron job to check and renew the certs if needed.

今回は--nocronを入れて3番目の処理を飛ばしています。
~/.acme.sh/に必要なファイルが全部コピーされていると思います。
メールアドレスの変更が必要な場合は、account.confを編集して下さい。
認証したファイルもこのフォルダに書き込まれます。
./acme.sh --uninstallでアンインストール出来ます。手動で消したい場合は~/.acme.shフォルダを消して、.bashrcを編集して下さい。あとcrontab。

ドメインの登録と証明書発行

ヘルプは"acme.sh -h"で見れるので、それとかGithubのヘルプページ見ながら適宜作ります。
基本は、-d "ドメイン名" -w "ドメインのルートフォルダ"で書いていきます。

#!/bin/sh
ROOT=/home/example/.acme.sh/
# 必要なら以下をコメントアウト
# ${ROOT}acme.sh --upgrade
${ROOT}acme.sh --issue --log \
   -d example.com -w /home/example/www/ \
   -d www.example.com -w /home/example/www/www
${ROOT}acme.sh --issue --log \
   -d example.net -w /home/shak/www/net

一つのコマンドに複数のサブドメインを列記すると、その分をまとめて一つの証明書にしてくれます。
Let’s Encryptはルートドメインごとに証明書5つまでの制限があるので、節約して使っていきたいですね。

あとは実行したら勝手にやってくれます。
外部からのhttp://example.com/.well-known/acme-challenge/*へのアクセス許可が必要です。適宜htaccessとか使ったらいいかも。

bash ./create_certs.sh

~/.acme.sh/内に、ドメイン名でフォルダが作成されていて、中に証明書が入ってます。sshなどの安全な方法でダウンロードして、さくらのコンパネから有効化してください。

/.acme.sh/example.com/example.com.key : 秘密鍵
/.acme.sh/example.com/example.com.cer : 証明書
/.acme.sh/example.com/ca.cer : 中間証明書

更新

--renewAllで行うことが出来ます。ひとつずつ指定したい場合は--renew example.comとして下さい。

#!/bin/sh
ROOT=/home/exapmle/.acme.sh/
${ROOT}acme.sh --list
${ROOT}acme.sh --renewAll

こいつにメール通知もくっつけてcronに登録しておいてもいいし、Let’s Encryptのリマインドメールが来るたびに手動で実行してもいいと思います。デフォルトでは60日経たないとrenewしてくれませんが、--forceつけたらいつでもやってくれます。
ログは~/.acme.sh/acme.sh.logにあります。肥大化が怖い方はrenewの際にrotateする処理もくっつけておくと良いかもしれません。

あとは、証明書の登録が楽になればなあ…と思っている。特定のフォルダに置いてボタン押したらやってくれないかなあ。

 

追記:Wordpressがさくらのレンタルサーバに乗ってる場合は以下の編集も必要です。
WordPressをhttps化する方法とさくらサーバーでの注意事項 | ウェブタタン

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください