How to generate RSA public and private keys with OpenSSL

Before anything, I assume that you already have OpenSSL installed in your PC. In case you don’t and you are a Windows you can download it from this URLs:

  • http://slproweb.com/products/Win32OpenSSL.html
  • http://gnuwin32.sourceforge.net/packages/openssl.htm

I personally used the first one. After you are done with the installation follow this steps:

  1. Open a command line window and run the following command:
    openssl genrsa -out priv1024.pem 1024

    Your console output should look similar to this:

    E:\NodeJS>openssl genrsa -out priv1024.pem 1024
    
    Generating RSA private key, 1024 bit long modulus
    
    .......................++++++
    
    .........++++++
    
    e is 65537 (0x10001)
  2. Now that we have a 1024 bit private key in PEM format we have to extract the public key from it and save it to a different file. For that just run this command:
    openssl rsa -in priv1024.pem -outform PEM -pubout -out pub1024.pem

    Your console output should be similar to this:

    E:\NodeJS>openssl rsa -in priv1024.pem -outform PEM -pubout -out pub1024.pem
    
    writing RSA key

That’s it, now we have a RSA key pair in PEM format ready to be used. Depending on the key size specified, and the resources available on your computer, the generation of a key can take more time. Here is an example of how the files look:

E:\NodeJS>more priv1024.pem
-----BEGIN RSA PRIVATE KEY-----
MIICWgIBAAKBgQC/gvPLdlTe4uwrHzPfj/gTj6QghOL1gC0padG6Qp/totpWIluQ
hgqfR1/X9vNbNxx1N88e1S/i2wtfFxfBZAcayoVOJwsikGWuRb2Z+OZDP2R2Qegh
SE0VBL74RsMpcfSPP9MsJ66ZMEyEFFBAlSvEJgvnpbVQljFj0jgRNA6KTwIDAQAB
An8sIwIM4jitJZ9IUOijnYqO94vb8sRb0C6YXMr5ImG5Ys7vCvwPUtUf4FM2crOj
UhA885/Ie1mN7u2v/KJ875CzNdnf+1YYyuIBwl2fQuAS2vaEDkVqzT0T+4GA9x6j
DCbkOVbtju6zox2sqsr3xugzcDSPVA6UHc3Cm0xoL3j5AkEA5VD8z4F/mZ1/QbpV
LunE1QBqq/myAxvx/LbCw6nkaWBqxOx+PE+OV2Zivad8tDwnxYpjXbnDpnMv6rLU
Ff7qlQJBANXLz+XOuBmU/IA6BVKs8GXkmrDjtGC4KsATHcXRO6FcACMebUcYfYc/
5YizBtR2NxT7BCKYKGM8kZTTSAjjjFMCQD2BjW1yxHDFZ56Phc2BcgPXisT5wh9H
XY50zqSAav1AmSKcc/dlNz6F/bH0vGPzRo+bYK+A5dM9TfrbYDtOFkkCQQDUz5py
wxFIDaBFtvtjb1ef5S0B1LbQ66FKLf0d0obLuHs+eeQGt98DyNue9a1fwQhVLwPP
t6vEFB9JiAIVLwOXAkBneT454XNDIH2+4l5zyDAZCBWDR/mwlKpNv54ORdUZWlxK
5Fun+9bK5NFE5SHj/f8dkMosHPRWg2ZaK/Az7+zJ
-----END RSA PRIVATE KEY-----

E:\NodeJS>more pub1024.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/gvPLdlTe4uwrHzPfj/gTj6Qg
hOL1gC0padG6Qp/totpWIluQhgqfR1/X9vNbNxx1N88e1S/i2wtfFxfBZAcayoVO
JwsikGWuRb2Z+OZDP2R2QeghSE0VBL74RsMpcfSPP9MsJ66ZMEyEFFBAlSvEJgvn
pbVQljFj0jgRNA6KTwIDAQAB
-----END PUBLIC KEY-----

Just for fun I generated a 8192 bit key pair. It took around 10 seconds.

E:\NodeJS>more priv8192.pem
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

E:\NodeJS>more pub8192.pem
-----BEGIN PUBLIC KEY-----
MIIEIjANBgkqhkiG9w0BAQEFAAOCBA8AMIIECgKCBAEArWVyl6FmMZnUz3vzA4Al
SF501WZ6Rs1qB8qmvtfF9ihxr5OMIZhdJnAt7HMk8wn7ZWQwN2xZeUSOYnHuAC39
LvajcsTIJwmluCSuzP33cB4P6uhzSP6Wwf3aaHuuRUt6nw32iRwtSvCnRPI5L74E
2gp2H19fM4Wd9IWwAAjesbN0vNqo7HBUaYOumLQQDEOxKtiUrn/CwE7zABFEdCn4
awTxhhm9CpIjBlcqBCUYMfoMB7SOmOCWLbBkCHoome9WnkwcFcSLMSH+om2Uzjh+
P+lOda+mZpLqcHEiwkPuRTT3UHRps9/yPL52mWcG1933DxD/MMlgQvS/oOHCFWNm
IKp4U0g5pxJtgf0AKpx8Ao/ai4DeM2CwmnrrOUYTnw3roQ1yz3mI5AMfm5vAxOcz
DKSlJUEImQKwknXRXdEbnLfAe+IZDbg0Vk9OFm8Aza32SiMDwrg3A7vWo0O9PMwZ
9IaQ2isah0Db6/WFWuSsUb328OWt56MrBzwBh7ScCTmnXT7py6DJa5xj6s5M6pQX
++0zRjC/n2GF9BsbXtjDQ02FN71LoWHOohO6yixFkLZ2rQJtcMnpCaKz5EI0yTov
Fnn/niR0qSU1E5zEZWK/dzDPOp7afvoqlp2JSges7TWpb+/miEok1z/vzfmZAoY0
UaR2Roe50uo230kMeVJBxEWEeBvhm10rOe8Z3Aj5uTw0OBQC0keSuC/hVAhJD/kI
g+m133Dzj10nEeZx8minm3G3TBPXHKzG8bkTn9L7wh/kciHV12/uI5qXLwEgNwt3
Bh5S5/H33q4KCQXjry72N/0DtmrNopj4YlM6JFZ710jOXT849+LRn9xi0SYApx+p
PsT97KEQIyYP0+RiDB26s+5VvYAY1pkn71dPyooyOq4XuP22+cPHastfmkSa0LYf
0tlSvc/4UO1U0aYZrqTFhO1pcyDxcnaln6JfQO2x1OLkcKogcxAY5VWySrXc2Euq
lsGhrRavveivyBqroB8Bh3fnIlJYJTjki3PyUpNlOW4Glzuat0stMsflL8eHrrwC
Wmtb9StEAZFNLkXVQkX4oK05vpLXgKgw/aIA+YVMs7EUHSKZMbZ8Z46yUp5GZKBQ
p8BLve3/Xh6TdJ7NwIrpNddtJXCiqIuBxpIq1PH9RYKylSPPm3S/e/8P1mZBcr7E
u8yh+6cQr1EZcOA2OJcC0qkZ22I9MOS+eePBXzsHhxS8hkDl9+JR08lUsB91b+/Q
9mQtt+ig2YLSEhQlqQWRoqRzhw7GpFGw8RK/L2oCuCOAJB/S1ubdlvgKs1lzBIoP
333qXNSxdK+7LPxUTNeQg4tN/B1NfbClKDwcEXIFLxHZPwF+g0GGf27gkeJbBvBo
4QIDAQAB
-----END PUBLIC KEY-----

Well, this is the end.

Sources

  • https://developers.yubico.com/PIV/Guides/Generating_keys_using_OpenSSL.html

1 thought on “How to generate RSA public and private keys with OpenSSL

  1. […] To get those you will have use OpenSSL, please take a look at this post How to generate RSA public and private keys with OpenSSL. […]

Leave a Comment

Your email address will not be published. Required fields are marked *