Https、CA證書、數字簽名

Https

  • Http協議

Http協議是目前應用比較多應用層協議,瀏覽器對于Http協議已經實現。Http協議基本的構成部分有

  1. 請求行 : 請求報文的第一行
  2. 請求頭 : 從第二行開始為請求頭內容的開始部分。每一個請求頭都是由K-V鍵值對組成。
  3. 請求體: 請求頭完成后以空行結束、從空行開始為請求體。

同理,Http響應也遵循上述基本結構

  1. 響應行:響應報文的第一行,主要包含了Http的版本、響應狀態碼。
  2. 響應頭:從第二行開始為響應頭內容的開始部分,每一個響應頭都是由K-V鍵值對組成。
  3. 響應體:服務器器所有的響應內容都在響應體中返回,當然有些請求可能也沒有響應體,例如302重定向請求。

所謂的協議就是 : 為了滿足計算機通信雙方可以正確的獲取數據,處理數據而約定好的一種格式,如果不遵守協議,則無法正確處理數據。例如Http協議的響應行沒有狀態碼,或者響應頭格式不正確等都會導致瀏覽器無法正確解析。
遵循了標準Http協議,瀏覽器和服務器則可以根據對方傳輸的信息做正確處理,瀏覽器也可以正確展示數據。


之前的版本Http協議都是在瀏覽器與服務器之間使用明文傳輸的,這種方式是不安全的,極度容易被中間人攻擊篡改傳輸的數據。于是Https協議誕生了。

  • Https起源
  1. 對稱加密算法實現

既然Http協議是不安全的,那將傳輸的信息使用對稱加密算法加密過后再傳輸就可以避免被中間人攻擊了,但問題是,如何讓對稱加密的密鑰讓瀏覽器與服務器更安全的知道?如果瀏覽器直接將密鑰發給服務器,那還是有可能被攻擊者解惑,則后續再傳輸的任何信息都可以被輕松解密,所以對稱加密也是不安全的。

  1. 非對稱加密算法實現

非對稱加密算法有以下優勢:

  1. 有兩把密鑰,分為公鑰和私鑰,公鑰加密只能私鑰解密,而私鑰加密只能公鑰解密。
  2. 密鑰長度更長,破解難度更高。
  3. 攻擊者獲取一把密鑰無法實現對數據的加解密。

嘗試用非對稱加密算法來實現瀏覽器與服務器的安全通信


  1. 首先服務器把自己的公鑰發送給瀏覽器
  2. 瀏覽器用服務器的公鑰加密一串隨機數字
  3. 將加密后的密文發送給服務器,即使被中間人攻擊,由于私鑰只有服務器才有,也是無法解密的。
  4. 服務器拿到密文,用自己的私鑰進行解密,這樣就可以獲取到瀏覽器生成的隨機數,后續用這個隨機數進行對稱加密即可。

常用的非對稱加密實現算法有 RSA、DSA、SM2等。
絕大多數的非對稱加密算法都是基于數學問題去實現的,例如RSA算法基于超大質數分解,SM2基于橢圓曲線率等。 在可預見的時間范圍內,這幾種算法的安全性依然是相當高的。

SSL、TSL
  • 非對稱加密潛在的問題

在使用了非對稱加密算法保證瀏覽器與服務器通信安全以后,似乎還是有一個問題沒有解決,那就是如果服務器發送給瀏覽器公鑰的過程中被中間人攔截,中間人替換成自己的公鑰發送給瀏覽器,那么瀏覽器再用假的公鑰加密隨機數,發給服務器,此時再度被中間人攻擊,由于瀏覽器加密用的是假的公鑰,所以攻擊者可以用自己的私鑰進行解密,然后再用瀏覽器的公鑰加密,發給瀏覽器,這個時候,攻擊者已經完全拿到的瀏覽器生成的隨機數了,那么后續雙方的通信也都可以被輕松破解。

  • 問題解決

可以看到,根本的問題就是瀏覽器無法判斷服務器發過來的公鑰是不是服務器本身的還是被篡改的,此時就需要引入一個第三方機構了,這個第三方機構就是CA (Certificate Authority)。


服務器會像自己的域名信息、組織、主體以及最關鍵的公鑰整理好,向CA機構申請頒發證書,CA機構經過審核以后,用自己的私鑰對這些信息進行數字簽名,也就是先將信息進行消息摘要,然后對這個消息摘要進行加密,然后將CA的公鑰以及申請的信息打包成一個證書
CA會將證書下發給服務器。那么后續的通信過程是這樣的:


  1. 瀏覽器向服務器發送請求,服務器會將自己的證書發給瀏覽器。
  2. 瀏覽器首先根據證書上的CA機構的公鑰對密文進行解密,然后拿著解密的內容去比對證書上的數字簽名是否一致,如果不一致,則表示證書有問題。如果攻擊者篡改了篡改了服務器的公鑰,則瀏覽器再進行數字簽名驗證時,就會出現問題,此時會提示風險。
  3. 如果攻擊者也申請了一個證書來偽造,雖然可以正確解密出來,但兩個域名的證書內容是不可能相同的,所以也無法驗證成功,例如 訪問的是 www.bilibili.com,而證書上的域名是 www.bi1ibi1i.com,此時也會提示證書安全問題。

此時看似解決了安全問題,但現在的問題是,瀏覽器如何知道CA機構的公鑰不是被篡改過的呢?這就有點套娃了。
最簡單的辦法就是操作系統和瀏覽器直接內置了CA機構的公鑰信息,內置的方式避免了攻擊者篡改。

可以發現,上述將的瀏覽器和服務器的協商密鑰的過程是獨立于Http協議之外的,這一過成叫做
secure socket layer (安全套接字層),也就是 SSL,SSL經歷過多次迭代發展后有了SSL1.0、SSL2.0、SSL3.0,后來更名為TSL。
所以SSL、TSL是獨立于協議之外的一套安全機制,這一過程也稱作SSL握手。

除此之外,證書也設置有效期、定義更換算法以及密鑰也是提升安全性的一種方式。

  • CA機構

Symantec:賽門鐵克(Symantec)SSL證書前身為 Verisign,后于2017年12月被DigiCert收購,現在已經使用 DigiCert 根證書。Symantec Secure Site SSL證書依然是各行業尤其是金融銀行證券等大型企業認可的品牌。Symantec Secure Site SSL證書 支持諾頓安全簽章,是網站擁有很好的可信度。
GeoTrust:是全球成長最快的數字證書頒發機構之一,在全球超過150個國家/地區頒發數百萬的數字證書。
Comodo:是全球知名的互聯網安全公司,為用戶提供網站安全防護、SSL證書、反病毒軟件等服務。
DigiCert:是全球領先的數字證書提供商,在SSL市場占有重要地位。DigiCert旗下擁有DigiCert、Symantec、Geotrust、Thawte、Rapid 5大SSL證書品牌,可以提供從基礎型到高端型全系列的SSL證書解決方案。

證書的基本信息有頒發者、頒發機構等等
在這里插入圖片描述

同時,證書中還包含了服務器的公鑰、域名、CA機構的公鑰、簽名算法等等。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++入門到精通】C++入門 —— vector (STL)

閱讀導航 前言一、vector簡介1. 概念2. 特點 二、vector的使用1.vector 構造函數2. vector 空間增長問題?resize 和 reserve 函數 3. vector 增刪查改?operator[] 函數 三、迭代器失效溫馨提示 前言 前面我們講了C語言的基礎知識,也了解了一些數據結構&#xff0…

軟件測試基礎篇——Docker

1、docker技術概述 docker描述:docker是一項虛擬化的容器技術(類似于虛擬機),docker技術給使用者提供一個平臺,在該平臺上可以利用提供的容器,對每一個應用程序進行單獨的封裝隔離,每一個應用程…

spring 2.7.14 cors 設置 allowedOrigins(“*“)通配符 失效怎么解決

失效代碼: package com.yukuanyan.searcher_web.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebM…

計算機競賽 opencv python 深度學習垃圾圖像分類系統

0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 opencv python 深度學習垃圾分類系統 🥇學長這里給一個題目綜合評分(每項滿分5分) 難度系數:3分工作量:3分創新點:4分 這是一個較為新穎的競…

圖像的伽馬變換

伽馬變換(Gamma Correction)是一種在圖像處理中常用的非線性變換方法,用于調整圖像的亮度和對比度。它在圖像的像素值上應用一個冪次函數,以改變圖像的灰度級分布,從而影響圖像的感知亮度。伽馬變換通常用于糾正顯示器…

Monkey測試真的靠譜嗎?

Monkey測試,顧名思義,就是模擬一只猴子在鍵盤上亂敲,從而達到測試被測系統的穩定性。Monkey測試,是Android自動化測試的一種手段,Monkey測試本身非常簡單,Android SDK 工具支持adb Shell命令,實…

208、仿真-51單片機脈搏心率與心電報警Proteus仿真設計(程序+Proteus仿真+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、程序源碼 資料包括: 需要完整的資料可以點擊下面的名片加下我,找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選擇 方案一&a…

ElasticSearch 7.4學習記錄(基礎概念和基礎操作)

若你之前從未了解過ES,本文將由淺入深的一步步帶你理解ES,簡單使用ES。作者本人就是此狀態,通過學習和梳理,產出本文,已對ES有個全面的了解和想法,不僅將知識點梳理,也涉及到自己的理解&#xf…

行業追蹤,2023-08-09

自動復盤 2023-08-09 凡所有相,皆是虛妄。若見諸相非相,即見如來。 k 線圖是最好的老師,每天持續發布板塊的rps排名,追蹤板塊,板塊來開倉,板塊去清倉,丟棄自以為是的想法,板塊去留讓…

linux學習——Redis基礎

目錄 一、noSQL 類型 特點及應用場景 二、Redis 三、安裝方式 編譯安裝 rpm安裝 四、目錄結構 /etc/redis.conf 五、Redis命令 六、本地登錄和遠程登錄 本地登錄 遠程登錄 七、數據庫操作 幫助信息 庫操作 數據操作 八、Redis持久化 一、RDB類型 二、AOF模式 一…

2023河南萌新聯賽第(四)場:河南大學 F - 小富的idea

2023河南萌新聯賽第(四)場:河南大學 F - 小富的idea 時間限制:C/C 1秒,其他語言2秒 空間限制:C/C 262144K,其他語言524288K 64bit IO Format: %lld 題目描述 要注意節約 卷王小富最近又在內卷&a…

密碼檢查-C語言/Java

描述 小明同學最近開發了一個網站,在用戶注冊賬戶的時候,需要設置賬戶的密碼,為了加強賬戶的安全性,小明對密碼強度有一定要求: 1. 密碼只能由大寫字母,小寫字母,數字構成; 2. 密碼不…

偽類和偽元素有何區別?

聚沙成塔每天進步一點點 ? 專欄簡介? 偽類(Pseudo-class)? 偽元素(Pseudo-element)? 區別總結? 寫在最后 ? 專欄簡介 前端入門之旅:探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前…

信號調制原理演示,模擬和數字調制技術大比拼

【中英雙語字幕】信號調制原理演示,模擬和數字調制技術大比拼!_嗶哩嗶哩_bilibili

騰訊云輕量應用服務器Typecho應用模板搭建博客流程

騰訊云百科分享使用騰訊云輕量應用服務器Typecho應用模板搭建博客流程,Typecho 是開源的博客建站平臺,具有輕量、高效、穩定等特點,操作界面簡潔友好。該鏡像基于 CentOS 7.6 64 位操作系統,并已預置 Nginx、PHP、MariaDB 軟件。您…

4.0 Python 變量與作用域

在python中,變量的作用域決定了變量在哪些位置可以被訪問。一個程序中的變量并不是所有的地方都可以訪問的,其訪問權限決定于變量的賦值位置。python中有兩種最基本的變量作用域:局部作用域和全局作用域。局部變量是在函數內部定義的變量&…

day24-106.從中序與后序遍歷序列構造二叉樹

106.從中序與后序遍歷序列構造二叉樹 力扣題目鏈接(opens new window) 根據一棵樹的中序遍歷與后序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如,給出 中序遍歷 inorder [9,3,15,20,7]后序遍歷 postorder [9,15,7,20,3] 返回如下的二叉樹&am…

前端跨域問題解決方法

跨域是WEB瀏覽器專有的同源限制訪問策略。(后臺接口調用和postman等工具會出現) 跨源資源共享(CORS,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機制,該機制通過允許服務器標示除了它自己以外的其他源(域、協議或端…

java項目打包運行報異常:Demo-1.0-SNAPSHOT.jar中沒有主清單屬性

檢查后發現pom文件中有錯誤&#xff0c;需要添加build內容才能恢復正常。 添加下面文件后再次啟動恢復正常。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactI…

C語言atoi函數將字符串類型轉換為整型

atoi() 是C標準庫中的一個函數&#xff0c;用于將字符串轉換為整數。函數原型如下&#xff1a; int atoi(const char *str); 參數 str 是一個指向要轉換的字符串的指針。atoi() 函數會嘗試將字符串中的數字部分轉換為整數&#xff0c;并返回轉換后的整數值。如果字符串中不僅包…