この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、大瀧です。
ELBのSSL Termination、みなさん使っていますか?EC2のSSL処理をオフロードしたり、バーチャルホストを複数ELBで対応したり、便利ですよね。
ただ、"ちょっとSSL Terminationを試してみたい"というときサンプルの証明書を準備する作業は、結構面倒なのではないでしょうか。今回はなるべく手早く、自己署名証明書を作成する方法としてmake-ssl-certコマンド+αの方法をご紹介します。
お決まりの断りですが、SSL自己署名証明書はあくまで動作確認用に用いるべきものですので、HTTPS通信の保護およびWebサーバー認証のためには、然るべき正式なSSL証明書を準備ください。
Step1: Ubuntu VMをVagrantで用意する
まずは、SSL証明書作成用のUbuntu仮想マシンを用意します(キリッ)。「えー、証明書作成のためにわざわざ仮想マシン用意するのかよ?!」と文句が聞こえてきそうですが、Windows用やMac OS X用などいろいろなSSL証明書を扱うツールを試してきた結果、一番シンプルに使えるのはLinux(Ubuntu)のmake-ssl-certコマンドという結論に至りました。Vagrantを使えばとても簡単にUbuntu仮想マシンが扱えるので、この機会にVagrantデビューするのもいいかもしれません(笑)。
Vagrantは、公式Webページからバイナリをダウンロード、インストールします。(VirtualBoxも合わせてインストールしましょう)Mac OS Xであれば、端末を開いて数分でUbuntu仮想マシンを起動、ログインすることができます!途中のvagrant up実行時に仮想マシンイメージ(Box)のダウンロードが実行されるので、太いネットワーク回線に接続し作業することをお奨めします。
Vagrantの入門チュートリアルがちょうどUbuntu仮想マシンを起動しているので、その流れに沿って作業してみます。
macbook:~ ryuta$ mkdir precise # Vagrantの設定ファイルを配置する、任意のディレクトリを作成
macbook:~ ryuta$ cd precise
macbook:precise ryuta$ vagrant init precise32 http://files.vagrantup.com/precise32.box # Ubuntu 12.04 LTS 32-bit(普通のUbuntu)を指定
:
macbook:precise ryuta$ vagrant up # 初回実行時は仮想マシンイメージをダウンロードして起動、2回目以降はイメージを使い回す
Bringing machine 'default' up with 'virtualbox' provider...
:
Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant
macbook:precise ryuta$ vagrant ssh # いきなりSSH接続!SSH鍵などはVagrantが自動生成してくれます。Cool!!
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)
* Documentation: https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
vagrant@precise32:~$
Ubuntu仮想マシンにログインできました!続いて、make-ssl-certコマンドを含むssl-certパッケージをインストールします。
vagrant@precise32:~$ sudo apt-get install ssl-cert
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
openssl-blacklist
The following NEW packages will be installed:
ssl-cert
0 upgraded, 1 newly installed, 0 to remove and 156 not upgraded.
Need to get 12.3 kB of archives.
After this operation, 91.1 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main ssl-cert all 1.0.28ubuntu0.1 [12.3 kB]
Fetched 12.3 kB in 0s (28.9 kB/s)
Preconfiguring packages ...
Selecting previously unselected package ssl-cert.
(Reading database ... 29361 files and directories currently installed.)
Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...
Processing triggers for man-db ...
Setting up ssl-cert (1.0.28ubuntu0.1) ...
vagrant@precise32:~$ make-ssl-cert
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Usage: /usr/sbin/make-ssl-cert template output [--force-overwrite]
Usage: /usr/sbin/make-ssl-cert generate-default-snakeoil [--force-overwrite]
これで準備OKです。
Step2: make-ssl-certの実行+α
make-ssl-certコマンドは、自己署名証明書を簡単に作成するコマンドラインツールです。以下のようにHost name(Common Name)を入力するだけでそれ以外はツールが自動でうまいこと見繕い、秘密鍵と証明書を含むpemファイルを作成してくれます!以下の実行例で指定している./cert.pemが、作成する証明書のファイル名です。任意のファイルで、どんどん作ることができます。
vagrant@precise32:~$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf ./cert.pem
┌────────────────────┤ Configure an SSL Certificate. ├─────────────────────┐
│ Please enter the host name to use in the SSL certificate. │
│ │
│ It will become the 'commonName' field of the generated SSL certificate. │
│ │
│ Host name: │
│ │
│ sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com___________________ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
vagrant@precise32:~$ ls
20154bec cert.pem postinstall.sh
vagrant@precise32:~$ sudo cat cert.pem
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC88d+01eujf0lN
: (中略)
EiPZjALfvnEmIhdFcxtYGguGdCG1sXHaDzY052+jCx70OYtD5XPO2yWlQEvrv3Si
sDEkBIU7PDNbRXjX2eoprTd/pg==
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIC/DCCAeQCCQDMFK9wYsijGzANBgkqhkiG9w0BAQUFADBAMT4wPAYDVQQDEzVz
: (中略)
HktEr/6CwFp3XutubBSXrxQc5wLBr/0m9hNb0SN1qGJdANxPKW6NdeRYkT/+37SK
-----END CERTIFICATE-----
vagrant@precise32:~$
あっという間にできました!
-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----までの部分を、ELBの証明書アップロード時のPublic Key Certificate欄に貼付けて使います。参考までに証明書の詳細を確認するopenssl x509コマンドの結果を示します。
vagrant@precise32:~$ sudo openssl x509 -in cert.pem -text # 証明書の内容を確認
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
cc:14:af:70:62:c8:a3:1b
Signature Algorithm: sha1WithRSAEncryption
Issuer: CN=sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com
Validity
Not Before: Feb 10 08:41:46 2014 GMT
Not After : Feb 8 08:41:46 2024 GMT
Subject: CN=sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
: (以下鍵情報)
vagrant@precise32:~$
設定したとおりにできていますね!
Step3: 秘密鍵の変換
ここでちょっとしたコツです。make-ssl-certコマンドで作成されるpemファイルにある秘密鍵(Private Key)はRSA形式になっていないため、ELBのアップロード時に以下のようなエラーが出てしまいそのままでは使えません。openssl rsaコマンドで、RSA形式に変換したものを貼付けましょう。
vagrant@precise32:~$ sudo openssl rsa -in cert.pem
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAvPHftNXro39JTcvP8RdYapGRojNd9H68MIrBaIuZwKAe9xjb
: (中略)
NOdvowse9DmLQ+VzztslpUBL6790orAxJASFOzwzW0V419nqKa03f6Y=
-----END RSA PRIVATE KEY-----
こちらをPrivate Key欄に貼付ければ、一丁あがりです!
後片付け
SSL証明書をアップロードしたELBが正常に動作することを確認したら、Ubuntu仮想マシンを片付けましょう。今回作成した証明書が不要であれば、vagrant destroyで仮想マシンごと削除してしまうのがお奨めです。また必要になったらvagrant upを実行し新規仮想マシンを作成します。2回目以降はBoxのダウンロードは省略されるので、ネットワーク通信は発生せず、より早く起動します。Vagrant賢い!
vagrant@precise32:~$ logout
Connection to 127.0.0.1 closed.
macbook:precise ryuta$ vagrant destroy
Are you sure you want to destroy the 'default' VM? [y/N] y
[default] Forcing shutdown of VM...
[default] Destroying VM and associated drives...
macbook:precise ryuta$
まとめ
make-ssl-certコマンドを利用したELB向けSSL自己署名証明書の作成方法をご紹介しました。この方法なら複数ドメインでSSLバーチャルホストの動作検証も苦にならないハズ!
また、Macネイティブでイケてるツールがあれば教えてください!乗り換えを検討します(笑