<追記>
さくらインターネット側でLet's Encryptに対応したので、
そちらに従ってやれば一瞬です。
はじめ方
1、コントロールパネルからログインします
2、ドメイン一覧から証明書を設定したいドメインを選びます
3、証明書の登録を押します
4、「無料SSLを設定」ボタンを押して設定完了です
無料SSLサーバー証明書 Let's Encrypt - レンタルサーバーはさくらインターネット
なので、この記事は読まなくてOK!(白目)
<追記ここまで>
ということで、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
作業手順
手順としては、
- 端末にクライアントソフトをインストール
- 端末でSSL/TLS証明書を発行
- 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
の内容をコピペします。
通ると、
「証明書の表示」「中間証明書の表示」が
表示されるようになります。
次に、
ドメイン設定 > 「ドメイン詳細設定」
に行き、
- SSLの利用を選んでください
を
SNI SSLを利用する
にチェック、設定すればOK!
ちなみにMovable TypeのサイトをSSL/TLS化しようとすると、
結構大変なことになるので注意。
replace="http:",""
が活躍。
参考 - MovableTypeで // から始まるURL、スラッシュから始まる絶対パスを使う - HTTPSとHTTPを上手に使い分ける小技 - IMPOV::In My Point Of View
WordPressは、「WordPress HTTPS」というプラグインで行けるらしい。
参考
- Let's EncryptでValidなSSL/TLS証明書を取得する | Developers.IO
- letsencrypt - DockerでLet's Encryptしよっか - Qiita
- Let's Encrypt の使い方 - Let's Encrypt 総合ポータル
- よくある質問 - Let's Encrypt 総合ポータル
- 無限無料 SSL/TLS 証明書 - 知らないけどきっとそう。
- User Guide -- Let's Encrypt 0.2.0.dev0 documentation
- Using letsencrypt.org SSL certificates · Paul Wakeford