OpenSSL リファレンス

Takami Torao #openssl #ECDSA #X509
  • このエントリーをはてなブックマークに追加

複雑な OpenSSL コマンドを目的別にまとめる。

SPEC # 説明 拡張子
PKCS #7 証明書と暗号化された追加データ
PKCS #8 秘密鍵を格納するための標準的な構文。複数の暗号をサポートする PKCS #5 標準を使用しパスフレーズを用いて暗号化することができる。通常 PEM Base64 エンコードで交換される。 .key, .p8
PKCS #10 Certificate Signing Request (CSR)。
PKCS #12 複数の暗号化オブジェクトを一つのファイルに格納するためのコンテナフォーマット。一般的には秘密鍵を X.509 証明書にバンドルするためや、証明書チェーンのすべての証明書をバンドルするために使用される。暗号化と署名が可能。 .p12, .pfx

秘密鍵/キーペアの作成

ECDSA 鍵の作成

-name は楕円曲線暗号のカーブ。openssl ecparam -list_curves で利用可能なカーブを参照できる。

openssl ecparam -out key.pem -name prime256v1 -genkey
PEM 形式の秘密鍵を PKCS#8 に変換

Java の PKCS8EncodedKeySpec で読み込めるように DER を指定している。-nocrypt オプションを付けると暗号化 (パスフレーズ) なしで変換される。

openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -out key.p8

証明書の作成

CSR の作成

openssl req -new -key key.pem -sha256 -subj "/C=JP/ST=Tokyo/L=Sumida/O=MyCompany Ltd./OU=Dev 1 Division/CN=www.mycompany.com" -out csr.pem

CA秘密鍵 cakey.pem と CA 証明書 cacert.pem を使用して CSR csr.pem に署名し証明書 cert.pem を作成する。署名時には CA の設定が必要。

openssl ca -keyfile cakey.pem -cert cacert.pem -in csr.pem -out cert.pem -days 3650 -config <(cat openssl.cnf <(printf "\n[usr_cert]\nsubjectAltName=DNS:example.com,DNS:www.example.com"))
ECDSA 秘密鍵と自己署名証明書を一度に作成

openssl req \
  -x509 \
  -sha256 \
  -nodes \
  -days 365 \
  -newkey ec:<(openssl ecparam -name prime256v1) \
  -subj "/C=JP/ST=Tokyo/L=Sumida/O=MyCompany Ltd./OU=Dev 1 Division/CN=www.mycompany.com" \
  -keyout key.pem \
  -out cert.pem

フォーマット変換

PEM/DER 形式の証明書を DER/PEM 形式に変換

PEM 形式と DER 形式の変換は -inform, -outform を指定するだけで良い。

openssl x509 -inform DER -outform PEM -in input_file.der -out output_file.pem
PEM/DER 形式の証明書をテキストで表示

-informDER または PEM を指定する。

openssl x509 -inform DER -in input_file.der -text -noout
PEM 形式の証明書を PKCS#7 に変換

PKCS#7 は中間証明書やルート証明書を含む証明書チェーンと CRL (証明書取り消しリスト) を含む事ができるファイル形式。単に証明書の配布形式として使用するだけであれば CRL は存在しないので -nocrl を指定する。-certfile を複数指定して一つ以上の証明書を含めることができる。

openssl crl2pkcs7 -certfile cert.pem -out cert.p7b -nocrl
PEM 形式の秘密鍵と証明書を PKCS#12 に変換
openssl pkcs12 -export -inkey key.pem -in cert.pem -out cert_with_key.p12
PKCS#12 から PEM 形式の秘密鍵を取り出す
openssl pkcs12 -in server.pk12 -out key.pem -nocerts -nodes
PKCS#12 から PEM 形式の証明書を取り出す
openssl pkcs12 -in server.pk12 -out cert.pem -nokeys