Let's Encryptで、さくらレンタルサーバをHTTPS対応

Googleのウェブマスター向け公式ブログで、HTTPSページが優先的にインデックスに登録されるようになりますという記事が最近ありました。
HTTPSというと、金銭や個人情報をやりとりする場合など、重要な情報をやりとりする際に使うものとの感覚から、当ページでは関係ないと思っていました。
しかし、このページで利用しているさくらレンタルサーバのSNI対応や、Let's Encryptによる無料のサーバ証明書の配布により、このたび重い腰をあげてHTTPS対応を行いました。
https://msnr.net/http://msnr.netのどちらでも使うことができます。


以下に行ったことを備忘録として書いておきます。

まず、Let's Encryptの証明書を取得するため、日本語のLet's Encrypt総合ポータルの使い方のページを参考に、さくらのレンタルサーバ上で試してみましたが、root 権限が無いため断念。
※ちなみにLimited Beta Programの期間でした。

とりあえず、UNIX系の環境を用意する必要があるので、Windows10のHyper-Vの仮想環境にLinuxのCentOS7をインストールしました。
CentOS-7-x86_64-Minimalなisoデータを利用して、ベース環境は「ベーシックWebサーバ」にしましたが、後で必要なものはインストールされるので、ベース環境は「最小限のインストール」でも大丈夫かと思います。
※次のページを参考にしました。Windows10でクライアントHyper-VにCentOS7をインストールしてみた。

CentOSには、Let's Encryptクライアントソフトウェアをダウンロードするためのgitが無いため、rootになり、
# yum install git
と、yumでgitをゲット!
そして、gitで
$ git clone https://github.com/letsencrypt/letsencrypt
と実行すると、ディレクトリ ./letsencrypt が作られるので、
$ cd letsencrypt
と移動して、必要なものをダウンロード・インストールするためrootで
# ./letsencrypt-auto --help
を実行します。
※helpにしなくてもletsencrypt-autoを実行するとインストールとかしますが、インストールと実行が混ざるとややこしいのでhelpに。

次にサーバ証明書の作成をしますが、本番環境の専用サーバで実行すればLet's Encryptから見てドメインの持ち主であることは明白なので簡単ですが、共有サーバなので、Let's Encryptを他のサーバでやってみるを参考しました。
この後の処理ですが、GUI風のTUIの画面がHyper-Vの仮想マシン接続でうまく操作できなかったので、PuTTYでSSHにより仮想マシンに繋げて操作しました。
rooで、
# ./letsencrypt-auto certonly --manual
を実行すると、TUIで以下の様に色々きかれます。

まず、「Enter email address (used for urgent notices and lost key recovery)」と復旧に必要な聞かれるので、メールアドレスを入力してください。(自分はpostmaster@msnr.net)
※letsencrypt-auto の -m でメールアドレスを指定しておくと聞かれないようですが試してはいません。

次に、「Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory」と同意を求められるので、Agreeと同意します。

そして、「Please enter in your domain name(s) (comma and/or space separated)」と、証明書を発行するドメイン名を聞かれますので、入力してください。(自分はmsnr.net)
※letsencrypt-auto の -d でドメインを指定しておくと聞かれないようですが...

次は、
「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?」
と、IPアドレスを記録するけとよいかと聞かれるので、Yesとします。

次に、ドメインの持ち主か確認するため、CUIで以下の処理の指示がでます。
 Make sure your web server displays the following content at
 http://ドメイン名/.well-known/acme-challenge/XXXXXXXXXXXXXXXX before continuing:
 YYYYYYYYYYYY
 
 If you don't have HTTP server configured, you can run the following
 command on the target server (as root):

 mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
 cd /tmp/letsencrypt/public_html
 printf "%s" YYYYYYYYYYYY > .well-known/acme-challenge/XXXXXXXXXXXXXXXX
 # 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()"
 Press ENTER to continue
以上が指示ですが、#より後はpythonでwebサーバの処理をしているだけなので、さくらレンタルサーバで使っているhttpdに、
http://ドメイン名/.well-known/acme-challenge/XXXXXXXXXXXXXXXX
でアクセスできるよう、/.well-known/acme-challenge/のディレクトリを掘って、内容がYYYYYYYYYYYYなファイルXXXXXXXXXXXXXXXXを作って、ブラウザでアクセスできるか確認できたら、CentOSのCUIでEnterを押下!

アクセスできない状態だと、「Self-verify of challenge failed.」とエラーで終了します。
アクセスできドメインの持ち主と確認されると、
 IMPORTANT NOTES:
  - Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/ドメイン名/fullchain.pem. Your cert will expire
  on 20XX-YY-ZZ. To obtain a new version of the certificate in the
  future, simply run Let's Encrypt again.
  - If you like Let's Encrypt, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
  Donating to EFF: https://eff.org/donate-le
と、CentOSの環境の /etc/letsencrypt/live/ドメイン名/ に有効期限20XX-YY-ZZ(3ヶ月)の証明書が作成されます。

最後に、さくらのコントロールパネルのドメイン設定 https://secure.sakura.ad.jp/rscontrol/rs/domain で、対象のドメイン名のSSL証明書登録をクリックし、
・秘密鍵として privkey.pem をアップロード
・証明書として cert.pem の内容を貼り付け送信
・中間証明書として chain.pem の内容を貼り付け送信
をして、SNIの設定をすると処理完了のはずです。

以上で証明書の登録できましたが、htmlの中の画像やjavascript、cssへのリンクに「http://」とプロトコルまで絶対パスで指定している場合は、相対パスにしたり「http:」を消して「//」から始まるようにする必要があります。
「https://」とHTTPS固定にしても良いです。

たぶんこんな感じですが、自分も一回やったきりなので、処理が抜けていたりしたら申し訳ありません。
ちなみに、facebookのいいねの対象ですが、httpsとhttpを別に扱うようなので、httpのままにしております。


Comment [1]

No.1

本日、letsencrypt-autoを実行したところ、エラーがでました。
どうも、certbot-autoに変更されたらしく、installからletsencrypt-autoと同様に行い、うまく行きました。

コメントする

※ コメントは認証されるまで公開されません。ご了承くださいませ。

公開されません

(いくつかのHTMLタグ(a, strong, ul, ol, liなど)が使えます)

このページの上部へ

プロフィール

名前:いと
性別:♂
mail: msnr@msnr.net

一言:まぁそれなりに、だらだら生きている、自転車好きの元プログラマです。会社勤めを辞め、 修養科を無事に修了することができ、 道専務をさせていただくことになりました。
2007年4月より大教会で青年づとめをさせていただき、2011年1月より自教会に戻りました。
させて頂くことを手探りな状態ですが、勇んでつとめさせていただきます。

サイト内検索

最近のピクチャ

最近のコメント

Powered by Movable Type 6.3.6