明日なんとかしたいオレオレ証明書

おはようございます。

人様がKindle Paperwhite買った直後に新型ipadを4万弱で出してくるのは人道的にどうなんでしょうか。ペン対応だし。

もう少し早かったら半年前に買い換えたPCも色々考慮の余地があったのに・・・。

 

□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■

最近初めてapacheサーバのテスト用サーバ証明書
所謂「自己証明書」もしく「オレオレ証明書
といわれるものについて作業したので、それについてまとめてみようと思います。

どうでもいいけど自己証明書って書くとなんか哲学チックすね。

オレオレ証明書 イズ 何?

apacheサーバで通信の暗号化(SSL通信)を行うためには、「信頼できるサーバです」と証明するためのサーバ証明書が必要となります。

本来的にはCA(認証局)に署名をしてもらう必要がありますが、この署名を自ら行って作成された証明書を「オレオレ証明書」と呼びます。

何が違うか

SSL証明書の役割としてはざっくり以下があります

1.通信の暗号化

2.通信相手(証明書設置側)の保証、存在証明(これについてCAが署名)

3.通信経路上での改竄の検出

ちなみにCAに署名をしてもらう正規の証明書は基本有料です。
オレオレ証明書でも1はできますが、それ以外はオレオレ証明書ではできません。

あとブラウザ毎に細部は異なりますが

「安全じゃないかもしれへんで。ええんか?知らんぞ?」的な画面をくぐり抜けないとアクセスできません。

なのでセキュリティ的にも運用的にも可能な限りCAに署名してもらった正式なものを使いましょー。

オレオレ証明書の生成

とはいえ、プロジェクトによってはどうても必要な場面が出てきます。

こっからはどんな感じに作ってくか見てみましょー。

試した環境はApache2.2.15す。バージョンによっては微妙に違ってくると思いますが、工程的には同じです。

秘密鍵の生成とパスフーレズの解除

まずOpenSSLコマンドを使って秘密鍵を生成します。

コマンドはopenssl genrsaです。これでRSA暗号化方式の鍵が生成できます。

コマンドを打つとパスフレーズの指定を求められますので、任意の値に設定してください。(この段階で無しにはできない)

openssl genrsa -des3 -out hogehoge.jp.key 2048

ここでつけたオプションですは以下の意味です。

-des3:暗号化方式の指定

他)DES, DES3, AES128, AES192, AES256 

-out hogehoge.jp.key:ファイル名指定(> hogehoge.jp.key でもいける模様)

2048:鍵長の指定(この場合は2048bit。1024だと不安視されたり)

 

つぎに生成時に指定したパスフレーズを解除します。

rsa -in hogehoge.key -out hogehoge.key

上記の入力でパスフレーズを求められますので、未入力で登録し直します。

パスフレーズはセキュリティ的にはもちろんついていた方がよろしいですが、ついたままだとapacheの再起動時にパスフレーズの入力を求められます。
sshでログインしてる際は問題ないですが、不意のサーバ再起動でapacheの起動が止まってしまうので、その辺はプロジェクト次第でしょうか。

公開鍵(csr)の生成

次は生成した秘密鍵を元に公開鍵を生成します。

コマンドはopenssl reqです。

下記意味合いとしては「hogehoge秘密鍵(key)を元にhogehoge公開鍵(csr)を作るぜー」です。

openssl req -new -key hogehoge.key -out hogehoge.csr

コマンドを打つとサーバ識別情報(DN)として色々聞かれます。

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]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Minato-ku
Organization Name (eg, company) [Default Company Ltd]:heisya
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:hogehoge
Email Address []:

DNの細かい意味はこちらをどうぞ

OpenSSLでキーペアやCSRを作成する手順 - Qiita

証明書の生成

いよいよ証明書です。

openssl x509コマンドを打ちましょう。

意味としては「hogehoge公開鍵(csr)とhogehoge秘密鍵(key)を元に署名した証明書(crt)を作るぜー」です。まんまですね。

openssl x509 -in hogehoge.csr -days 3650 -req -signkey hogehoge.key > hogehoge.crt

ちなみに証明書には期限の設定が必要です。

ここではdaysオプションで3650、つまりおよそ10年間の期限設定をしてあります。
CA証明書だと1年か2年とかになるかと。

apacheへの適用

まずは作ったものを移動させましょう。

mv hogehoge.crt  /etc/pki/tls/certs/hogehoge.crt
mv hogehoge.key /etc/pki/tls/private/hogehoge.key mv hogehoge.csr /etc/pki/tls/hogehoge.csr

/etc/pki/tls以下、もしくは/etc/httpd/conf.dとかに置くのが一般的(っぽい)ですが、

ぶっちゃけ外から見えなくてapacheから参照できる場所ならどこでもいいはず。

まあ誤操作で削除とかしないようにあんま変なとこには置かない方がよろしかと。

 

あとはapacheのconfファイルに参照先の指定だのを書いてきます。

SSLポート(通常443)の設定に以下を追加します。

SSLEngine on ←SSL使うぜー
SSLCertificateFile /etc/pki/tls/certs/hogehoge.crt ←証明書はここだぜー
SSLCertificateKeyFile /etc/pki/tls/private/hogehoge.key ←暗号鍵はここだぜー
SSLVerifyClient none ←接続元(クライアント)の検証なんかしないぜー
SSLVerifyDepth 0 ←CA証明書とかいらないぜー

SSLVerifyClientとかの細かい説明は脱線になるので今回は端折ります。

あとは設定ミスがなければapache再起動でいけるはず。

sudo /etc/init.d/httpd graceful

ポート開けんの忘れないでね!

 

ていう塩梅。

ちょっと資料やサイトによってcsr、crtの日本語呼称がぶれてるんでその辺の説明に異論ある方もいるかと思いますが許してつかあさい。

参考:

SSLを利用するための自己証明書(オレオレ証明書)の設定メモ - Qiita

Apacheでのクライアント認証の仕組み - Qiita

オレオレ証明書を使いたがる人を例を用いて説得する - Qiita