OpenSSL 使用 RSA

802 阅读2分钟

openssl使用RSA

OpenSSL中有RSA的一些常用指令,使用它就可以玩转RSA。 其实主要用到三个命令:

genrsa: 生成并输入一个RSA密匙
rsautl: 使用RSA密匙进行加密,解密,签名和验证等运算
rsa:   处理RSA密匙的格式转换等问题
  • 使用genrsa生成私钥
长度为1024 bit
openssl genrsa -out private.pem 1024

  • 从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem

此时生成了两个文件 private.pem public.pem

  • 将私钥转换为明文
openssl rsa -in private.pem -text -out private.txt
  • 通过公钥加密数据,私钥解密数据
加密:openssl rsautl -encrypt -in msg.txt -inkey public.pem -pubin -out enc.txt
解密:openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt

  • 通过私钥加密数据,公钥解密数据
加密:openssl rsautl -sign -in msg.txt -inkey private.pem -out enc.txt
解密:openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt

HTTPS证书的生成步骤

使用https的同志都知道,https是加密传输数据的。那么就需要一个加密证书,下面我们来看看证书的生成步骤。

// 从刚才生成的证书中提取一个csr(请求证书文件)文件。
openssl req -new -key private.pem -out rsacert.csr

当你输入这行命令时会提示你填入一下信息:

Country Name (2 letter code): // 城市名称 
State or Province Name (full name): // 省名称
Locality Name (eg, city): // 城市名称
Organization Name (eg, company): // 公司名称
Organizational Unit Name (eg, section): // 组织名称
Common Name (eg, fully qualified host name):// host name
Email Address []: // email
A challenge password []: // 密码

这样csr就生成了。就可以那这个csr去请求证书了。就可以去请求签名。 实际上,证书颁发机构也是这样做的,只不过他们具有权威性。在1983年9月12日麻省理工学院在美国为RSA算法申请了专利,所以我们使用是需要付费的,实际上我们拿着csr就是权威机构请求证书了。那么具体是怎么做的了。

// 拿着 rsacert.csr 签名一个 rsacert.crt 证书
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

https协议就是使用 rsacert.crt 证书来加密。 但是 rsacert.crt 是不能直接拿来使用的,最终还是需要一次转换;

openssl x509 -outform der -in rsacert.crt -out rsacert.der
rsacert.der: 文件主要包含一个公钥和一些信息

最终需要生产一个 p12,是 rsacert.der 对应的私钥

openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
输入两次密码,就生成了p12

然后我们就可以用 p12,来做请求了。