joppot

コピペで絶対動く。説明を妥協しない

サーバ ソフトウェア

let’s encryptのssl証明書をvagrantのubuntuを使用して取得する

投稿日:2016年1月11日 更新日:

Pocket

letsencrypt_top_thumb

概要

みなさんこんにちはcandleです。2014年の後期にmozillaあたりが主導して、無料のssl証明書作ろうという動きがありました。ついに去年の12月にβ版がでたので、早速試してみました。
ちなみに、メージャーアップがあるらしく、今鍵を作ると、今年の3月末までしか使え無いっぽいですね。

いろいろ試行錯誤してわかったのですが、let’s encryptのssl証明書の取得の仕組みは以下のようになっています。

最初に、あなたの公開しているサーバにドメインを紐付けておきます。説明ではhttp://hoge.comというのを例に使用します。

vagrantのubuntuにlet’s encryptのソフトウェアをインストールします。
let’s encryptサーバに向けて、ドメイン名を送信します。let’s encryptサーバは与えられたドメイン名を見て、トークンをvagrantのubuntuに返してきます。この時、ドメインが実際に公開サーバに紐付けらている必要はないっぽいです。逆に言うと、この時lets encryptサーバはドメインにアクセスしていない。

set_data

返ってきたトークンをあなたが公開しているサーバにセットしてどこからでもアクセスできるようにしておきます。一般にトークンは長いので、無作為なアクセスではそのトークンを取得できないようになっています。

set_encrypt_data

サーバーにトークンをセットしたことをlet’s encryptサーバに送ります。encrypt サーバはあなたが公開しているサーバーにトークンがあるか確認しに行きます。もしも、トークンがあれば、let’s encryptサーバーはipアドレスとドメイン名をもとに、ssl証明書を作成し、vagrantに送信してきます。

i_got_ssl_data

あとは、このssl証明書をサーバーに設定すればおkです。

ところで、なんでsslの取得を公開サーバーでやらないのかという意見もあると思います。
1つはlet’s encryptが一番ベストに動くのはubuntuだからです。centosやec2のような公開サーバーを使っているともしかするとうまく動かないかもしれないからです。

もう1つはlet’s encryptは自動で、必要なパッケージをインストールします。サーバーになるべく不要なものはのせたく無いのは誰でも同じだと思います。

ここまで解説でした。
実際にやっていきましょう。

前提

公開しているサーバがある。このブログではnginxで動いているサーバーで説明します。わかっている人はapacheで応用してできると思います。
vagrantがインストールされている。

SPONSORED LINK


vagrantを立ち上げる

ubuntuは14.10を使います。おそらく13とかでも動くと思います。
vagrantのboxが無い方は以下のコマンドでboxを足します。

vagrant box add ubuntu14.10 https://github.com/kraksoft/vagrant-box-ubuntu/releases/download/14.10/ubuntu-14.10-amd64.box

次にvagrantのディレクトリを作成します。私はホームディレクトリにvagrantというフォルダを作りその中にlets_encryptというフォルダを作ります。

mkdir vagrant
cd vagrant
mkdir lets_encrypt
cd lets_encrypt

make_lets_encrypt_vagrant_dir

以下のコマンドでvagrantを初期化します。

vagrant init ubuntu14.10

Vagrantfileが生成されるので、開いて、ipアドレスのところをコメントインします。

  config.vm.network "private_network", ip: "192.168.33.10"

vagrant_ubuntu_14_10commentin

保存したら、vagrantを立ち上げます。

vagrant up

vagrant sshでログインします。

vagrant ssh

sshしたら、まずはapt-getをアップデートします。

sudo apt-get update

let’s encryptを試す

let’s encryptのソフトウェアをダウンロードするにはgitが良いので、gitをインストールします。

sudo apt-get install git

apt-get_install_git

let’s encryptのソフトウェアをダウンロードします。

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

download_lets_encrypt

letsencryptフォルダに移動します。

cd letsencrypt

一般に以下のコマンドで手続きが始まります。

./letsencrypt-auto certonly -a manual --server https://acme-v01.api.letsencrypt.org/directory

これで起動すると自動的にあれこれやってくれます。しばらくたつと下のような画面に成ると思います

very_good_interface

メールアドレスを入力しましょう。これはkeyを無くした時に使います。

規約を了解するかでてくるので「agree」を選んで、エンターを押します。

i_agree_encrypt

ドメイン名の入力がでてくるので、公開しているサーバのドメイン名を入力します。例えば、http://hoge.comなら「hoge.com」と入力します。

input_your_damin_name

IPアドレスをを保存してよいか聞いてくるので「Yes」を選びます。

okipokip

唐突にGUIが終わります。そして幾つかのコマンドが表示されます。ここが重要です。カーソルがまだ待機モードになっていることを確認してくさい。おそらく「Press ENTER to contine」でカーソルが止まっていると思います。これはサーバに必要な設定を行ってからエンターを押すので、絶対にエンター押さ無いください。

Make sure your web server displays the following content at
http://hoge.com/.well-known/acme-challenge/fewaoijfeowiangeawg-jgioewaj90igaeigjaewqo before continuing:

feafoiweahjefioawejfgowaeibgeagaewougieajfoaiwgerjgaiowergha

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" ffeafoiweahjefioawejfgowaeibgeagaewougieajfoaiwgerjgaiowergha > .well-known/acme-challenge/fewaoijfeowiangeawg-jgioewaj90igaeigjaewqo
# 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

上のメッセージはそれです。多少適当に変更しています。
設定などはmkdir、cd、printfの下りを真似すればいけます。上のメッセージではサーバーはpythonを使えばいいよと成っていますが、私の場合はすでに止められないnginxが動いているので、そっちで行います。


公開サーバーの設定

それでは公開サーバの設定をやっていきましょう。
私はec2のnginxでやります。nginxのnginx confを記述します。

cd /etc/nginx/conf.d/
sudo touch letsencrypt.conf

letsencrypt.confを開いて以下を記述します。

server {
  listen 80;
  server_name hoge.com;
  location / {
    root    /usr/share/nginx/letsencrypt;
    index   index.html index.htm;
  }
}

公開ディレクトリに移動します。

cd /usr/share/nginx
sudo mkdir letsencrypt
sudo chown ec2-user:nginx -R letsencrypt
cd letsencrypt

このletsencryptフォルダで先ほど、vagrantで表示された項目を実行します。

mkdir -p .well-known/acme-challenge
printf "%s" ffeafoiweahjefioawejfgowaeibgeagaewougieajfoaiwgerjgaiowergha > .well-known/acme-challenge/fewaoijfeowiangeawg-jgioewaj90igaeigjaewqo

サーバーを再起動します。

sudo service nginx restart

正しく設定できたかどうか確認するには、vagrantのubuntuに表示された。urlを叩けばわかります。
例えば、hogeなら以下のようになっています。

http://hoge.com/.well-known/acme-challenge/fewaoijfeowiangeawg-jgioewaj90igaeigjaewqo

これにアクセスして、作成したファイルがダウンロードできるかどうか確認します。できればうまくいっています。
サーバの設定は以上です。

vagrantのubuntuの設定の続き

varantのubuntuは「Press ENTER to continue」で待機しています。

公開サーバの設定ができたので、エンターを押しましょう。
特に問題なく以下のメッセージが出れば成功です。

IMPORTANT NOTES:
– If you lose your account credentials, you can recover through
e-mails sent to alice@hoge.com
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/hoge.com/fullchain.pem. Your cert
will expire on 2016-04-10. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.

鍵は/etc/letsencrypt/live/hoge.comに入っています。

sudo su
cd /etc/letsencrypt/live/hoge.com/

で確認できると思います。
cert.pem chain.pem fullchain.pem privkey.pem
のファイルがあります。

ls -laするとシンボリックリンクになっているので、実態はこっちのパスにあるようです。

/etc/letsencrypt/archive/hoge.com

うまく取得できましたね。

まとめ

ここから実際にnginxにsslを設置してhttps通信を行うのですが、それは様々なブログが取り上げているので、私は特に解説しなくてもいいかなと思っています。1つだけあげるとしたら、letsencryptで取得した鍵はprivateとcertだけでは信頼に問題があり、ブラウザで赤いマークがでました。chainファイルも設定したら、うまくいきました。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ, ソフトウェア
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

memcachedサーバとruby on railsのdalliを使用してセッションを管理する

概要 みなさんこんにちはcandleです。今回はmemcachedサーバを利用してrailsのセッションを管理してみたいと思います。 一般にrailsでセッション管理をしていると、ブラウザのcooki …

wordpressのカテゴリーを削除する

概要 みなさんこんにちはcandleです。卒論が忙しくて、ブログの更新ができませんでした。まだ、全て終わったわけじゃありませんが、ちょくちょく更新していきます。 今回はwordpressのカテゴリー削 …

ローカル開発環境のMAMPをインストール

概要 どうもこんにちは、candleです。今回はMAMPのインストールをやっていきましょう。 MAMPというのはApache、PHP、MYSQLを実践する環境を手軽に作れるアプリケーションです。 こう …

MAMPでphpのshell_execを使用してunixコマンドを実行できない場合の対処(imagemagick,convert)

概要 みなさんこんにちはcandleです。今回はちょっと問題が起きてshell_execがうまくいかないときのトラブルシューティングをまとめます。 私はMAMPをバージョンアップする前は、phpのsh …

Macからiphoneまたはipodにpdfをibooks経由で送る方法

English 日本語 概要 みなさんこんにちはcandleです。今回はMacからiphoneまたはipodにpdfファイルを送る方法を紹介します。 たまに電車の中などで、パソコンにダウンロードしたp …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ