仕事で電子署名をやることがあり、学んだことをまとめたかったので記事を作りました。
OpenSSLのバージョンは 1.0.2a と古めです。。。
基本のコマンド
openssl ecparam -genkey -name prime256v1 -out keypair.pem
-genkeyが鍵生成のオプションです。
-outは出力ファイル名です。
-nameでは楕円曲線の種類を指定します。使える楕円曲線の種類は以下のコマンドで調べることができます。
openssl ecparam -list_curves
鍵ファイルの形式(PEMとDER)
「基本コマンド」では、署名(秘密)鍵と、検証(公開)鍵のペアをPEM形式で生成します。
PEM形式とは
任意の証明書、鍵をbase64でエンコードして以下のようにBEGIN/END行で挟んでつなげたテキストファイルです。-----BEGIN EC PRIVATE KEY-----
鍵ファイルのbase64エンコード
-----END EC PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
証明書ファイルのbase64エンコード
-----END CERTIFICATE-----
base64エンコードとはバイナリを6bitずつに区切り、6bitデータを英数字や一部の記号に置き換えた形式になります。
以下のページにわかりやすくまとまっていました。
オプションを使うとこの鍵をPEM形式でなく、DER形式で出力することもできます。
DER形式とは
バイナリデータで、ASN.1というデータ構造によって記述されています。 ASN.1についてはこちら、
DER形式の鍵を生成するときは、-outform DER をコマンドに追加します。
openssl ecparam -genkey -name prime256v1 -outform DER -out keypair.der
DER形式ですと、秘密鍵、公開鍵にわけるコマンドがなぜかうまくいかないので、
基本はPEM形式の鍵を生成して、必要になったら、DERに変換するのがよさそうです。