環境
CentOS7.6に付属のopenssl 1.0.2k。
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
秘密鍵
テキスト(pem)
$ openssl genrsa -out private_key.pem 2048
Generating RSA private key, 2048 bit long modulus
.......+++
.............................................+++
e is 65537 (0x10001)
バイナリ(der)
$ openssl pkcs8 -in private_key.pem -topk8 -nocrypt -outform DER -out private_key.der
公開鍵
テキスト(pem)
$ openssl rsa -in private_key.pem -pubout -outform pem -out public_key.pem
writing RSA key
バイナリ(der)
$ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der
writing RSA key
まとめ
JavascriptはPEMで読み取る契機が多い、JavaはDERで読み込む契機が多い、とか言語によって読み込みやすいフォーマットが違うので予めテキスト、バイナリ両方のフォーマットで作っておくと検証プログラムを書く際に「あれ、opensslのオプション何だっけ」と思い出す面倒が無くなります。