macOS 生成 RSA 公钥和私钥

如果你没有安装 openssl,请先使用 brew 安装它。

生成 RSA 私钥

在 macOS 终端输入下面命令,会生成1024位的私钥,如下:

1
openssl genrsa -out rsa_private.pem 1024

执行成功后,在当前目录会生成 rsa_private.pem 文件了。

注意:这里生成的是 PKCS1 格式的文件,也称之为传统的私钥格式。

生成 RSA 公钥

得到私钥后,执行如下命令可以得到公钥,命令如下:

1
openssl rsa -in rsa_private.pem -out rsa_public.pem -pubout

执行成功后,在当前目录会生成 rsa_public.pem 的文件,这个就是公钥。

格式转换

有些后端服务需要 PKCS8 格式的密钥,可以使用 openssl 工具把 PKCS1PKCS8 进行互转。

PKCS 全称是 Public-Key Cryptography Standards,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准。

把 RSA 私钥转 PKCS1 转换为 PKCS8 格式,执行如下:

1
openssl pkcs8 -topk8 -inform PEM -in rsa_private.pem -outform PEM -nocrypt -out rsa_private_pkcs8.pem

把 RSA 私钥 PKCS8 格式转换为 PKCS1 格式,执行如下:

1
openssl rsa -in rsa_private_pkcs8.pem -out pkcs1.pem

以上生成的 RSA(pem) 文件,可以使用 vim、vscode 等文本编辑器打开查看。

无论是 PKCS1 还是 PKCS8,它们都是 PEM 编码存储的格式。

PEM 格式

PEM 格式既是对 DER 编码转码为 Base64 字符格式,通过解码,将会还原为 DER 格式。即 PEM 是建立在 DER 编码之上的一种格式。

总之,PEM 是明文格式,可以包含证书或者是密钥,其内容通常是以类似 —–BEGIN …—– 开头,以 —–END …—– 为结尾的这样的格式,如下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDX+VXh+9zZBC3jRLcLyGGygb/vuiQj13x9ElH9pQmUg29UJ0q1
hcSFuoKmt4id8jyj82fI2PMISzoGucqQFm9HXIV65UcgeUx7REDhgZOBmSCWZ2lW
e2Fnf/htyiy9YVEN4jL7H+b67cIcEDHgYZLtPvSZgyr0UyOMC+E40kTcnQIDAQAB
AoGBAKKsYD7l6VPgrPuY31LVrJi62ComB2Cjx1WhffZR3+RoF2vImNtkB0E+2Xff
l9x3/6ry1IMove3KTzadrHBZJZi1Y6lmHE95uv0O4p16ETnqvKzO8MkcH3qVQe1Z
EyNd/wXr4A8DW3ZlNP/QIPOgzK949yTiP53wapiRwExEf7nhAkEA7CbbdoslRzhQ
9YY1Sdbmc7NHpZdKhkgZwOVJZBoRwfHtSnFcpQUlOzLGCOxP+tGn5mpzhmpDFeUR
bv7mgaQvtQJBAOogUtiJbffk0p3uu7r5nCBmC6BqbG8yVqBVk+r/gS5iHBeBQVyp
FGYYLPQ9daHWluNku07MhqarPcXytEk7ekkCQDBjofK/fmsCkixNTNwNiflJUiVO
W/n6CjTphslZQhIGNb5cTkSOMlvYApZPffACR+pCA9wWKBrzbkgVOTx1XUUCQQDE
KJLg47wkLy6brhLss6ewqW7iV3hEfhuAOFM3WB1mvEKnGt+lf/AcXfMEK54sGzvO
h2475jaG3ABkoiWVGeUpAkAgckc/Pf7KVRF/mDVruMJBbJLYL4H4s78nssFQ4d9V
yXKsIM/AHUxZ5ZKiC7vtEtaGrTLAiuIuQZzBgGpSHX/e
-----END RSA PRIVATE KEY-----

以下是证书文件名称,来自维基百科 X.509 的截图。


要始终保持学习的激情~

坚持原创技术分享!