よくある秘密鍵生成のコマンドまとめ
なお、OpenSSLのコマンドの使い方はサブコマンドのmanページを見るのが手っ取り早いです。
秘密鍵・公開鍵関連
パスなし秘密鍵を作成
$ openssl genrsa 2048 -out private_key_nopass.pem
パス有り(暗号化)秘密鍵を作成
$ openssl genrsa 2048 -aes256 -out private_key.pem
秘密鍵のパスワード(暗号化)の解除
$ openssl rsa -in private_key.pem -out private_key_nopass.pem
秘密鍵のパスワードの変更
$ openssl rsa -in private_key.pem -out private_key.pem -aes256
秘密鍵から公開鍵を作成する
$ openssl rsa -in private_key.pem -pubout -out public_key.pem
サーバー証明書関連
CSRを作成する
$ openssl req -new -key private_key.pem -out server.csr
CSRの中身を確認したい
$ openssl req -text -in server.csr
秘密鍵とCSRを一括で作成したい
$ openssl req -out server.csr -new -newkey rsa:2048 \
-nodes -keyout private_key.pem
秘密鍵と自己署名証明書を一括で作成したい
$ openssl req -x509 -sha256 -nodes -days 365 \
-newkey rsa:2048 -keyout private_key.pem -out server.crt
CSRから自己署名証明書を作りたい
$ openssl x509 -days 365 -req -signkey private_key.pem \
-in server.csr -out server.crt
電子署名関連
電子署名の作成
$ openssl dgst -sha256 -sign private_key.pem -binary target.txt | base64
$ echo -n "{payload}" | openssl dgst -sha256 -sign private_key.pem | base64
$ echo -n "{payload}" | openssl dgst -sha256 -sign private_key.pem -binary > {signature_file}
署名の検証(hoge.sigはバイナリ形式のSignature)
$ echo -n "{payload}" | openssl dgst -verify public_key.pem \
-sha256 -signature {signature_file}
JWTの作成
header=`echo -n '{"alg":"RS256","typ":"JWT"}' | base64`
payload=`echo -n '{"aud":"mobile","exp":1470646848,"iss":"token.service","sub":"dghubble"}' | base64`
signature=`echo -n $header.$payload | openssl dgst -sha256 -sign private_key_nopass2.pem -binary | base64`
echo $header.$payload.$signature