数字证书及加解密

OpenSSL 的常用方法

2017-08-22  本文已影响85人  舌尖上的大胖

OpenSSL 的常用方法

一、总览

# 生成密钥
$ openssl genrsa ...

# 密钥相关操作,如:查看、去掉密码等
$ openssl rsa ...

# “签名请求证书”相关操作,如:生成、查看等
$ openssl req ...

# “证书”相关操作,如:生成、查看等
$ openssl x509 ...


# 计算哈希值
$ openssl md5 ...
$ openssl sha1 ...

二、常用场景

1、创建密钥对

# 创建私钥
$ openssl genrsa -out rsa_1024_priv.pem 1024

# 根据私钥得到公钥
$ openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem

2、自签名

# 1.生成私钥
$ openssl genrsa -des3 -out server.key 1024

# 2.从秘钥中删除 Passphrase
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key

# 3.生成 CSR (Certificate Signing Request)
$ openssl req -new -key server.key -out server.csr

# 4.生成自签名证书
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

3、私有 CA 签名

# 1.创建 CA 私钥
$ openssl genrsa -des3 -out ca.key 4096

# 2.生成 CA 的自签名证书
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# 3.生成需要颁发证书的私钥
$ openssl genrsa -des3 -out server.key 4096

# 4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name
$ openssl req -new -key server.key -out server.csr

# 5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名
$ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

4、苹果推送证书相关操作

(1)创建申请证书 CSR
(2)然后生成证书并下载,拿到 .cer,并将 .cer 导入 Keychain
(3)从 Keychain 中,把证书及其私钥分别导出为 cert.p12key.p12
(4)使用 OpenSSL 操作

# 从 p12 格式证书中提取证书,不包含私钥,并输出为 pem 格式
$ openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12

# 从 p12 格式私钥中,提取私钥,不包含证书,并输出为 pem 格式
$ openssl pkcs12 -nocerts -out key.pem -in key.p12

# 去掉私钥密码
$ openssl rsa -in key.pem -out key.unencrypted.pem

# 将 pem 格式的 证书 和 未加密私钥 拼接成一个新的 pem
$ cat cert.pem key.unencrypted.pem > ck.pem

5、计算文件哈希值

# 计算文件 MD5 值
$ openssl md5 myfile.txt

# 计算文件 SHA1 值
$ openssl sha1 myfile.txt

# 计算文件 SHA256 值
$ openssl sha1 -sha256 myfile.txt

6、证书校验

验证一个证书是否是某一个 CA 签发,文件格式必须为 PEM

# 验证一个证书是否是某一个CA签发,文件格式必须为 PEM
$ openssl verify -CAfile cafile.pem apache.crt

7、模拟客户端访问

(1)验证服务器是否使用合法 CA 颁发的 HTTPS 证书
# 模拟一个 ssl 客户端访问 ssl 服务器
$ openssl s_client -connect 192.168.20.51:443
(2)验证服务器是否使用自签名 CA 颁发的 HTTPS 证书
# 模拟一个 ssl 客户端访问 ssl 服务器,看证书是否 ca.crt 签发
$ openssl s_client -connect test.com:28082 -CAfile ca.crt
(3)双向 HTTPS 验证

启用双向 HTTPS 验证时,通过此方法指定客户端证书

# 如果服务端要求客户端提供证书  则在加上 -cert 和-key参数 比如
$ openssl s_client -connect 192.168.20.51:443 -cert client.crt -key client.key

三、格式转换

1、x509pfx

$ openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

2、PKCS#12PEM 的相互转换

# 从 cert.p12 中提取 私钥,不包含证书,私钥不加密,输出为 PEM 格式
$ openssl pkcs12 -nocerts -nodes -in cert.p12 -out privatekey.pem

# 从 cert.p12 中,只输出 client 证书,不输出私钥,输出为 PEM 格式
$ openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem

# 将密钥与证书合成为 cert.p12
$ openssl pkcs12 -export -in cert.pem -out cert.p12 -inkey key.pem

PFX 格式文件中提取私钥格式文件(.key):

$ openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key

3、DERPEM 的相互转化

-outform -inform 指定 DER 还是 PEM 格式。例如:

# PEM 转为 DER
$ openssl x509 -in cert.pem -inform PEM -out cert.cer -outform DER

# DER 转为 PEM
$ openssl x509 -in cert.cer -inform DER -out cert.pem -outform PEM

四、其他

查看信息

# 查看私钥信息
$ openssl rsa -noout -text -in server.key
# 查看签名请求信息
$ openssl req -noout -text -in server.csr
# 查看ca的私钥信息
$ openssl rsa -noout -text -in ca.key
# 查看证书信息
$ openssl x509 -noout -text -in ca.crt
# 查看一个证书吊销列表信息
$ openssl crl -text -in   xx.crl
# 查看一个证书的额外信息
$ openssl x509 -purpose -in cacert.pem
# 查看一个公钥的信息
$ openssl rsa -noout -text -pubin -in apache.pub

(完)

上一篇下一篇

猜你喜欢

热点阅读