zoukankan      html  css  js  c++  java
  • openssl实现公私钥证书生成以及转换

    1 openssl简介

    1.1 概述

      OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

    1.2 背景技术

      SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
      SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTPFTPTELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

    1.3 安全信道特征

    数据保密性
      信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。
    数据完整性
      加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
    安全验证
      加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥加密技术RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
      OpenSSL包含一个命令行工具用来完成OpenSSL库中的所有功能,更好的是,它可能已经安装到你的系统中了。
      OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。[1] 

    1.4 功能

      OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
      作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
     

    1.5  密码算法

      密钥和证书管理是PKI的一个重要组成部分,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种非对称加密算法,包括DH算法、RSA算法、DSA算法椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

    信息摘要

      OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。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 public_test.crt -config D:softwareopensslopensslopenssl.cnf

    (3)格式转换:转换成一个格式编码为pkcs12的私钥

      #  pkcs12 -export -name epayment2017 -in public_test.crt -inkey private_test.key -out private_test.pfx

    (4)从已生成的商户证书中提取公钥串

      # x509 -outform PEM -in public_test.crt -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 -certfile ca.crt
    > openssl pkcs12 -export -inkey www.mysite.com.key -in www.mysite.com.pem -passin pass:123456 -passout pass:123456 -out www.mysite.com.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项
    $ 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.200.7.cer

     4 OpenSSL下载方式(二选一)

    1、Windows用户开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。下载路径:https://www.openssl.org/source/

    2、简易安装包下载地址:https://files.cnblogs.com/files/xq1314/openssl.zip

     (1)双击bin目录下的openssl.exe执行文件

    参考:

      1、https://baike.baidu.com/item/openssl/5454803?fr=aladdin#5

      2、http://blog.csdn.net/baidu_36649389/article/details/54379935


  • 相关阅读:
    微博个人中心效果
    微博弹性按钮
    ios9 3dtouch 博客
    去掉导航栏阴影
    模态全屏模式,实现半透明效果
    剪切图片
    修改push动画的方向
    数据库链接池终于搞对了,直接从100ms到3ms
    如何在Java代码中去掉烦人的“!=null”
    面试官:请讲下接口具体怎么优化!
  • 原文地址:https://www.cnblogs.com/xq1314/p/8080598.html
Copyright © 2011-2022 走看看