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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM