Webアプリ開発してると
- 証明書の発行って、認証局に署名してもらったりとかめんどそう。
- とりあえずWebサーバーをSSL化して動作確認したいだけなのに
- 3分でできないかな。
ってこと頻繁にありますよね。
この章では、自分で証明書を作成し、自分で認証を行う方法について解説します。
はじめに断っておきますが、この手順は、俺が「オレだ!」という証明書を作ってその証明書を俺が「本物だ!」とハンコを押すようなもので、何の証明にもなっていないということは念頭に置いてくださいw
この証明書を使ってブラウザからアクセスするといわゆる「このサイトは信頼できません」というメッセージが出ていわゆる「危険を承知で続行」を押す羽目になりますw
SSL化の目的
WebサーバーのSSL化と言っても、目的はいくつかあると思います
てことでまず目的レベルの確認
- 通信を暗号化したい(Level1)
- 偽物のサイトではないことを証明したい(Level2)
- なりすましのユーザーからのアクセスを防ぎたい(Level3)
Level1はいわゆる「鍵」ってやつです。暗号化するだけが目的ならこれで十分です。
鍵生成ツールだけでセットアップできるのでopensslも要らず楽です。
Level2がいわゆる「証明書」ってやつです。信頼できる(とされている)期間に頼んで「私は〇〇です」ってのを署名してもらったやつですね。印鑑証明みたいなもんでしょうか。
一般的にはこのレベルかと思います。
Level3がいわゆる「クライアント認証」ってやつです。クライアント証明書っていうのをサーバーが発行し、それを持っている人だけがアクセスできるっていうアレです。
最上級レベルですね。
で、Level1が簡単ではあるのですが、サイトを公開するとかなるとLevel2の知識が必要になりますし、opensslさえインストールすれば証明書は簡単に作成できるので今回はLevel2で行きます。
てことで、opesslをインストールしといてくださいね~
鍵(Key)の作成
とりあえずディレクトリが散らからないよう、certディレクトリ作ってその中で作業します
$ mkdir cert
$ cd cert
鍵ファイル「oreore.key」をこうやって作ります
$ openssl genrsa -out oreore.key
Generating RSA private key, 2048 bit long modulus
........................+++
..........+++
e is 65537 (0x10001)
証明書(Certificate)の作成
適当に入力して「oreore.csr」という証明書を作成。
これは正確には「証明書署名要求(certificate signing request)」と呼ばれます。
まだ署名されてない証明書ということですかね。
$ openssl req -new -key oreore.key -out oreore.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:OR
State or Province Name (full name) []:Ore Ore
Locality Name (eg, city) [Default City]:Ore
Organization Name (eg, company) [Default Company Ltd]:Ore
Organizational Unit Name (eg, section) []:Ore
Common Name (eg, your name or your server's hostname) []:Ore
Email Address []:oreore@oreore.ore
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
これで「oreore.csr」という証明書署名要求ファイルを作成。
これをベリサインなどの認証局(CA)に提出して本人だと署名してもらうわけですね。
署名(Sign)する
本来的には、オレオレ認証局を立ててそこで署名するっていう手順を踏むのが正当で、技術的理解も深まるかと思われますが、ちょっと長くなってしまうのでw、opensslの自己署名コマンドを使っちゃいますw1
真面目な方は「プライベート認証局」でググってくださいw
てことで、次のようにして署名します。
$ openssl x509 -req -days 90 -in oreore.csr -signkey oreore.key -out oreore.crt
Signature ok
subject=/C=OR/ST=Ore Ore/L=Ore/O=Ore/OU=Ore/CN=Ore/emailAddress=oreore@oreore.ore
Getting Private key
オレオレ感ハンパないですw
これで「oreore.crt」という「正真正銘僕ちゃんですよ!」というファイルができましたので、これと鍵をWebサーバーに設定することになります。
[完]
-
実は署名要求を生成する際にいきなり自己署名してしまう -x509 というオプションもありますが、説明の都合上使いませんでした ↩