読者です 読者をやめる 読者になる 読者になる

Hiroto's diary

プログラミング関連を書くかも

さくらのレンタルサーバーでLet's EncryptのSSLを使う

このページではさくらのレンタルサーバー スタンダードでLet's Encryptを導入する方法を解説しています。さくらのVPSでLet's Encryptを導入する方法を解説するページではありません。


2016/11/14

  • コマンドをcertbotに書き直し。
  • 文、コマンドを少し修正。

さくらのレンタルサーバーでLet's Encryptを導入したのでメモ。

導入方法

今回はhttp://hiroto-k.net/HTTPS化しました。

事前準備

Linux環境の準備

事前にVagrantか何かに適当なLinux環境をインストールしておいてください。普段使いのLinux環境があるならそれでも問題無いです。

自分は普段使いのArch Linuxで作業したので、ここではArch Linuxで導入方法を解説します。

他のディストリやMacでも大体同じなので読み替えて実行して下さい。(Windowsは知りません。)

letsencryptのインストール

Linux環境にletsencryptをインストールして下さい。

Arch Linuxの場合はpacmanで入るので

sudo pacman -S letsencrypt

で依存関係も含めてインストール出来ます。

パッケージマネージャーでletsencryptをインストール出来ないディストリの場合は手動でGitから引っ張ってきましょう。Python等も必要です。

git clone --depth 1 https://github.com/certbot/certbot

作業

作業はrootで行います。通常ユーザーだと/etc/letsencryptへの書き込みに失敗する為です。

SSL証明書を作成

以下を実行するとTUIが立ち上がり対話式で手順が書かれます。

certbot certonly --manual

SSL化するドメインを入力しましょう。今回の場合はhiroto-k.netです。

Please enter in your domain name(s) (comma and/or space separated)

IPアドレスを記録して良いかを聞かれます。Yesを選択。

NOTE: The IP of this machine will be publicly logged as having
requested this certificate. If you're running letsencrypt in manual
mode on a machine that is not your server, please ensure you're okay
with that.

Are you OK with your IP being logged?

選択後にランダムな文字列とPythonのコードが出てきます。 ドメインが本人の物かを確認するために必要です。

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" LC_rnok1eqN1zYmAbpaluerLvPOHlOU1eccxgl0esGQ.QQts2lgU2fWUdpcWxOY5BYcnMQL555AI9-06O_6Jl6w > .well-known/acme-challenge/LC_rnok1eqN1zYmAbpaluerLvPOHlOU1eccxgl0esGQ
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"

Pythonのコードからランダムな文字列を抜き出して、さくらのレンタルサーバーsshでログインしてドメインののドキュメントルートで以下を実行。

mkdir -p .well-known/acme-challenge
echo LC_rnok1eqN1zYmAbpaluerLvPOHlOU1eccxgl0esGQ.QQts2lgU2fWUdpcWxOY5BYcnMQL555AI9-06O_6Jl6w >> .well-known/acme-challenge/LC_rnok1eqN1zYmAbpaluerLvPOHlOU1eccxgl0esGQ

試しにブラウザからhttp://{{ domain }}}/.well-known/acme-challenge/LC_rnok1eqN1zYmAbpaluerLvPOHlOU1eccxgl0esGQにアクセスしてみて正常にレスポンスが返ってきたらコンソールでエンターを押しましょう。Let's EncryptがそのURLを確認します。

IMPORTANT NOTESと返ってきたら/etc/letsencrypt/live/domain/以下にファイルが出来ています。

ファイルのアップロード

https://secure.sakura.ad.jp/rscontrol/rs/domainで作成されたSSL証明書のファイルをアップロード。

ドメイン管理画面でSSL登録をクリックして、秘密鍵privkey.pem、証明書でcert.pem、中間証明書でchain.pemをアップロード。

アップロードが終わったらドメイン管理画面からSNIの設定をするとSSLでアクセス出来るようになります。

証明書の更新

Let's Encryptは無料でSSL証明書を取得出来ますが、期限が90日と頻繁に更新が必要です。レンタルサーバーなので自動更新も出来ないので手動で更新します。

letsencryptなどは既にインストールされている前提で解説。

今回はhttp://hiroto-k.net/の証明書を更新するとして説明。

作業

初回の取得と同様、作業はrootで行います。通常ユーザーだと/etc/letsencryptへの書き込みに失敗する為です。

以下を実行して更新を実行します。

certbot certonly -d hiroto-k.net --manual

実行すると選択画面が出てくるので2の

2 Renew & replace the cert (limit ~5 per 7days)

を選択。

ここからは殆ど取得時と同じ流れです。

終わったらコントロールパネルで新しい証明書をアップロード。

ドメインSSLの更新をクリックして初回のインストール同様、秘密鍵privkey.pem、証明書でcert.pem、中間証明書でchain.pemをアップロード。設定が終わったら設定を有効にして更新が完了します。