概要
よく忘れるので備忘録として。
環境
- macOS v11.2.3
- OpenSSL v1.1.1
秘密鍵、公開鍵
基本的にgenpkey
で作れるが、RSA、EC系は他のコマンドの方が短い記述で生成できる。
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