トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

オレオレ証明書

OpenSSLのオレオレ認証局・証明書のつくりかた。ApacheのHTTPSやらOpenVPNなんかに使う。

いっつも忘れてしまうので、メモ。

  OpenSSLをインストールする

まさか入ってないということはないですよね?

  設定ファイルを用意する

OpenSSLのパラメータをあらかじめ設定しておくと、いちいちオプションをつけたり質問に答えたりする手間が省けます。

$ cp /etc/ssl/openssl.cnf ~

$ vi ~/openssl.cnf

  まず認証局

前項で設定したディレクトリ・ファイル名の通りに作るとよい。

$ mkdir hogehogeCA

$ chmod 700 hogehogeCA

$ cd hogehogeCA

$ echo 01 > serial

$ touch index.txt

$ mkdir newcerts

$ mkdir private

$ chmod 700 private

$ openssl req -new -newkey rsa:2048 -keyout private/cakey.pem -out ca.csr -config ~/openssl.cfg

$ openssl ca -in ca.csr -out ca.crt -selfsign -days 3650 -extensions v3_ca -batch -config ~/openssl.cfg

これで10年間有効なルート証明書ができる。-selfsignなのでオレオレ。鍵のビット長とかはお好きに。鍵とパスフレーズの管理は厳重にすること(所詮オレオレ認証局ですけどね)。

  サーバ証明書をつくって署名する

安全な通信路が確保できるなら認証局のあるホストで鍵をつくってもっていってもよいのですけど、よりセキュアにやるには鍵は使うサーバに置いといて、署名だけしてもらうのがよさげですね。

というわけで、まずは鍵をつくる。

$ openssl req -new -newkey rsa:2048 -keyout server1.key -out server1.csr -config ~/openssl.cfg

CommonNameはApacheで使う場合FQDNと一致させるとかいろいろあるので、そこらへんは気にしたほうがよいかも。

そうすると署名要求ができるので、こいつ(server1.csr)を認証局のあるホストに持って行って、こんどは認証局の立場で署名する。

$ openssl ca -in server1.csr -out server1.crt -batch -config ~/openssl.cfg

server1.crtができたら完了。ApacheやOpenVPNなんかではserver1.keyとserver1.crtを使う。あ、OpenVPNだとルート証明書もいるので、ca.crtも各サーバ・クライアントに必要です。

  パスフレーズ解除

鍵をつくるときにパスフレーズを要求されるんだけど、自動起動するサーバでそんなのいちいち入力してられないので解除しちゃいます。もちろんセキュリティ的にはよろしくないのですけど、かといって起動のたびに打ち込むわけにもいかないので。

$ openssl rsa -in server1.key -out server1.key

パスフレーズを要求されるので、生成のときに設定したものを入力するとパスフレーズなしの鍵が出てきます。

  DHパラメータ

OpenVPNなんかが鍵交換のときに使う暗号化パラメータらしい(←よくわかってない)。あらかじめ計算しておくとよいです。

$ openssl dhparam 2048 -out dh2048.pem