添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Generating EC keys with OpenSSL

Tips on how to generate EC keys with openssl command line tool.

When creating a JWT (JSON Web Token), there are many algorithms for signing the signature. For digital signatures using the ECDSA algorithm, you need an EC key to sign the signature. Here are the algorithms defined by RFC7518 section 3.4 that MUST use an EC key:

  • ES256 : ECDSA using P-256 and SHA-256
  • ES384 : ECDSA using P-384 and SHA-384
  • ES512 : ECDSA using P-521 and SHA-512
  • It is very easy to generate an EC key using openssl . But if you are not familiar with openssl , here are some commands that you can just copy and use. I assume you have openssl installed.

    You can use joserfc to generate EC keys: https://jose.authlib.org/en/dev/recipes/openssl/

    EC key with crv P-256

    This key can be used for the alg: ES256 , the commands below will generate the private and public keys:

    # generate a private key
    openssl ecparam -name prime256v1 -genkey -noout -out ec-p256-private.pem
    # extract the public key
    openssl ec -in ec-p256-private.pem -pubout -out ec-p256-public.pem

    Note: OpenSSL encourages using prime256v1 instead of secp256r1 .

    EC key with crv P-384

    This key can be used for alg: ES384 :

    # generate a private key
    openssl ecparam -name secp384r1 -genkey -noout -out ec-p384-private.pem
    # extract the public key
    openssl ec -in ec-p384-private.pem -pubout -out ec-p384-public.pem

    EC key with crv P-512

    This key can be used for alg: ES512 :

    # generate a private key
    openssl ecparam -name secp521r1 -genkey -noout -out ec-p512-private.pem
    # extract the public key
    openssl ec -in ec-p512-private.pem -pubout -out ec-p512-public.pem

    Note: It is secp521r1 , not secp512r1 . But the "crv" value in EC Key is "P-512" .

    EC key with crv secp256k1

    This key is used for ECDSA Signature with secp256k1 Curve defined by RFC8812.

  • ES256K : ECDSA using secp256k1 and SHA-256
  • # generate a private key
    openssl ecparam -name secp256k1 -genkey -noout -out ec-secp256k1-private.pem
    # extract the public key
    openssl ec -in ec-secp256k1-private.pem -pubout -out ec-secp256k1-public.pem