日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenSSL原理与实现

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenSSL原理与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 概念

?

1.1. SSL(Secure Sockets Layer安全層套接字)/TLS(Transport Layer Security傳輸層套接字)。

  最常見的應用是在網站安全方面,用于http數據傳輸的加密。

?

1.2. 安全的目標:保密性(confidentiality),完整性(integrity),可用性(availability)

?

1.3. 攻擊的類型:

    威脅保密性的攻擊:竊聽、通信量分析;
    威脅完整性的攻擊:更改、偽裝、重放、否認
    威脅可用性的攻擊:拒絕服務(DoS)

?

1.4. 解決方案:技術(加密和解密)、服務(用于抵御攻擊的服務,也即是為了上述安全目標而特地設計的安全服務)

  加密和解密:
    傳統加密方法:替代加密方法、置換加密方法
    現代加密方法:現代塊加密方法

  服務:
    認證機制
    訪問控制機制

?

1.5. 在linux系統上的實現:OpenSSL(ssl), GPG(pgp)

?

1.6.?加密算法和協議:

1.6.1. 對稱加密:加密和解密使用同一個密鑰;
      DES:Data Encryption Standard;?
      3DES:Triple DES;
      AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
      Blowfish
      Twofish
      IDEA
      RC6
      CAST5

  特性:
    加密、解密使用同一個密鑰;
    將原始數據分割成為固定大小的塊,逐個進行加密;

  缺陷:
    密鑰過多;
    密鑰分發困難;

1.6.2. 公鑰加密:密鑰分為公鑰與私鑰
    公鑰:從私鑰中提取產生;可公開給所有人;pubkey
    私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key;
    特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
    用途:
      數字簽名:主要在于讓接收方確認發送方的身份;
      密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
      數據加密

    算法:RSA, DSA, ELGamal
      DSS: Digital Signature Standard
      DSA:Digital Signature Algorithm

1.6.3. 單向加密:即提出數據指紋;只能加密,不能解密;
    特性:定長輸出、雪崩效應;
    功能:完整性;
    算法:
      md5:Message Digest 5, 128bits
      sha1:Secure Hash Algorithm 1, 160bits
      sha224, sha256, sha384, sha512

1.6.4. 密鑰交換: IKE(Internet Key Exchange)
    公鑰加密算法:RSA

    DH(Deffie-Hellman),ECDH(橢圓曲線DH),ECDHE(臨時橢圓曲線DH)

1.7.?PKI:Public Key Infrastructure

  公鑰基礎設施:
    簽證機構:CA
    注冊機構:RA
    證書吊銷列表:CRL
    證書存取庫:

  X.509v3:定義了證書的結構以及認證協議標準
    版本號
    序列號
    簽名算法ID
    發行者名稱
    有效期限
    主體名稱
    主體公鑰
    發行者的惟一標識
    主體的惟一標識
    擴展
    發行者的簽名

1.8. 設計模式:分層設計

    最底層:基礎算法原語的實現,aes, rsa, md5
    向上一層:各種算法的實現;?
    再向上一層:組合算法實現的半成品;
    用各種組件拼裝而成的各種成品密碼學協議軟件;

?

2. 傳輸過程:

?

2.1?SSL會話主要三步:
    客戶端向服務器端索要并驗正證書;
    雙方協商生成“會話密鑰”;
    雙方采用“會話密鑰”進行加密通信;

?

2.2.?SSL Handshake Protocol:

  第一階段:ClientHello:
    支持的協議版本,比如tls 1.2;
    客戶端生成一個隨機數,稍后用戶生成“會話密鑰”
    支持的加密算法,比如AES、3DES、RSA;
    支持的壓縮算法;

  第二階段:ServerHello
    確認使用的加密通信協議版本,比如tls 1.2;
    服務器端生成一個隨機數,稍后用于生成“會話密鑰”
    確認使用的加密方法;
    服務器證書;

  第三階段:
    驗正服務器證書,在確認無誤后取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)
    發送以下信息給服務器端:
      一個隨機數;
      編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
      客戶端握手結束通知;

  第四階段:
    收到客戶端發來的第三個隨機數pre-master-key后,計算生成本次會話所有到的“會話密鑰”;
    向客戶端發送如下信息:
      編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
      服務端握手結束通知;

?

3. OpenSSL

3.1. 組件:libcrypto, libssl(主要由開發者使用),openssl(多用途命令行工具)

3.2. opensll命令:

  從多子命令,分為三類:
    標準命令
    消息摘要命令(dgst子命令)
    加密命令(enc子命令)

  標準命令: enc, ca, req, genrsa, ...

3.2.1.?對稱加密:
    工具:openssl enc, gpg
    支持的算法:3des, aes, blowfish, towfish

    enc命令:
      加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
      解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext

3.2.2.?單向加密:
    工具:openssl dgst, md5sum, sha1sum, sha224sum, ...

    dgst命令:
      ~]# openssl dgst -md5 /PATH/TO/SOMEFILE

3.2.3.?生成用戶密碼:
    工具:passwd, openssl passwd

      ~]#?openssl passwd -1 -salt SALT

3.2.4.?生成隨機數:
    工具:openssl rand

      ~]# openssl rand -hex NUM
      ~]# openssl rand -base NUM

3.2.5.?公鑰加密:
    加密解密:
      算法:RSA,ELGamal
      工具:openssl rsautl, gpg
    數字簽名:
      算法:RSA, DSA, ELGamal
      工具:
    密鑰交換:
      算法:DH

3.2.6.?生成密鑰:
    生成私鑰: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
    提出公鑰: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout

?

4. CA:公共信任的CA,私有CA;

4.1. 公共CA:買買買
4.2. 建立私有CA工具:openssl/OpenCA

4.2.1. openssl命令:

配置文件:/etc/pki/tls/openssl.cnf

4.2.1.1.?構建私有CA:
  在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可;

  步驟:
    (1) 生成私鑰;
      ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
    (2) 生成自簽證書;
      ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
        -new:生成新證書簽署請求;
        -x509:生成自簽格式證書,專用于創建私有CA時;
        -key:生成請求時用到的私有文件路徑;
        -out:生成的請求文件路徑;如果自簽操作將直接生成簽署過的證書;
        -days:證書的有效時長,單位是day;
    (3) 為CA提供所需的目錄及文件;
        ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
        ~]# touch /etc/pki/CA/{serial,index.txt}
        ~]# echo 01 > /etc/pki/CA/serial

    要用到證書進行安全通信的服務器,需要向CA請求簽署證書:

  步驟:(以httpd為例)
    (1) 用到證書的主機生成私鑰;
      ~]# mkdir /etc/httpd/ssl?
      ~]# cd /etc/httpd/ssl
      ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
    (2) 生成證書簽署請求
      ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
    (3) 將請求通過可靠方式發送給CA主機;

    (4) 在CA主機上簽署證書;
      ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

      查看證書中的信息:
        ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

4.2.1.2.?吊銷證書:
  步驟:
    (1) 客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
      ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
    (2) CA主機吊銷證書
      先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致;

    吊銷:
      # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
      其中的SERIAL要換成證書真正的序列號;

    (3) 生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
      # echo 01 > /etc/pki/CA/crlnumber

    (4) 更新證書吊銷列表
      # openssl ca -gencrl -out thisca.crl?

      查看crl文件:
        # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text


轉載:https://www.cnblogs.com/demonzk/p/6485326.html

總結

以上是生活随笔為你收集整理的OpenSSL原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。