加密類型、數據加密解密過程以及CA創建

来源:https://www.cnblogs.com/yongbuyanbai0/archive/2019/10/15/11681330.html
-Advertisement-
Play Games

對稱加密演算法 非對稱加密演算法 單向散列(hash演算法) CA和證書 證書獲取 安全協議 OpenSSL openssl命令 創建CA和申請證書 ...


對稱加密演算法 

 1     對稱加密:加密和解密使用同一個密鑰 
 2         DES:Data Encryption Standard,56bits 
 3         3DES: 
 4         AES:Advanced (128, 192, 256bits) 
 5         Blowfish,Twofish 
 6         IDEA,RC6,CAST5 
 7     特性: 
 8         1、加密、解密使用同一個密鑰,效率高 
 9         2、將原始數據分割成固定大小的塊,逐個進行加密 
10     缺陷: 
11         1、密鑰過多 
12         2、密鑰分發 
13         3、數據來源無法確認 

非對稱加密演算法 

 1     公鑰加密:密鑰是成對出現 
 2         公鑰:公開給所有人;public key 
 3         私鑰:自己留存,必須保證其私密性;secret key 
 4     特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然 
 5     功能: 
 6         數字簽名:主要在於讓接收方確認發送方身份 
 7         對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方 
 8         數據加密:適合加密較小數據 
 9     缺點:密鑰長,加密解密效率低下 
10     演算法: 
11         RSA(加密,數字簽名) 
12         DSA(數字簽名) 
13         ELGamal 

單向散列(hash演算法)

 1     將任意數據縮小成固定大小的“指紋” 
 2         任意長度輸入 
 3         固定長度輸出 
 4         若修改數據,指紋也會改變(“不會產生衝突”) 
 5         無法從指紋中重新生成數據(“單向”) 
 6     功能:數據完整性 
 7     常見演算法 
 8         md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512 
 9     常用工具 
10         md5sum | sha1sum [ --check ] file 
11         openssl、gpg 
12         rpm -V 
13 hash(data)=digest 摘要,有時候也稱為指紋  只要數據不同摘要必不同,得到摘要推不出原來的數據值
14 不論什麼數據。不論數據的大小,只要用的演算法相同,那麼輸出長度必定相同
15 只要數據不同,摘要完全不同,哪怕數據之間只相差一個空格字元都會產生巨大的變化也稱雪崩效應
16 常用於對比數據,數據是否被修改過,數據相同,摘要必定相同
17 
18 文件完整性的兩種實施方式
19     被安裝的文件
20         md5單向hash
21         rpm -V package-name
22         例:修改文件內容查看hash
23             rpm -qf /etc/issue
24                 centos-release-7-6.1810.2.el7.centos.x86_64
25             rpm -V centos-release
26                 missing   c /etc/yum.repos.d/CentOS-Base.repo
27                 missing   c /etc/yum.repos.d/CentOS-CR.repo
28             echo 1 >> /etc/issue
29             rpm -V centos-release
30                 ..5....T.  c /etc/issue    :5就表示md5,說明文件內容變了,T表示文件的時間變了
31                 missing   c /etc/yum.repos.d/CentOS-Base.repo
32                 missing   c /etc/yum.repos.d/CentOS-CR.repo
33             然後將追加的1刪掉。再次比較
34             rpm -V centos-release
35                 .......T.  c /etc/issue    :文件內容恢復。但是時間改變了
36                 missing   c /etc/yum.repos.d/CentOS-Base.repo
37                 missing   c /etc/yum.repos.d/CentOS-CR.repo
38 
39     發行的軟體包文件
40         GPG公鑰簽名
41         rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
42         rpm -K tree-1.6.0-10.el7.x86_64.rpm
43         
44         如果不導入公鑰,系統提示沒有公鑰,不能檢查,如果有問題提示NOT OK

CA和證書 

 1     PKI: Public Key Infrastructure 
 2         簽證機構:CA(Certificate Authority) 
 3         註冊機構:RA 
 4         證書吊銷列表:CRL 
 5         證書存取庫: 
 6     X.509:定義了證書的結構以及認證協議標準 
 7         版本號        主體公鑰 
 8         序列號        CRL分發點 
 9         簽名演算法      擴展信息 
10         頒發者        發行者簽名 
11         有效期限 
12         主體名稱 

證書獲取

 1     證書類型: 
 2         證書授權機構的證書 
 3         伺服器 
 4         用戶證書 
 5     獲取證書兩種方法: 
 6         使用證書授權機構 
 7             生成證書請求(csr) 
 8             將證書請求csr發送給CA 
 9             CA簽名頒發證書 
10         自簽名的證書 
11             自已簽發自己的公鑰 

安全協議 

 1     SSL:Secure Socket Layer,TLS: Transport Layer Security (安全套接層)
 2         1995:SSL 2.0 Netscape 
 3         1996:SSL 3.0 
 4         1999:TLS 1.0 
 5         2006:TLS 1.1 IETF(Internet工程任務組) RFC 4346 
 6         2008:TLS 1.2 當前使用 
 7         2015:TLS 1.3 
 8         功能:機密性,認證,完整性,重放保護 
 9     兩階段協議,分為握手階段和應用階段 
10             握手階段(協商階段):客戶端和伺服器端認證對方身份(依賴於PKI體系,利用數字
11         證書進行身份認證),並協商通信中使用的安全參數、密碼套件以及主密鑰。後續通信使
12         用的所有密鑰都是通過MasterSecret生成。 
13             應用階段:在握手階段完成後進入,在應用階段通信雙方使用握手階段協商好的密
14         鑰進行安全通信
 1 SSL/TLS 
 2     Handshake協議:包括協商安全參數和密碼套件、伺服器身份認證(客戶端身
 3         份認證可選)、密鑰交換 
 4     ChangeCipherSpec 協議:一條消息表明握手協議已經完成 
 5     Alert 協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,
 6         fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,
 7         只是會給出錯誤警告 
 8     Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等 
 9     HTTPS 協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP over 
10         SSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理後,成為二
11         進位形式傳輸 

OpenSSL 

 1     OpenSSL:開源項目 
 2         三個組件: 
 3             openssl:多用途的命令行工具,包openssl 
 4             libcrypto:加密演算法庫,包openssl-libs 
 5             libssl:加密模塊應用庫,實現了ssl及tls,包nss 
 6     openssl命令: 
 7         兩種運行模式:交互模式和批處理模式 
 8         openssl version:程式版本號 
 9         標準命令、消息摘要命令、加密命令 
10             標準命令:enc, ca, req, ... 

openssl命令 

 1     對稱加密: 
 2         工具:openssl enc, gpg 
 3         演算法:3des, aes, blowfish, twofish 
 4     enc命令: 
 5         幫助:man enc 
 6         加密: 
 7         openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher 
 8         解密: 
 9         openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile 
10         openssl ? 
 1     單向加密: 
 2         工具:md5sum, sha1sum, sha224sum,sha256sum… 
 3         openssl dgst 
 4     dgst命令: 
 5         幫助:man dgst 
 6         openssl dgst -md5 [-hex預設] /PATH/SOMEFILE 
 7         openssl dgst -md5 testfile 
 8         md5sum /PATH/TO/SOMEFILE 
 9     MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現
10         網路通信中保證所傳輸數據的完整性機制 
11         CBC-MAC 
12         HMAC:使用md5或sha1演算法 
 1     生成用戶密碼: 
 2         passwd命令: 
 3         幫助:man sslpasswd 
 4         openssl passwd -1 -salt SALT(最多8位) 
 5         openssl passwd -1 –salt centos 
 6         –salt:打亂生成的hash值,正常使用md5生成的hash值只要數據相同
 7         hash值就相同添加–salt嚴之後就可以打亂hash值即使數據一樣hash
 8         值也是不一樣的
 9     生成隨機數: 
10         幫助:man sslrand 
11         openssl rand -base64|-hex NUM 
12         NUM: 表示位元組數,使用-hex,每個字元為十六進位,相當於4位二進位,出現的字元數為NUM*2 
 1     公鑰加密: 
 2         演算法:RSA, ELGamal 
 3         工具:gpg, openssl rsautl(man rsautl) 
 4     數字簽名: 
 5         演算法:RSA, DSA, ELGamal 
 6     密鑰交換: 
 7         演算法:dh 
 8         DSA:Digital Signature Algorithm 
 9         DSS:Digital Signature Standard 
10         RSA: 
 1     生成密鑰對兒:man genrsa 
 2     生成私鑰 
 3         openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS 
 4         (umask 077; openssl genrsa –out test.key –des 2048) 
 5         openssl rsa -in test.key –out test2.key 將加密key解密 
 6     從私鑰中提取出公鑰 
 7         openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE 
 8         openssl rsa –in test.key –pubout –out test.key.pub 
 9     隨機數生成器:偽隨機數字 
10         鍵盤和滑鼠,塊設備中斷 
11         /dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞 
12         /dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟體生成偽隨機數,非阻塞 

創建CA和申請證書

 1     openssl的配置文件:/etc/pki/tls/openssl.cnf
 2         配置文件中有對應的語句塊,定義預設CA,也可以添加CA,CA的預設設置
 3     文件中關於CA的選項策略,搭建CA時需要指定的信息(國家,城市,公司等等)
 4         match:要求申請填寫的信息和CA設置信息必須一致
 5         optional:可有可無,和CA設置信息可不一致
 6         supplied:必須填寫這項申請信息
 7         將來客戶端申請填寫時要註意以上欄位,需要填寫一致,否則報錯
 8     1、創建所需要的文件
 9         touch /etc/pki/CA/index.txt    :生成證書索引資料庫文件
10         echo 01 > /etc/pki/CA/serial:指定第一個頒發證書的序列號
11     2、CA自簽證書
12         生成私鑰
13         cd /etc/pki/CA/    
14         (umask 066;openssl genrsa -out private/cakey.pem 2048)    :安全
15     3、生成自簽名證書:
16         openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
17         回車後輸入CA的信息,地區(兩個字元,例CN),公司,CA的功能變數名稱,郵箱(可選項)
18         選項說明:
19             -new:生成新證書簽署請求
20             -x509:專用於CA生成自簽證書
21             -key:生成請求時用到的私鑰文件
22             -days n:證書的有效期限
23             -out /path/to/file:證書的保存路徑
24 客戶端創建私鑰申請證書:
25     1、創建私鑰
26         (umask 066;openssl genrsa -out http.key 1024)
27     2、利用私鑰生成證書申請
28         openssl req -new -key /data/http.key -out /data/http.csr
29             回車後輸入相關信息,預設國家,城市,和公司這三項必須填寫一樣。部門是自定義的,主機名也是自定以,輸入將來你要作為功能變數名稱的那個名字。
30     3、將生成的申請發送到CA伺服器
31         scp http.csr 伺服器IP:/tmp/
32 服務端CA簽署證書,並將證書頒發給請求者
33     1、生成證書
34         openssl ca -in /tmp/http.csr -out /etc/pki/CA/certs/http.crt -days 365
35             回車後輸入信息,預設要求國家,省,公司三項必須和CA一致
36     2、將證書版發給請求者客戶端
37         scp /etc/pki/CA/certs/http.crt 客戶端IP:/data/
38 至此證書申請完畢,使用證書是應用軟體中實現,在軟體例如httpd中添加此證書的路徑就可以用了
39     
40 查看證書中的信息
41     openssl x509 -in /path/to/file.crt -noout -test|issuer|subject|serial|dates
42         例:openssl x509 -in /data/http.crt -noout -text
43     openssl ca -status SERIAL    :查看指定編號的證書狀態

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 點這裡進入ABP進階教程目錄 在功能按鈕區增加一個自定義按鈕 - Add(創建課程) 添加按鈕 打開展示層(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Course查詢相關腳本 自帶按鈕已有五個我們再添加一 ...
  • 簡述 我們做軟體工作的雖然每天都離不開網路,可網路協議細節卻不是每個人都會接觸和深入瞭解。我今天就來和大家一起學習下Socket,並寫一個簡單的聊天程式。 一些基礎類 首先我們每天打開瀏覽器訪問網頁信息都是使用的HTTP/HTTPS協議,而HTTP是通過的TCP建立的連接。TCP底層又是通過的Soc ...
  • 關鍵字:流程未來節點處理人 工作流快速開發平臺 工作流流設計 業務流程管理 asp.net 開源工作流 業務背景:一個流程在啟動起來後,是可以對一些節點計算出來處理人是誰,流程的走向。對於另外一些節點處理人有可能需要相關的人員調整的。在一些審批的環境下,需要把能夠計算出來的節點處理人在發起時計算出來... ...
  • 一、背景 代碼實例:https://gitee.com/D_C_L/CurtainEtcAOP.git我們實際系統中有很多操作,是不管做多少次,都應該產生一樣的效果或返回一樣的結果。 例如: 1. 前端重覆提交選中的數據,應該後臺只產生對應這個數據的一個反應結果。 2. 我們發起一筆付款請求,應該只 ...
  • 本篇主要寫一些 腳本排序工具的使用。 sort 概述 是一個以行為單位對文件內容進行排序的工具,也可以根據不同的數據類型來排序。 用法 sort [選項] 參數 :忽略大小寫 :忽略每行前面的空格 :按照月份進行排序 :按照數字進行排序 :反向排序 :等同於 ,表示相同的數據僅顯示一行 :指定分隔符 ...
  • 本篇主要寫一些 腳本編輯工具 的使用。 概述 是一個功能強大的編輯工具,逐行讀取輸入文本,並根據指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理。 傾向於將一行分成多個欄位然後再進行處理,且預設情況下欄位的分隔符為 或者 鍵。 執行結果可以通過 的功能將欄位數據列印顯示。 可以使用 ...
  • 1.先apt-get update一下當前預設的源,更新完成後先把vim命令安裝一下,再修改源倉庫為阿裡雲,否則無法直接編輯文件 2.先添加阿裡雲的源,編輯文件/etc/apt/sources.list,編輯完再次更新一下 deb http://mirrors.aliyun.com/ubuntu/ ...
  • 作為一個技術純小白,在Linux伺服器初始化MySQL資料庫的時候遇到了一點小問題: ​ 1、不會使用MySQL圖形工具,幾乎沒玩過 ​ 2、客戶的VPN沒有開放3306埠,沒法用navicat等工具連接資料庫 ​ 3、懶的再打開圖形工具,畢竟命令行接近萬能了…… 所以: 方法一、在初始化腳本文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...