Value-server上のサイトに無料SSL証明書を導入してみんなに信頼してもらう。

無料のサーバ証明書がつくれるLet’s Encryptを使ってドメイン認証をします。

Googleを始めとした昨今のHTTPS化の流れに置いていかれると、後々困ることになるからね。

私は自分のサイトをValue-serverというレンタルサーバーサービスを使って運用してます。それにしてもGMOって会社はほんと巨大になったな・・・。

Value-serverはSSH接続を使って許可された範囲内でのコンソール操作が可能です。
これは玄人にとってとても有難い。しかも他のレンタルサーバサービスに比べて割安感があります。
ただし、レンタルサーバなのでroot権限はもらえません。これは玄人にとってとてもやりずらい。
Let’s Encryptを使う上でこのあたりがネックです。

とはいえ、まだまだ個人サイトをAWSのEC2等を使ってサーバ運用するとなると費用がバカにならないのでね。

では、レッツ、エンクリプツ。

下準備

とりあえず、ドメインは取得済みである前提です。
Value-serverに自ドメインを持ってくる際には、DNSへの登録も忘れずに。
他会社のネームサービスで契約したドメインは、Value-domainから設定が必要です。

また、Value-serverのドメインウェブの設定からドメインを登録し、サイトにアクセスできるようにしておいてください。

※このあたりの設定はValue-server側のマニュアルを参照してください。

Let’s Encryptでの処理にはHTTP/HTTPSでアクセスできる公開サーバが必要なので、AWSのEC2サービスを使って作業用サーバを立てましょう。
無料期間すぎてると、使用時間によって利用料が発生するので注意してください。
(この時点で無料では無くなってしまった…)
とはいえ、起動するのは証明書作ってる間だけなので小額で済みます。
作成する際には、AWS Linuxインスタンスを選択します。
インスタンスのタイプはt2.nanoでもぜんぜん大丈夫。
また、セキュリティグループの設定でHTTP/HTTPSに対して、0.0.0.0/0を設定し外部からの接続を許可しておきます。

EC2が起動したら、Teratermなどでログイン後、Let’s Encryptをインストールしてください。

# sudo su
# yum install git
# git clone https://github.com/certbot/certbot

また、これからドメイン登録しようとしているURLがEC2上からアクセスできることも確認しておきましょう。

# mkdir tmp
# cd tmp
# wget http://【自サイトのドメイン】

→接続成功し、index.htmlのファイルが出来上がることを確認。

...
Resolving 【自サイトのドメイン】 (【自サイトのドメイン】)... 157.7.184.14
Connecting to 【自サイトのドメイン】 (【自サイトのドメイン】)|157.7.184.14|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 117 
Saving to: ‘index.html’

index.html.1        100%[===================>]     117  --.-KB/s    in 0s

2017-01-29 00:52:06 (28.8 MB/s) - ‘index.html’ saved [117/117]

サーバ証明書の作成

では、いよいよサーバ証明書を作成します。
今回は、「www.rizworks.net」「itemkeeper.rizworks.net」の2つのドメインに対して同じ証明書を作り同時に当てたいと思います。

EC2側で、certbotをインストールしたディレクトリまで移動します。
本記事を読み進めた方ならばおそらく、/home/ec2-user/certbotです。

# cd /home/ec2-user/certbot
# ./letsencrypt-auto certonly -−manual -d itemkeeper.rizworks.net,www.rizworks.net -−email info@rizworks.sub.jp

↑ドメインを複数指定する場合はカンマで区切ります。

-------------------------------------------------------------------------------
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: Y
mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" i4aZx8QEAG5dX2QukHzCNj88jkNiqffWlXy7uyC_0SA.g7pc7J9i1hI-nGzmwDQpEYu_jzkUmii71PRN03_qRSI > .well-known/acme-challenge/i4aZx8QEAG5dX2QukHzCNj88jkNiqffWlXy7uyC_0SA
# 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

ここで、レンタルサーバ側にて作業します。
ここで要求されている事はLet’s Encrypt側からのドメインアクセスによるサーバー存在確認のために、指示しているファイルを作ってね、という意味です。
各ドメインでアクセスする際に参照されるトップディレクトリにファイルを作成します。


.well-knownというフォルダを作り、その下にacme-challengeというフォルダを作ります。

その下に上のコマンドで指示されている「i4aZx8QEAG5dX2QukHzCNj88jkNiqffWlXy7uyC_0SA」というファイルを作ります。


ファイルの中身も上で指示されているとおり、テキストで「i4aZx8QEAG5dX2QukHzCNj88jkNiqffWlXy7uyC_0SA.g7pc7J9i1hI-nGzmwDQpEYu_jzkUmii71PRN03_qRSI」とします。
この作業を2つのドメインに対して行います。

また、この作業はTeratermなどでSSH接続できるレンタルサーバなら、コマンドでも可能ですが、ファイルアップロードしかできないレンタルサーバの方たちにも対応するためあえてアップロードするようにしました。

ここで指定するファイル名などは、letsencrypt-autoコマンドを実行する度に変わる事に注意してくださいね。

準備ができたらEnterを押します。

Press Enter to Continue
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0001_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0001_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/itemkeeper.rizworks.net/fullchain.pem. Your
   cert will expire on 2017-04-29. To obtain a new or tweaked version
   of this certificate in the future, simply run letsencrypt-auto
   again. To non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"
 - 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

以上のようなメッセージが出たら成功です!Congratulations!

証明書のインストール

では、さっそくこのサーバ証明書をレンタルサーバ側にインストールしていきましょう。
各レンタルサーバによって違うと思うのでここからの手順は参考程度にしてください。

Value-serverにアクセスし、ドメインウェブの設定を変更します。
SSLの設定を行うためには「ドメイン(IP:xx.xx.xx.xx)情報入力」という枠の方にドメインを登録します。


そうすると、SSL設定側の選択ボックスでドメインが選べるようになっています。
選択して、証明書設定をクリックします。

ここで証明書作成を行ったEC2側でまた作業します。

# cd /etc/letsencrypt/live/
# ls
itemkeeper.rizworks.net

自分のドメインのフォルダができています。この下にSSL接続で必要になる情報がまとめて置いてあります。

privkey.pem の中身を「プライベートキー[パスフレーズなし]」に貼りつけます。
cert.pem の中身を「発行された証明書」に貼り付けます。
chain.pem の中身を「発行された中間証明書」に貼りつけます。


こんな感じです。

その他の項目は空欄でOKです。

CERT・証明書インストールボタンを押せば、一定時間後反映されます。
※反映までに1時間ほどかかるかもしれません。

あとは、https://で各ドメインにブラウザからアクセスできるか確認するだけです。

※ちなみに、value-serverの場合はHTTPSにした後は、直下にindex.htmlでも置いとかないとデフォルトのページは表示されないのでなんかファイル置いてアクセスできるかテストしましょう。

最後に

よく知られた話ですが、Let’s Encryptは3ヶ月ごとに証明書の更新が必要です。
なので、できればEC2の環境はサーバ停止の状態で保存しておき、証明書作成・更新作成作業が必要な時だけ起動する、というような運用にしておけばいいと思います。
ボリューム保存の料金がかかりますが。
それも嫌なら作業の度にEC2サーバを削除するのも手でしょう。

以上、お疲れ様でした♪

Value-server上のサイトに無料SSL証明書を導入してみんなに信頼してもらう。” への1件のコメント

  1. acme-challengeディレクトリ以下にアクセスできず、SSL証明書の更新ができなくなってます。Value-server上で無料SSL証明書が発行、設定できるようになったのでそちらを使用してください。

コメントを残す

メールアドレスが公開されることはありません。