Carpe Diem

備忘録

OpenSSLコマンド備忘録

概要

よく忘れるので備忘録として。

環境

  • macOS v11.2.3
  • OpenSSL v1.1.1

秘密鍵、公開鍵

基本的にgenpkeyで作れるが、RSA、EC系は他のコマンドの方が短い記述で生成できる。

RSA

RSA秘密鍵を生成

$ openssl genrsa -out key.pem 4096

秘密鍵から公開鍵の生成

$ openssl rsa -in key.pem -pubout -out pubkey.pem

ECDSA

ECDSAの秘密鍵を生成

$ openssl ecparam -name prime256v1 -genkey -noout -out key.pem

秘密鍵から公開鍵の生成

$ openssl ec -in key.pem -pubout -out pubkey.pem

選択できる曲線の一覧

$ openssl ecparam -list_curves
  secp112r1 : SECG/WTLS curve over a 112 bit prime field
  secp112r2 : SECG curve over a 112 bit prime field
  secp128r1 : SECG curve over a 128 bit prime field
  secp128r2 : SECG curve over a 128 bit prime field
  secp160k1 : SECG curve over a 160 bit prime field
  secp160r1 : SECG curve over a 160 bit prime field
  secp160r2 : SECG/WTLS curve over a 160 bit prime field
  secp192k1 : SECG curve over a 192 bit prime field
  secp224k1 : SECG curve over a 224 bit prime field
  secp224r1 : NIST/SECG curve over a 224 bit prime field
  ...

EdDSA

EdDSA(ed25519)の秘密鍵を生成
※LibreSSL 2.8.3では対応していなかった

$ openssl genpkey -algorithm ED25519 -out key.pem

秘密鍵から公開鍵の生成

$ openssl pkey -in key.pem -pubout -out pubkey.pem

証明書署名要求(CSR)

/docs/man1.1.1/man1/openssl-req.html

オプション 説明
req 証明書署名要求および証明書生成ユーティリティ
-new 新しく証明書署名要求を作成
-x509 証明書署名要求の代わりに自己証明書を出力
-key 秘密鍵を指定
-sha256 証明書のメッセージダイジェストを作成するためのアルゴリズムを指定
-noout エンコードされたCSRデータを表示しない

req

証明書署名要求(CSR)の作成

$ openssl req -new -sha256 -key key.pem -out server.csr

CSRの内容を確認

$ openssl req -in server.csr -text -noout

CSR作成、自己署名による証明書作成をまとめて実行
自前のルート認証局用意したい時

$ openssl req -new -x509 -key key.pem \
  -days 365 -sha256 -out server.crt

証明書(CRT)

/docs/man1.1.1/man1/openssl-x509.html

オプション 説明
x509 証明書の表示、署名ユーティリティ
-req デフォルトだとinputは証明書だが、これをつけるとinputは証明書署名要求になる
-signkey 自己署名する際の秘密鍵
-pubkey outputがSubjectの公開鍵になる
-CA 署名する認証局の証明書。基本的に-reqと一緒に使う
-CAkey 署名する認証局秘密鍵
-CAcreateserial シリアル番号を自動的に生成する。
発行済みシリアル番号を保持するファイルca.srlが作成される。
-sha256 証明書のメッセージダイジェストを作成するためのアルゴリズムを指定
-noout エンコードされたCRTデータを表示しない

x509

CSR自己署名して証明書を作成

$ openssl x509 -req -in server.csr -signkey key.pem \
  -days 365 -sha256 -out server.crt

証明書の内容を確認

$ openssl x509 -in server.crt -text -noout

証明書から公開鍵を取り出す

$ openssl x509 -in server.crt -pubkey -noout

認証局の証明書&秘密鍵で署名して証明書を作成
※Issuerが認証局になる

$ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 365 -sha256 -out server.crt

参考