SSL証明書更新用のCSRをワンコマンドで作る

SSL証明書の更新がメンドイので可能な限り楽にCSRを作るためのスクリプトです。

  • パスワードのファイル
  • CSR
  • キー
  • ノーパスのキー

が作成されます。

作業ディレクトリを/tmp/ssl/とします

cd /tmp/ssl/
mkdir files
mkdir scripts; cd $_
vim createcsr.sh
#!/bin/sh

domain=$1

if [ "$domain" = "" ]; then
  echo "usage: $0 {domain}"
  exit 1
fi

param=`openssl s_client -connect ${domain}:443 -showcerts < /dev/null 2>/dev/null | grep subject | sed -e 's/subject=//g'`

if [ "$param" = "" ]; then
  echo "can\'t get ssl params"
  exit 1
fi

HOME=/tmp/ssl
BASE=${HOME}/files/${domain}

mkdir -p ${BASE}
mkpasswd -l 12 > ${BASE}/${domain}.pass
openssl genrsa -des3 -passout file:${BASE}/${domain}.pass -out ${BASE}/${domain}.key 2048 -sha256
openssl req -batch -new -sha256 -key ${BASE}/${domain}.key -out ${BASE}/${domain}.csr -passin file:${BASE}/${domain}.pass -subj "$param"
openssl rsa -in ${BASE}/${domain}.key -passin file:${BASE}/${domain}.pass -out ${BASE}/${domain}.key.nopass

キーの作成のところで -passout になっているのは誤植ではありません。コマンドの流れからいって -passin だろと思うのですが逆にpassinがありません。opensslが改修されればpassinになるのかもしれませんね。

csr確認は

openssl req -text -noout -in yourfilename.csr

でおこないます。