OpenSSL 的常用方法

作者: 舌尖上的大胖 | 来源:发表于2017-08-22 01:25 被阅读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
    

    (完)

    相关文章

      网友评论

        本文标题:OpenSSL 的常用方法

        本文链接:https://www.haomeiwen.com/subject/qxrkdxtx.html