openssl实现公私钥证书⽣成以及转换
1 openssl简介
1.1 概述
  OpenSSL 是⼀个安全层密码库,囊括主要的、常⽤的和证书封装管理功能及协议,并提供丰富的应⽤程序供测试或其它⽬的使⽤。
1.2 背景技术
  是Secure Sockets Layer()的缩写,可以在Internet上提供秘密性传输。公司在推出第⼀个的同时,提出了SSL协议标准。其⽬标是保证两个应⽤间通信的保密性和可靠性,可在服务器端和⽤户端同时实现⽀持。已经成为上保密通讯的⼯业标准。
  SSL能使⽤户/服务器应⽤之间的通信不被攻击者窃听,并且始终对服务器进⾏认证,还可选择对⽤户进⾏认证。SSL协议要求建⽴在可靠的协议()之上。SSL协议的优势在于它是与协议独⽴⽆关的,⾼层的应⽤层协议(例如:,,等)能透明地建⽴于SSL协议之上。SSL协议在应⽤层协议通信之前就已经完成、通信的协商及服务器认证⼯作。在此之后应⽤层协议所传送的数据都会被加密,从⽽保证通信的私密性。
1.3 安全信道特征
数据保密性
  信息加密就是把明码的输⼊⽂件⽤转换成加密的⽂件以实现数据的保密。加密的过程需要⽤到来加密数据然后再解密。没有了密钥,就⽆法解开加密的数据。之后,只有密钥要⽤⼀个安全的⽅法传送。加密过的数据可以公开地传送。
数据完整性
  加密也能保证数据的⼀致性。例如:消息验证码(),能够校验⽤户提供的加密信息,接收者可以⽤MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
安全验证
  加密的另外⼀个⽤途是⽤来作为个⼈的标识,⽤户的密钥可以作为他的安全验证的标识。SSL是利⽤的()来作为⽤户端与服务器端在传送机密资料时的加密通讯协定。
  OpenSSL包含⼀个命令⾏⼯具⽤来完成OpenSSL库中的所有功能,更好的是,它可能已经安装到你的系统中了。
  OpenSSL是⼀个强⼤的安全套接字层密码库,使⽤它加密HTTPS,OpenSSH使⽤它加密,但是,你不应该只将其作为⼀个库来使⽤,它还是⼀个多⽤途的、跨平台的密码⼯具。[1]
1.4 功能
  OpenSSL整个软件包⼤概可以分成三个主要的功能部分:SSL协议库、应⽤程序以及库。OpenSSL的⽬录结构⾃然也是围绕这三个功能部分进⾏规划的。
  作为⼀个基于密码学的安全开发包,OpenSSL提供的功能相当强⼤和全⾯,囊括了主要的密码算法、常⽤的和证书封装管理功能以及SSL协议,并提供了丰富的应⽤程序供测试或其它⽬的使⽤。
1.5  密码算法
  和证书管理是的⼀个重要组成部分,OpenSSL为之提供了丰富的功能,⽀持多种标准。
  ⾸先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、、、证书请求以及CRL等的DER、PEM和BASE64的编解码功能。OpenSSL提供了产⽣各种对和对称密钥的⽅法、函数和应⽤程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进⾏存储和分发。
  在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了⼀种⽂本数据库,⽀持证书的管理功能,包括证书产⽣、请求产⽣、证书签发、吊销和验证等功能。
  事实上,OpenSSL提供的CA应⽤程序就是⼀个⼩型的证书管理中⼼(CA),实现了证书签发的整个流程和证书管理的⼤部分机制。
对称加密
  OpenSSL⼀共提供了8种对称加密算法,其中7种是分组加密算法,仅有的⼀种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都⽀持电⼦密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常⽤的加密模式。其中,AES使⽤的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使⽤的则是64位。事实上,DES算法⾥⾯不仅仅是常⽤的DES算法,还⽀持三个和两个密钥3DES算法。
⾮对称加密
  OpenSSL⼀共实现了4种⾮对称,包括算法、算法、和(EC)。DH算法⼀般⽤于交换。RSA算法既可以⽤于密钥交换,也可以⽤于,当然,如果你能够忍受其缓慢的速度,那么也可以⽤于。DSA算法则⼀般只⽤于数字签名。
信息摘要
  OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和。SHA算法事实上包括了SHA和SHA1两种信息摘
要算法。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
2 openssl常⽤命令
2.1 OpenSSl命令总览
语法格式:
  openssl command [ command_opts ] [ command_args ]
常⽤command:
  version    ⽤于查看版本信息
  enc        ⽤于加解密
  ciphers    列出加密套件
  genrsa    ⽤于⽣成私钥
  rsa        RSA密钥管理(例如:从私钥中提取公钥)
  req        ⽣成证书签名请求(CSR)
  crl        证书吊销列表(CRL)管理
  ca        CA管理(例如对证书进⾏签名)
  dgst      ⽣成信息摘要
  rsautl    ⽤于完成RSA签名、验证、加密和解密功能
  passwd    ⽣成散列密码
  rand      ⽣成伪随机数
  speed      ⽤于测试加解密速度
  s_client  通⽤的SSL/TLS客户端测试⼯具
  X509      X.509证书管理
  verify      X.509证书验证
  pkcs7      PKCS#7协议数据管理
2.2 应⽤
2.2.1 ⽣成公私钥范例⼀
(1)客户证书密钥构建(默认为私钥密钥):采⽤openssl的desc3加密算法来创建RSA密钥,其中⽣成的des3密钥长度为1024  # genrsa -des3 -out private_test.key 1024
(2)⽣成证书请求,通过私钥和配置⽂件⽣成公钥,公钥有效期为10年(3650为天数)
  # req -new -x509 -key private_test.key -days 3650 -out -config D:\software\openssl\openssl\opensslf
(3)格式转换:转换成⼀个格式编码为pkcs12的私钥
  #  pkcs12 -export -name epayment2017 -in -inkey private_test.key -out private_test.pfx
(4)从已⽣成的商户证书中提取公钥串
  # x509 -outform PEM -in -pubkey -out server.pubkey
2.2.2 ⽣成公钥和pkcs8格式私钥
(1)⽣成rsa原始私钥
# genrsa -out rsa_private_key.pem 1024
  此时,我们可以在bin ⽂件夹中看到⼀个⽂件名为rsa_private_key.pem 的⽂件,⽤记事本⽅式打开它,可以看到-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATEKEY-----结尾的没有换⾏的字符串,这个就是原始的私钥。
(2)RSA 私钥转换成PKCS8格式
# pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -ouform PEM -nocrypt
(3)⽣成公钥
# rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
3 证书格式转换
3.1 证书转换
# PKCS转换为PEM
> openssl pkcs12 -in myserver.pfx -out myserver.pem -nodes
# PEM转换为DER
> openssl x509 -outform der -in myserver.pem -out myserver.[der|crt]
# PEM提取KEY
> openssl RSA -in myserver.pem -out myserver.key
# DER转换为PEM
> openssl x509 -inform der -in myserver.[cer|crt] -out myserver.pem
# PEM转换为PKCS
> openssl pkcs12 -export -inkey myserver.key -in myserver.pem  -out myserver.pfx -
> openssl pkcs12 -export -site.key -site.pem -passin pass:123456 -passout pass:123456 -site.p12
3.2 查看证书内容
# 查看KEY信息
$ openssl rsa -noout -text -in myserver.key
# 查看CSR信息
$ openssl req -noout -text -in myserver.csr
# 查看证书信息
$ openssl x509 -noout -text -in ca.pem
# 查看证书公钥对应的RSA模
$ openssl x509 -in mysite.pem -noout -modulus
# 查看证书subject项
免费ssl证书永久生成$ openssl x509 -in mysite.pem -noout -subject -nameopt multiline
# 查看证书issuer项
$ openssl x509 -in mysite.pem -noout -issuer -nameopt multiline
# 检查证书⽤途
$ openssl x509 -purpose -noout -in 192.168.
4 OpenSSL下载⽅式(⼆选⼀)
(1)双击bin⽬录下的执⾏⽂件
参考: