OpenSSL リファレンス
複雑な 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
を使用して CSRcsr.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 形式の証明書をテキストで表示
-
-inform
にDER
または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