RAKUIN

Let’s EncryptでサイトをHTTPS(SSL)化する方法

GoogleがSSL推奨するようになって久しいですね。最近やっと導入したんですが、ビタ一文払いたくないのでせっかくなので無料SSLで話題になった Let’s Encrypt を利用することにしました。ちょっとばかりTerminalで入力しますが割と簡単ですし、まだHTTPS化していないならビタ一文払いたくないので話題の無料SSLを試してみてはいかがでしょうか?

2017-10-18 追記

さくらのレンタルサーバが2017年10月17日からLet’s Encrypt簡単設定機能の提供を開始しました。コントロールパネルからボタン一つで登録を行える上、更新も自動的に行われるという至れり尽くせりな便利仕様です。早速試してみましたが、登録ボタンを押して1時間ほどで登録完了メールが届き、この時点ですでに設定も完了していました。もうややこしいコードを打つ必要はないんです。

という訳でこの投稿、さくらユーザーの方はおろか、自分ですらもう必要ないんですよね… レベルがまるで違う話で恐縮ですが、Google Wave入門書が完成したと思ったらGoogle Waveが開発中止になった悲劇を思い出し、少し気持ちが分かったような気がしました。

あんどうさんに比べたらダメージは軽いものなので、今日はしばらくメダカでも眺めて過ごそうと思います。


Let’s Encryptの主な特徴

執筆時点ではまだですが、ワイルドカード証明書が嬉しいですね。個人サイトなら十分に試す価値アリだと思います。

使用環境

Let’s Encrypt 導入手順

文章化すると長く見えますが、やることは意外と少ないんですよ?

  1. Certbotをインストールして、
  2. 証明書発行して、
  3. サーバに登録して、
  4. SSL有効にしたらできあがり。

たったの4項目! ほら簡単そう!(まとめたら11工程に分かれたけど)

では早速ターミナルを起動してみましょう。

1. HomebrewでCertbotをインストール

gitでインストールする方法もあるようですが、古いMac環境だとバージョンの問題で出来ませんでした。よってマニュアル通り、Homebrewでインストールします。Homebrewのインストールが分からない場合は「Homebrew インストール」でググりましょう。

コマンド

$ brew install certbot

インストールが終わったら、念のためバージョンを確認しておくと安心です。

コマンド

$ certbot --version

結果

certbot 0.18.2

2. Certbotで証明書を取得開始

※Certbotのバージョンによっては多少手順が変わるかもしれません。バージョンが違う場合は以下の記述を鵜呑みにせず、ターミナルに表示される内容をよく読んでから進めてください。

コマンド

$ sudo certbot certonly --manual -d example.com -d www.example.com

3. rootパスワードとメールアドレスの入力

以下のようにrootパスワードとメールアドレスを順番に聞かれるので、それぞれ入力します。

rootパスワードの入力

Password:

メールアドレスの入力

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

4. 規約への同意

メアド入力が済めば、3連続で同意事項。まずは規約(英文)ですが、できればちゃんと読んで A で同意しましょう。できれば。

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel:

5. メールアドレスをシェアしてもいいかの確認

Electronic Frontier Foundation にメールアドレスをシェアしていいか聞かれます。ここはご自由に。

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:

私は N しました。

6. IPの記録に同意

IPを記録するよ、と言われます。大人しく Y で同意しましょう。

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot 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?
-------------------------------------------------------------------------------
(Y)es/(N)o: 

7. ドメイン所有者かどうかの確認作業

IP記録に同意すると、以下のような画面が表示されます。

-------------------------------------------------------------------------------
Create a file containing just this data:

IOHDGPQ9082fwihgapioj3jiojakjIhdajklakdjgaA.PHGEOlhgajpaqjkdjgajj19278yhgpq4tjhasdg431j

And make it available on your web server at this URL:

http://example.com/.well-known/acme-challenge/IOHDGPQ9082fwihgapioj3jiojakjIhdajklakdjgaA

-------------------------------------------------------------------------------
Press Enter to Continue

ここでの注意点は、まだEnterを押さないこと。
(ただし、証明書を取得するドメインが複数ある場合は、Enterを押して取得したいドメイン分表示させます。)

Enterを押す前に、まずは指示に従ってファイルを作成&アップします。手順は以下の通り。

  1. ローカルに確認用のファイルを作成。上記の場合だと以下の通り。
    • ファイル名:IOHDGPQ9082fwihgapioj3jiojakjIhdajklakdjgaA
    • 内容:IOHDGPQ9082fwihgapioj3jiojakjIhdajklakdjgaA.PHGEOlhgajpaqjkdjgajj19278yhgpq4tjhasdg431j
  2. FTPソフトなどでサーバ上に /.well-known/acme-challenge/ というディレクトリを作成
  3. そこに作成したファイルをアップ
  4. これを取得したいドメイン分行います。

ファイルの作成&アップが済んだら、Enterを押しましょう。ドメインの確認が始まります。

8. ドメインの確認&証明書の発行完了!

以下のようなメッセージが出れば無事確認が済み、証明書が発行されています。有効期限も表示されているので、リマインダー等に登録しておきましょう。

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2017-12-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

9. 証明書ファイルの確認

サーバに登録するため、以下の場所にある証明書ファイルを確認します。

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

4ファイルありますが、内容は以下の通り。

ファイル名 内容
certN.pem サーバ証明書(公開鍵)
chainN.pem 中間証明書
fullchainN.pem サーバ証明書と中間証明書が結合されたファイル
privkeyN.pem 秘密鍵

※N は数字

10. さくらのサーバでSSLを登録する

  1. さくらのコンパネにログインし、ドメイン設定に移動
  2. SSLを登録するドメイン名の右にある「登録」リンクをクリック
  3. 秘密鍵どうこう言われるので、ファイルを選択して秘密鍵(privkeyN.pem)をアップロード
    秘密鍵アップロード画面
  4. すると証明書のインストール画面になるので、certN.pemをテキストエディタ等で開き、内容を全てコピー。コンパネのテキストエリアにペーストしたら送信をクリック
    サーバ証明書のインストール画面
  5. 画面が切り替わったら、「中間証明書のインストール」をクリック
    サーバ証明書をインストール後、中間証明書インストールへのリンク画面
  6. 今度はchainN.pemを開き、手順4と同様にコピペして送信

これで登録は完了です。次がついに最後の工程!

11. SSLの利用設定

長かった工程もいよいよ最後。

ドメイン設定から利用したいドメインの詳細設定に移動し、「4. SSLの利用をお選びください」の中の「SNI SSLを利用する」を選択。これで送信すれば完了です。

SSL利用設定画面


以上でLet’s Encryptの導入、サイトのhttps化は完了です。お疲れさまでした。文章化すると長いな…

ここからはサイトをhttpsに統一したり、wwwあり or なしに統一したり、Wordpressをhttps化したりといった雑務が始まりますが、それはまた今度。

参考サイト