SSLのオレオレ証明書作成

SMTPサーバの構築に際してTLSによる通信を行いたかったためオレオレ証明書を作ってみた
参考にしたページはこちら
http://d.hatena.ne.jp/ozuma/20130511/1368284304
サーバ証明書が使われている意味や仕組みまで解説されていてとても勉強になりました。

まずサーバ証明書の意味について。
AさんがユーザとしてBさんのホームページで何かを買うとする。その際、Aさんは重要情報を送るため暗号化する必要がある。そのためBさんの公開鍵をもらって暗号化した上で情報をおくる。そうすればBさん以外の人がこの情報を受け取っても解読できないため安全と言える。

この公開鍵はBさんのサーバにアクセスした際にもらうものなのだが、ここで問題が一つ。もらった公開鍵は本当にBさんのものなのだろうか?もしそれが別の公開鍵だとしたら暗号化して送ったところで全く意味がない。

Bさんが本当にBさんであることを確かめるには第3者が必要で、その役割を担うのがCA(認証局)。
公開鍵がBさんのものであることを確認するために使うのがサーバ証明書である。
サーバ証明書には、Bさんの公開鍵とCAの秘密鍵を掛けあわせて作った署名が入っている。Bさんからもらった公開鍵とCAの公開鍵を使うことでその署名が正しいものであることが確認できれば、Bさんからもらった公開鍵は本当にBさんのものであると言える。

詳しいアルゴリズムなどはこちらを参照
http://d.hatena.ne.jp/ozuma/20130511/1368284304
http://itpro.nikkeibp.co.jp/article/COLUMN/20060714/243397/?ST=selfup


以下サーバ証明書の作り方について
まずサーバの秘密鍵を作成する

$ openssl genkey 2048 > server.key

ここではセキュリティを考えて2048bitの鍵を作成している
この秘密鍵を使って証明書署名要求を作成する

$ openssl req -new-key server.key > server.csr

作成の際はいろいろ聞かれるがオレオレ証明書を作りたいだけなので何も入力しない。
一つだけCommon Nameの項目に関してはサーバのFQDNIPアドレスを入れておく。

最後にサーバ証明書を作成
先ほど作った署名要求をCAに送って署名してもらうのだが、今回はここで自分の秘密鍵を使う。

openssl x509 -req -signkey server.key < server.csr > server.crt 

ちなみに-days 365と付け加えることで1年間有効な証明書ができる

プロのための Linuxシステム構築・運用技術 (Software Design plus)

プロのための Linuxシステム構築・運用技術 (Software Design plus)