zoukankan      html  css  js  c++  java
  • openssl源代码结构

    Openssl整个软件包主要包括三个主要的功能模块:密码算法库,SSL协议库,应用程序;

        应用程序:主要包括密钥生成,证书管理,格式转换,数据加密,签名,SSL测试等。

    evp,对称算法,非对称算法,摘要算法的封装。

    随机数的生成,管理;

    最基本的数据结构,struct 大数数组, EC_point 椭圆曲线点结构,

    openssl编译的命令:

      ./config (之后需要加一些全局性的选型,--openssldir=OPENSSLDIR安装目录),默认是usr/local/ssl

          --prefix,设置lib,include,bin的目录。

          shared,生成动态链接库,

          算法选项,no-des,no-ec等,选择是否编译某种算法。

      make

      make install

    openssl中的签名文件

      X509,通常是指满足X.509 V3的一个数字文件,标准RFC5280。

      X509是最基本的证书格式,规范。PKCS标准是具体的针对不同应用场景的封装格式,是基于x509的。

      X509文件的编码常用的有两种,DER:二进制的文件编码,不可读。

                     PEM:ASCII Base64编码的文件。

      X509文件的三种扩展,crt,一般linux用的较多的证书后缀,内部编码不限,其中包含公钥,不含私钥。

                 cer,一般window下用的较多的证书后缀,内部编码不限,其中包含公钥,不含私钥。

                 .key格式扩展,一般用在PKCS#8中。

      crt的扩展格式和cer的扩展格式,可以相互转换格式,但是内部的编码必须相同。(DER对应DER,PEM对应PEM)。

    DER的编码是基于ASN1的语言标准的,编码之后,类似于二进制的bin文件。(ASN1是语言编码标准,DER是具体的编码实现)。

    查看PEM编码的证书

      openssl x509 -in cert.pem  -text  -noout

      openssl x509 -in cert.crt  -text  -noout

      openssl x509 -in cert.cer  -text  -noout

    查看DER编码的证书

      openssl x509  -in  certificate.der  -inform  der  -text  -noout

    相互格式转换

      openssl  x509 -in  cert.crt  -outform  der   -out   cert.der

      openssl  x509 -in  cert.crt  -inform der  -outform  pem   -out  cert.pem

    base64到二进制文件的转换

      openssl base64 -in file.bin -out  file.64

      openssl base64 -d  -in file.b64  -out  file.bin

    Openssl使用pem文件格式存储证书和密钥,PEM中除去标记,实质上是Base64编码的二进制内容。

      生成rsa私钥的命令:openssl genrsa -out  private_rsa.pem   1024

      生成rsa公钥的命令:openssl rsa  -in  private_rsa.pem -pubout  -out  public_rsa.pem

    genrsa,产生的是一组rsa的密钥,其中已经包括公钥,生成公钥的命令,只是提取出其中的公钥,编码为pem格式。

      以明文的方式查看rsa密钥的各个参数值:openssl rsa -in private_rsa.pem  -text  -out  private.txt

    rsa公钥转换为PKCS#8格式:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

    生成ecc证书

      openssl ecparam -out EccCA.key -name prime256v1 -genkey

      openssl req -key EccCA.key -new  -out EccCA.req

      openssl X509 -req -in EccCA.req  -signkeyEccCA.key  -out  EccCA.pem 

    PEM文件格式:(标准RFC1421-1424)

      将一个对象保存为PEM格式的文件,1) 信息转换为ASCII码;

                       2) 使用对称加密算法转换邮件;(可选)

                       3) 使用base64对邮件进行编码处理;

                       4) 如果使用加密算法,使用头信息格式来指定算法,数据等信息;

                       5) 加上头、尾标注信息。

      pem格式在openssl中的定义以及调用函数

        https://blog.csdn.net/liao20081228/article/details/77185513

            

    openssl中的i2d,d2i系列函数,表征,将internal object转换为DER类型的编码,或者将DER类型的编码转换为internal类型的object。

      TYPE *d2i_TYPE(TYPE **a, unsigned char **pp, long length);
      TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a);
      TYPE *d2i_TYPE_fp(FILE *bp, TYPE **a);

      int i2d_TYPE(TYPE **a, unsigned char **pp);
      int i2d_TYPE_bio(BIO *bp, TYPE **a);
      int i2d_TYPE_fp(FILE *bp, TYPE **a);

    _bio类型,表示数据接口为bio port,_fp类型,表示数据接口为file point。

           _bio和_fp类型内部都是调用i2d/d2i_type类型。BIO和FP类型都被转换为char类型。

    d2i,i2d类型函数的定义和实现参考

      https://blog.csdn.net/u010129119/article/details/53811622

      在X509.pod中可以看到所有支持的D2I/I2D_TYPE类型的函数。

    ssl主要通过BIO和EVP的两种结构,实现安全套接字的协议。BIO主要是实现套接字的封装;EVP实现对内部算法的封装。

    BIO

      BIO是封装了许多类型I/O接口细节的一种应用接口,可以和SSL连接,非加密的网络连接,文件I/O进行透明的连接

        主要分为两种,source/sink类型,如socket BIO,file BIOfilter类型,将数据从一个BIO转换到另一个BIO,转换代表hash,enc,dec等操作

      各种类型的BIO函数介绍:

          https://blog.csdn.net/liao20081228/article/details/77193729

     EVP

      evp主要包括:摘要,对称算法,非对称算法的内核,filter BIO的实现

        所有的engine可以通过调用OpenSSL_add_all_algorithms或者自己初始化engine函数指针

      各种函数的详细介绍:

        https://blog.csdn.net/liao20081228/article/details/76285896  

    基于ssl接口和BIO接口的openssl api调用,实现client,server的加解密服务

      https://blog.csdn.net/gx_1983/article/details/47958323

      https://blog.csdn.net/howeverpf/article/details/18993945

  • 相关阅读:
    Vue.config.productionTip = false;
    Node学习笔记
    Redux学习笔记------容器组件与展示组件分离
    Redux学习笔记------数据流
    Redux学习笔记------store
    Redux学习笔记------reducer
    Redux学习笔记------action
    Redux学习笔记------基础介绍
    过滤emoji表情
    textarea自适应高度
  • 原文地址:https://www.cnblogs.com/-9-8/p/7942537.html
Copyright © 2011-2022 走看看