opensslコマンドで個人的によく使うまとめ
個人的によく使うOpenSSLのコマンドをまとめてみましたよ!
証明書関係、PKCS#8、PKCS#12あたりですが間違ってたらすまん。
証明書を適当に作る。
鍵を作って
openssl genrsa -out private.key 2048
証明書署名要求を作って
openssl req -new -sha256 -subj /C=JP/CN=sample.com -key private.key -out csr.pem
適当なCAが署名する
openssl ca -md sha256 -batch -policy policy_anything -in csr.pem -keyfile cakey.key -cert cacert.cer -out certificate.cer
opensslではだいたいPEMで扱ってるので、DERが欲しいときはこんな感じでフォーマットを指定する。自動では認識してくれない。
PEMからDERへ変換。
openssl x509 -inform PEM -in certificate.cer -outform DER -out certificate.der
DERからPEMに変換。
openssl x509 -inform DER -in certificate.der -outform PEM -out certificate.pem
ちなみに鍵だとこんな感じで変換。
openssl rsa -in -inform PEM pricate.key -outform DER -out private.der
openssl rsa -in -inform DER private.der -outform PEM -out private.key
証明書の情報を参照するには。
openssl x509 -in certificate.cer
multi-valued RDNを表示したい人もいるだろう。opensslで作るのは面倒で別の機会に。
-nameoptを付けると"+"で追加表示される。
openssl x509 -nameopt rfc2253 -in certificate.cer
秘密鍵にパスワードを設定して暗号化する。(今回はAES256)
openssl rsa -aes256 -in private.key -out private_enc.key -passout pass:password
パスワードが設定された鍵を解除する。
openssl rsa -in private_enc.key -out private.key -passout pass:password
秘密鍵から公開鍵を取り出す。
openssl rsa -pubout -in private.key -out public.pem
PKCS#8ファイルの作成
まず格納する鍵を作成しましょうか。
openssl genrsa -out privatekey.key 2048
出力はPEMでもDERでも
openssl pkcs8 -v1 PBE-SHA1-3DES -topk8 -in private.key -inform PEM -out pkcs8.pem -outform PEM -passout pass:password
暗号化したくなかったら
openssl pkcs8 -topk8 -in privatekey.pem -inform PEM -out pkcs8.pem -outform PEM -noiter -nocrypt
-v2オプションでAESなんかでも暗号・完全性のチェックが可能。
openssl pkcs8 -in privatekey.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -out pkcs8.pem
PKCS#12の作成
鍵を作る。
openssl genrsa -out private.key 2048
証明書署名要求を作って
openssl req -new -sha256 -subj /C=JP/CN=sample.com -key private.key -out csr.pem
適当なCAが署名する
openssl ca -md sha256 -batch -policy policy_anything -in csr.pem -keyfile cakey.key -cert cacert.cer -out certificate.cer
private.key 秘密鍵
certificate.cer 秘密鍵に対応する証明書
cacert.cer 上記証明書を検証できる証明書で、さらに中間層の証明書が必要ならエディタで追加する。
暗号化と完全性にそれぞれパスワードを設定できたり。まぁ何通りか作ってみる。
完全性と暗号化が同じ1つのパスワードの場合(デフォルトはRC2なのでちょっと他の選択肢)
AESとかしたくてもPKCS#5に無いので不可?
openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -password pass:password -in certificate.cer -inkey private.key -certfile cacert.cer -out pkcs12.p12
秘密鍵に対応する証明書以外の証明書は、使う人が既に持っていれば別に設定しなくても良い。
openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -password pass:password -in certificate.cer -inkey private.key -out pkcs12.p12
生成されたPKCS#12ファイルの確認
openssl pkcs12 -info -password pass:password -n pkcs12.p12
とりあえず、作ったファイルから鍵と証明書を抜き出してみよう。
証明書
openssl pkcs12 -password pass:password -nokeys -in pkcs12.p12 -out certificate_out.pem
秘密鍵
openssl pkcs12 -password pass:password -nodes -nocerts -in pkcs12.p12 -out privatekey_out.pem
完全性のチェックだけする
openssl pkcs12 -in $PKCS12 -password pass:password -nodes -noout
続いて、いろいろなパターンで。
完全性だけの場合
openssl pkcs12 -export -nodes -certpbe PBE-SHA1-3DES -password pass:password -in certificate.pem -inkey private.key -out pkcs12.p12
暗号化だけの場合
openssl pkcs12 -export -noiter -keypbe PBE-SHA1-3DES -password pass:password -in certificate.pem -inkey private.key -out pkcs12.p12
暗号化も完全性も設定しない場合
openssl pkcs12 -export -noiter -nodes -in certificate.pem -inkey private.key -out pkcs12.p12 -password pass:password
暗号化と完全性のパスワードが違う場合。-twopassを加えるのだがこれは-passwordオプションでは同時に設定できないので使わず。
openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -in certificate.pem -inkey private.key -out pkcs12.p12 -twopass