さくらレンタルサーバーのサイトを、Let's EncryptでHTTPS化する方法(Mac El Capitan版)

Entering Public Beta

ということで、Let's Encryptが2015/12/4にPublic Betaになり、
申請不要で証明書をゲットすることができるようになりました。

無料でSSL/TLSが使えるようになり、
Webサイトの送信フォームを暗号化して、
保護したりできるようになります。

また、Let's Encryptは、クライアントソフトを使うことで、
自動でSSL/TLS証明書を発行したり、更新したりという
作業を自動化できるのが特長です。

証明書の期限は3ヶ月なので、
自動化できるのはありがたいですね。

しかし、です。

このソフトで作業を自動化するには、
Webサーバ上でroot権限でコマンドを入力できる
という条件があります。

つまり、
ロリポップやさくらインターネットなどの
レンタルサーバーでは、この自動化ツールは使えない

というわけです。

レンタルサーバーにサイトを置いている人は、
Webサーバーとは別の端末で証明書を発行し、
Webサーバーに手動で証明書をインストールする必要があります。

私はこの辺りがよくわかっておらず、盛大につまづいたので、
「Let's Encryptってなになに?おいしそうなの?」
というあんまり詳しくない方は気をつけてください。

以下、作業手順をメモしておきます。

動作環境

  • Webサーバー : さくらのレンタルサーバ
  • 証明書発行端末 : Mac OSX El Capitan

作業手順

手順としては、

  1. 端末にクライアントソフトをインストール
  2. 端末でSSL/TLS証明書を発行
  3. Webサーバーに証明書をインストール

となります。

1. 端末にクライアントソフトをインストール

端末(ここでは OSX El Capitan)で、
以下の記述に従って作業します。

アプリケーション→ユーティリティ→ターミナル を起動し、
以下のコマンドを打ち込みます。
El Capitanなので、gitはインストールされている前提です。

git clone https://github.com/letsencrypt/letsencrypt

しばらく待つと、クライアントソフトが
letsencrypt ディレクトリにインストールされるので、
移動します。

cd letsencrypt

次に、Let's Encrypt ツールが実行できる
環境が整っているか、テストします。

El Capitanをクリーンインストールしている場合

ターミナルに以下のコマンドを打ち込み、
クライアントソフト実行環境のテストをします。

./letsencrypt-auto --server --debug \
https://acme-v01.api.letsencrypt.org/directory --help

「OSX環境での動作はexperimentalなので、
覚悟の上 「--debug」フラグを付けてやってね」

とのことなので、付けておきます。

おそらく、色々と文字がニョロニョロと表示された後、
以下のメッセージが出て、めでたく準備完了になるはずです。
「2. 端末でSSL/TLS証明書を発行」に進んでください。

letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ...

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: ...

もし、上記メッセージではなくエラーが出る場合は、
以下を当たってみてください。

El Capitanを上書きアップグレードしている場合

まず、以下のコマンドをやっておきましょう。
後で出るエラーを回避できます。
(参考: Mac install failure (Python errors) · Issue #1196 · letsencrypt/letsencrypt · GitHub

sudo chown -R $(whoami):admin /usr/local
sudo chown -R $(whoami):admin /Library/Python/2.7/site-packages/

次に、以下のチェックをします。

brew doctor

おそらく

Warning: Your Homebrew is outdated. You haven't updated for at least 24 hours. This is a long time in brewland! To update Homebrew, run brew update.

とも言われると思いますので、素直に

brew update

と打ち込んで、再度

brew doctor

とします。

Your system is ready to brew.

となったら準備OK、
クライアントソフト実行環境のテストをしましょう。

ターミナルに以下のコマンドを打ち込みます。

./letsencrypt-auto --server --debug \
https://acme-v01.api.letsencrypt.org/directory --help

「OSX環境での動作はexperimentalなので、
覚悟の上 「--debug」フラグを付けてやってね」

とのことなので、付けておきます。

これで、クライアントソフトの実行に必要なものを、
勝手に色々とインストールしてくれます。

Warning: The post-install step did not complete successfully You can try again using brew postinstall python

と言われたので、素直に

brew postinstall python

とします。以下のコマンドで再度テストすると、

./letsencrypt-auto --server --debug \
https://acme-v01.api.letsencrypt.org/directory --help

augeasがなんだとか、
dialogがなんだとか文句を言われたので、
指示通りに対応します。

brew unlink augeas
brew unlink dialog

再度挑戦。

./letsencrypt-auto --server --debug \
https://acme-v01.api.letsencrypt.org/directory --help

今度は、virtualenv(Webサーバーではなく端末で
証明書を発行するための仮想環境)の
インストールのところでエラーが出ました。

Traceback (most recent call last): File "/Library/Python/2.7/site-packages/virtualenv.py", line 17, in import zlib ImportError: No module named zlib

そこで以下を実行します。
(参考: Mavericks(MacOS10.9)でpythonzのCpython2.7.6をコンパイルした後、 - 都内在住エンジニアの思考整理録

xcode-select --install
brew reinstall python

これで、エラーなしで通りました。

./letsencrypt-auto --server --debug \
https://acme-v01.api.letsencrypt.org/directory --help

をして、以下のメッセージが出れば、準備完了です。
お疲れさまでした。

letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ...

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: ...

2. 端末でSSL/TLS証明書を発行

クライアントソフトの実行環境が整ったので、
端末で証明書を発行してみます。

root権限を持たないレンタルサーバーではなく、
別の端末(Mac OSX El Capitan)で証明書の発行のみ行い、
インストールは手動で行うため、
「certonly」「--manual」を指定します。

./letsencrypt-auto certonly --manual -d ドメイン名 --server HTTPS://acme-v01.api.letsencrypt.org/directory

「ドメイン名」は、SSL/TLS証明書を発行したいドメイン名です。

以下のようにして、一度に複数のドメインに対する
証明書を発行することもできます。
www有りとなし両方でアクセスされる可能性がある場合は、
両方指定したほうがいいです。
例えば当サイトであれば、

./letsencrypt-auto certonly --manual -d umurausu.info -d www.umurausu.info --server HTTPS://acme-v01.api.letsencrypt.org/directory

みたいな感じです。
SNIっていうの?よく知りませんが。

コマンドが間違っていなければ、
突如ターミナルが青い背景の画面に突入するので、
連絡用にメールアドレスを入力したり、
利用規約にAcceptしたりします。

ターミナルなので、マウスでクリックしても
反応がなく困ったのですが、
「Accept」の「A」を押したりしたら進めました。

押しても反応がなかったら、Tabを何回か押して
「Accept」などをハイライトさせて試してみてください。

次に、以下のような謎のコマンドが表示されます。

mkdir -p /tmp/letsencrypt/publichtml/.well-known/acme-challenge cd /tmp/letsencrypt/publichtml printf "%s" すごく長い文字列 > .well-known/acme-challenge/結構長い文字列 ... Press ENTER to continue

表示される画面や手順は、
以下のサイトを参考にしてください。
.well-known/acme-challenge

で、これらの3つのコマンド(mkdir と cd とprintf)を
Webサーバ上で実行せよ、ということです。
(本当はもう一つコマンドが下にありますが、
これはやらなくても大丈夫です)

「すごい長い文字列」「結構長い文字列」は、
ランダムな數十桁の文字列です。

一番下に

Press ENTER to continue

とありますが、次の作業を行う前に
ENTERを押すと失敗するので、
そのまま放置しておきます。

このコマンドたちが行うことは、

  • ドメイン名/.well-known/acme-challenge ディレクトリを作る
  • 上のディレクトリに、「すごく長い文字列」が書かれた、
    「結構長い文字列」という名前のテキストファイル
    を置く

ということです。

Webサーバー(レンタルサーバー)にsshで接続できれば、
上記の3つのコマンドを実行すればOKです。

ちなみに、さくらレンタルサーバーの場合は、
1つ目と2つ目のコマンドは以下のようになります。

mkdir -p /home/アカウント名/www/.well-known/acme-challenge
cd /home/アカウント名/www/

sshが使えない場合は、FTPで上記フォルダを作成して、
「すごく長い文字列」が書かれた
「結構長い文字列」という名前のファイルを作って、
そのフォルダにアップロードしてください。

ファイルを置けたら、端末のターミナルで、
ENTERを押します。認証が成功すると、

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.takipone.com/fullchain.pem. Your cert will expire on 2016-01-24. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.

と端末のターミナルに表示され、

/etc/letsencrypt/live/ドメイン名/

みたいなところに

  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

の4つのファイルが生成します。
これが証明書です!やった!

ちなみにこれらは

/etc/letsencrypt/archive/ドメイン名

にある - certN.pem - chainN.pem - fullchainN.pem - privkeyN.pem

というファイルへのシンボリックリンクです。
Nは数字で、証明書を作る度にカウントアップするっぽいです。

何回証明書を作っていても、
/live 以下のファイルを見ていれば、
最新版の証明書ファイルにリンクされている!
というわけです。
(参考: 無限無料 SSL/TLS 証明書 - 知らないけどきっとそう。

便利そうだけど、こちとら手動インストールだから
関係ないね!

3. Webサーバーに証明書をインストール

さくらレンタルサーバーの場合

他社で取得したSSL証明書を使用する|さくらインターネット公式サポートサイト の記載の通り進めます。

「ドメイン設定」 で、
SSL証明書を登録したいドメインの行の
「SSL証明書」 > 「登録」 をクリック。

「秘密鍵をすでにお持ちの場合には、
アップロードをしてください」

の方を選択。

/etc/letsencrypt/live/ドメイン名/privkey.pem

を選択。

次に独自SSLの設定
「証明書のインストールを行います」
では、

/etc/letsencrypt/live/ドメイン名/cert.pem

の内容をコピペ。

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

BEGINとENDから始まる、最初と最後の行を含む
(最後に空白行も追加しない)ことに注意です。

次に中間証明書のインストールをします。
同様に、

/etc/letsencrypt/live/ドメイン名/chain.pem

の内容をコピペします。

通ると、

「証明書の表示」「中間証明書の表示」が
表示されるようになります。

次に、 ドメイン設定 > 「ドメイン詳細設定」
に行き、

  1. SSLの利用を選んでください

SNI SSLを利用する

にチェック、設定すればOK!

ちなみにMovable TypeのサイトをSSL/TLS化しようとすると、
結構大変なことになるので注意。

 replace="http:",""

が活躍。

参考 - MovableTypeで // から始まるURL、スラッシュから始まる絶対パスを使う - HTTPSとHTTPを上手に使い分ける小技 - IMPOV::In My Point Of View

WordPressは、「WordPress HTTPS」というプラグインで行けるらしい。


参考

皆さんの拍手が私のモチベーションです。励ましのコメントも送れるよ!→

ガッツゴリラ

この最も大事な位置にガッツポーズをするゴリラが表示されていることに何の意味があるのだろうか?答え:何もありません。こんなところまでお読みいただきありがとうございました。

Macオンラインウエア情報検索

Loading
Macオンラインウエア情報検索についてはこちらを参照ください。 →「Macオンラインウエア情報検索」をアップデートしました2012

このブログ記事について

このページは、2016年2月26日 11:23に書かれたブログ記事です。

ひとつ前のブログ記事は「年賀状のお年玉くじ、何枚当たるかな?」です。

次のブログ記事は「Day One ver2を使ってみての感想と「複数ジャーナル」機能の便利な使い方」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

アーカイブ