Shammer's Philosophy

My private adversaria

独自CA環境構築と証明書作成手順(Debian / CA.sh 編)

準備とGoal

まず、OpenSSL 用の特定ディレクトリを設定($OpenSSL_DIR)。
その配下に RootCA($MyRootCA)と、サーバー証明書を生成する各サーバー用のディレクトリ($ServerCertificates)も作成しておく。
コマンドにするとこんな感じか。

  1. mkdir $OpenSSL_DIR
  2. cd $OpenSSL_DIR
  3. mkdir $MyRootCA

$MyRootCA 作成

/etc/ssl/openssl.cnf が openssl の設定ファイルのようなので、これを予めバックアップしておき、/etc/ssl/openssl.cnf に編集を加えていく。

  1. cd /etc/ssl
  2. cp -p openssl.cnf openssl.cnf.default
  3. vi openssl.cnf
    • [ CA_default ] の dir の値を $MyRootCA のディレクトリ名にする。
    • [ CA_default ] の default_md を sha256 にする。
    • [ req ] の default_bits を 1024 から 2048 へ変更する。
    • [ v3_ca ] の basicConstraints で "basicConstraints = critical,CA:true" のコメントを解除し、"CA:true" をコメントアウト
  4. vi /usr/lib/ssl/misc/CA.sh
    • if [ -z "$CATOP" ] ; then CATOP=./demoCA ; fi の demoCA を $MyRootCA の実際の値にする
    • CADAYS="-days 1095" を "-days 3650" にする(CAの有効期間を10年にする)
    • CA の秘密鍵等にパスフレーズを指定したくないので、newca ブロック内の「echo "Making CA certificate …"」の次行、$REQ のオプションに -nodes を追加
  5. cd $OpenSSL_DIR
  6. /usr/lib/ssl/misc/CA.sh -newca
    1. CA certificate filename (or enter to create) は何もせず Enter
    2. 順次 CA の情報を入力していく。
    3. $OpenSSL_DIR/$MyRootCA/cacert.pem と、$OpenSSL_DIR/$MyRootCA/private/cakey.pem が作成される。

サーバー証明書の作成

  1. cd $OpenSSL_DIR
  2. mkdir -p Servers/$ServerCertificates
  3. /usr/lib/ssl/misc/CA.sh を -newreq か -newreq-nodes で実行(サーバー用の秘密鍵 "newkey.pem" と CSR "newreq.pem" が生成される。パスフレーズをなしにしたい場合は -newreq-nodes を使用する)
  4. /usr/lib/ssl/misc/CA.sh -signサーバー証明書 "newcert.pem" が生成される)
  5. mv newcert.pem Servers/$ServerCertificates
  6. mv newkey.pem Servers/$ServerCertificates
  7. mv newreq.pem Servers/$ServerCertificates

提供されるスクリプトを使用する場合、出力先指定はオリジナルのスクリプトを編集しないといけない感じだが、個人的にはあまりやりたくない。コマンドを一つずつ実行する方法も整理する必要がありそうだ。