FreeBSD/OpenSSL

  • いわゆる自己認証証明局。公的には使えないが、社内とかで使う場合にいちいち公的な証明をもらわずに SSL 証明書を発行するのに使う。
  • OpenSSL 汎用のはずだが、確認していないので、FreeBSD での使い方としてここに配置。(各種ファイルは FreeBSD 8.0R の標準配置で書かれている。)

認証局を作成する。

  • 設定ファイルの openssl.cnf はデフォルトで /etc/ssl/openssl.cnf に存在する。
    • /usr/src/crypto/openssl/apps/openssl.cnf と同じもの。

専用のワークディレクトリを作成する。

  • CA 用の openssl.cnf と、一般に使用される openssl.cnf とを分離するために、新たにディレクトリを作成する。(超重要)
    # mkdir -p /etc/ssl/ca.localdomain.20xx-xx-xx
    # cd /etc/ssl/ca.localdomain.20xx-xx-xx
  • 管理上、ディレクトリにCAのドメイン名とCA作成日を入れておく。(理論的には組織に1つで十分なはずだが。)

設定ファイルを変更する。

# cp /etc/ssl/openssl.cnf /etc/ssl/ca.localdomain.20xx-xx-xx

openssl.cnf を変更する。

ディレクトリ名を変更。

-dir             = ./demoCA
+dir             = ./catop

鍵のビット長を 2048 にする。

[ req ]
-default_bits            = 1024
+default_bits            = 2048

CA 用に以下を追加 ([ v3_ca ] をいじるのが正解か?)

[ ca_cert ]
basicConstraints=CA:TRUE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
nsCertType = sslCA, emailCA
keyUsage = cRLSign, keyCertSign

[ req_distinguished_name ] に自分の団体の名前とか住所とかを設定

認証局用スクリプト CA.sh を用意する。

# cp /usr/src/crypto/openssl/apps/CA.sh /etc/ssl/ca.localdomain.20xx-xx-xx

必要なら CADAYS="-days 1095" を伸ばす。(3年)

現在のディレクトリの設定ファイルを対象にするように変更。

-REQ="$OPENSSL req $SSLEAY_CONFIG"
+REQ="$OPENSSL req -config ./openssl.cnf $SSLEAY_CONFIG"
-CA="$OPENSSL ca $SSLEAY_CONFIG"
+CA="$OPENSSL ca -config ./openssl.cnf $SSLEAY_CONFIG"

トップディレクトリの名前を変更。

-CATOP=./demoCA
+CATOP=./catop

CA 作成時に ca_cert セクションを見るようにする。

            $CA -out ${CATOP}/$CACERT $CADAYS -batch \
+                         -extensions ca_cert \
                          -keyfile ${CATOP}/private/$CAKEY -selfsign \
                          -infiles ${CATOP}/$CAREQ

CA.sh を実行可能とする。

# chmod +x CA.sh

認証局を作成する。(鍵と証明書発行要求の作成、証明書発行要求への自己署名)

# cd /etc/ssl/ca.localdomain.20xx-xx-xx
# ./CA.sh -newca

CA の鍵が入った private ディレクトリを不可視にしておく。 (CA.sh スクリプトに仕込むべきか?)

# chmod 700 catop/private

参考

スクリプトを読めばわかるが、内容的には、やっていることは以下のとおり。

  • 証明書と鍵を作成
    openssl req -new -keyout CA鍵ファイル -out CA証明書要求ファイル
  • 証明書に自己署名
    openssl ca -out CA証明書ファイル 有効日数 -batch \
               -extensions ca_cert \
               -keyfile CA鍵ファイル -selfsign \
               -infile CA証明書要求ファイル

メモ

  • cacert.pem が CA の証明書
  • careq.pem は CA の証明書発行要求
  • private/cakey.pem が CA の秘密鍵
  • 用意されている CA.sh のままで作ると、CA の証明書の期限は3年になっている。
    • CA証明書そのものの失効処理はかなり難しい(まず間違いなく手作業でやってもらうしかない)ので、むやみに有効期限が長いものを作ると大変かもしれない。(その時はそもそも期間は無関係か? 失効が伝わらなかった所をどうするかが課題。)
    • 更新しなくて済むように、期間を長くすることもよくあるが、更新忘れがその分多くなることに注意。1年に1回更新日(更新確認日)を作ったほうが逆に無難かもしれない。
    • 3年過ぎた場合、すべての証明書は無効となるので注意。
    • 有効期限1年の証明書を発行するには、CAの有効期限が1年以上残っていなければならないことに注意。
    • その前に、新しいワークディレクトリで新たな認証局を作成する。(前のは凍結して、失効処理のみを行う。)
  • 検討
    • CA の証明書をどこに配置するか?
    • 失効リストをどこに配置するか?

証明書を発行する。

証明書を失効させる。

(編集中)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-09 (月) 08:04:29 (32d)