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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于加密、证书的那些事

發(fā)布時(shí)間:2023/11/30 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于加密、证书的那些事 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這是道哥的第012篇原創(chuàng)


<

文章目錄

    • 前言
    • 一個(gè)典型的物聯(lián)網(wǎng)產(chǎn)品
    • 數(shù)據(jù)加密
        • 明文傳輸?shù)娜秉c(diǎn)
        • 加密傳輸
        • 加密方式
            • 可逆加密
            • 不可逆加密
            • 公鑰和私鑰
    • 證書(shū)
        • 如何申請(qǐng)證書(shū)
        • 如何確認(rèn)證書(shū)的合法性
            • 單向認(rèn)證和雙向認(rèn)證
        • 認(rèn)證機(jī)構(gòu)
        • 證書(shū)鏈
        • 證書(shū)文件的后綴名
        • 證書(shū)文件的格式
            • PEM格式(Privacy Enhanced Mail)
            • DER格式(Distinguished Encoding Rules)
            • X.509標(biāo)準(zhǔn)
            • 證書(shū)格式
        • OpenPGP協(xié)議/標(biāo)準(zhǔn)
            • OpenPGP是什么?
            • OpenPGP協(xié)議的實(shí)現(xiàn)
            • OpenPGP的使用流程
    • SSL/TLS
        • 協(xié)議分層
        • 握手過(guò)程
        • HTTPS與SSL的關(guān)系
    • OpenSSL
        • OpenSSL是什么?
        • 密碼算法庫(kù)
        • 信息摘要算法
        • 秘鑰和證書(shū)管理
        • SSL協(xié)議庫(kù)
        • 應(yīng)用程序
    • OpenSSH又是什么?
        • SSH
        • SSH中基于口令的安全驗(yàn)證
        • SSH中基于秘鑰的安全認(rèn)證
        • SSH協(xié)議的實(shí)現(xiàn)
    • 總結(jié)

前言

在一個(gè)物聯(lián)網(wǎng)系統(tǒng)中,終端設(shè)備在連接云平臺(tái)(服務(wù)器)的時(shí)候,云平臺(tái)需要對(duì)設(shè)備的身份進(jìn)行驗(yàn)證,驗(yàn)證這是一個(gè)合法的設(shè)備之后才允許接入。這看似很簡(jiǎn)單的一句話(huà),背后包含了很多相關(guān)的概念,例如:加密、證書(shū)、證書(shū)標(biāo)準(zhǔn)、簽名、認(rèn)證機(jī)構(gòu)、SSL/TLS、OpenSSL、握手等一堆容易混淆的概念。

之前我在做智能家居項(xiàng)目時(shí),每次遇到證書(shū)以及加密的問(wèn)題時(shí),都是滿(mǎn)大街的查資料,但是由于每次都是解決問(wèn)題之后就停止下來(lái),沒(méi)有進(jìn)行完整、系統(tǒng)的梳理,因此對(duì)這些概念始終感覺(jué)自己都理解了,但是又說(shuō)不出所以然來(lái)。

這篇文章我們就把這些概念以及相關(guān)的使用步驟進(jìn)行梳理,就像聯(lián)想記憶一樣,很多分散的東西總是記不住,但是如果把這些東西按照特定的關(guān)系組織在一起,那么記憶起來(lái)就非常容易了。

做個(gè)小游戲:在1分鐘內(nèi)記下這十個(gè)東西:茶杯、猴子、玻璃、垃圾桶、魚(yú)竿、鳥(niǎo)窩、和尚、汽車(chē)、醫(yī)院、飲水機(jī)。這里可以暫停一下,看看自己的記憶力是不是不如以前了。

我們?cè)贀Q個(gè)記憶方法,把這十個(gè)東西以任意荒誕的邏輯聯(lián)系在一起,比如:一只猴子,左手拿著茶杯,右手拿著玻璃,往垃圾桶走去。在垃圾桶旁邊,看到一只魚(yú)竿,于是它就用魚(yú)竿去戳樹(shù)上的鳥(niǎo)窩。鳥(niǎo)窩里掉下來(lái)一個(gè)鳥(niǎo)蛋,正好砸在了和尚的頭上,流血了,趕緊攔下一輛汽車(chē)去醫(yī)院。到了醫(yī)院,和尚失血太多口渴了,正好看到一臺(tái)飲水機(jī)。

把這個(gè)荒誕的故事想幾遍,然后再試著把這十個(gè)東西說(shuō)出來(lái),這回是不是感覺(jué)很容易?而且連順序都不會(huì)記錯(cuò)!這就是聯(lián)想記憶的魔力。

那么學(xué)習(xí)知識(shí)也是這個(gè)道理:分散的知識(shí)是記不住的,只有梳理成體系,把相互之間的聯(lián)系和脈絡(luò)掌握了,再去理解這些分散的點(diǎn)就很容易記住了。這里的關(guān)鍵就是把這些知識(shí)點(diǎn)相互之間的關(guān)系掌握了,就像一張網(wǎng)一樣,隨便把一個(gè)知識(shí)點(diǎn)拎出來(lái),都可以根據(jù)這張網(wǎng)把其他的知識(shí)點(diǎn)聯(lián)想起來(lái)。

這篇文章的內(nèi)容包括:

物聯(lián)網(wǎng)云平臺(tái),是如何驗(yàn)證設(shè)備端的合法性?
SSL/TLS是什么?有什么作用?在哪些場(chǎng)合下使用?
OpenSSL是什么?它與SSL是什么關(guān)系?
OpenSSH又是什么?它與OpenSSL又有什么區(qū)別?
HTTPS中是如何利用SSL來(lái)交換秘鑰的?握手步驟是什么?
證書(shū)是什么?有什么作用?在哪些場(chǎng)合下使用?
證書(shū)是如何得到的?它的標(biāo)準(zhǔn)格式是什么?包含哪些內(nèi)容?
認(rèn)證機(jī)構(gòu)是什么?什么是鏈?zhǔn)阶C書(shū)?
證書(shū)與SSL有什么關(guān)系?
簽名是什么意思?與加密是什么關(guān)系?
什么是單向認(rèn)證?雙向認(rèn)證?

另外補(bǔ)充一點(diǎn):這篇文章只描述“是什么”,而不會(huì)描述“為什么”。“為什么”的事情留給那些數(shù)學(xué)家、密碼學(xué)家來(lái)搞定就可以了。

一個(gè)典型的物聯(lián)網(wǎng)產(chǎn)品

在實(shí)際的項(xiàng)目中,如果用到云平臺(tái),一般來(lái)說(shuō)選擇性就那么幾個(gè):國(guó)外就用亞馬遜,國(guó)內(nèi)就用阿里云,最近也碰到一些項(xiàng)目使用華為云。這里就以之前做過(guò)的一個(gè)空氣凈化器項(xiàng)目來(lái)舉例:

首先,亞馬遜提供了一套SDK,這個(gè)SDK中包含了一組API函數(shù)供應(yīng)用程序調(diào)用,向云平臺(tái)進(jìn)行安全連接、收發(fā)數(shù)據(jù)。在調(diào)用API函數(shù)的時(shí)候,必須提供一些必要的設(shè)備信息,這其中最重要的就是設(shè)備證書(shū)文件,也就是說(shuō),證書(shū)必須要預(yù)先存儲(chǔ)在設(shè)備的文件系統(tǒng)中。

那么,證書(shū)是在什么時(shí)候被放到空氣凈化器設(shè)備中的?當(dāng)然是生產(chǎn)階段,看一下這個(gè)流程:

  • 生產(chǎn)工具軟件運(yùn)行在產(chǎn)線(xiàn)的PC機(jī)上,通過(guò)串口連接到空氣凈化器設(shè)備,從設(shè)備中讀取唯一識(shí)別碼(例如:MAC地址);
  • 生產(chǎn)工具軟件上傳必要的信息(廠(chǎng)商基本信息、廠(chǎng)商秘鑰、空凈設(shè)備的唯一識(shí)別碼)給AWS云平臺(tái),申請(qǐng)得到一個(gè)證書(shū)文件;
  • AWS云平臺(tái)根據(jù)廠(chǎng)商預(yù)先在平臺(tái)上的部署程序,產(chǎn)生一個(gè)證書(shū)文件,返回給生產(chǎn)工具軟件;
  • 生產(chǎn)工具軟件把證書(shū)文件通過(guò)串口發(fā)送給空氣凈化器設(shè)備;
  • 空氣凈化器設(shè)備接收到的證書(shū)文件之后,存儲(chǔ)到本地的文件系統(tǒng)中。
  • 以上這個(gè)流程是在設(shè)備生產(chǎn)環(huán)節(jié)完成的,這里的描述還是屬于粗線(xiàn)條的,其他一些重要的信息沒(méi)有列出來(lái),比如:AWS后臺(tái)如何產(chǎn)生證書(shū)、在連接階段后臺(tái)是如何通過(guò)證書(shū)來(lái)驗(yàn)證設(shè)備的合法性的、廠(chǎng)商的秘鑰是如何工作的等等,這些問(wèn)題等到這邊文章的末尾就自然明白了。

    下面,就按照這些概念之間的相互關(guān)系來(lái)一步一步的梳理,每一個(gè)概念是按照相互之間的關(guān)系來(lái)逐步引入的,因此建議按照順序來(lái)理解。

    數(shù)據(jù)加密

    明文傳輸?shù)娜秉c(diǎn)

    我們知道,client端與server端之間傳輸數(shù)據(jù),要么是明文傳輸、要么是加密傳輸。明文傳輸?shù)娜秉c(diǎn)顯而易見(jiàn):

    數(shù)據(jù)容易比第三方截獲;
    第三方可以篡改數(shù)據(jù);
    第三方可能會(huì)冒充server與你進(jìn)行通信。

    總之一句話(huà):明文通信就像裸奔一樣,任何東西都被別人看的一清二楚,惡意的第三方很容易利用明文通信來(lái)做一些違法的事情。

    所以,最好還是穿上衣服,最好還是帶密碼鎖的,這樣別人就看不到了!這就是加密傳輸。

    加密傳輸

    client端對(duì)傳輸?shù)男畔⑦M(jìn)行加密,server端接收到密文后再進(jìn)行解密。例如上圖中:

    client想發(fā)送字符串"hello",那么就先加密成"ifmmp",然后發(fā)送出去;
    server接收到"ifmmp",進(jìn)行解密,得到"hello"。

    但是示例中的加密方式太弱智了,稍微研究下就會(huì)搞明白,這里的加密方式就是把明文字符串中的每一個(gè)字符變成ascII碼表中的下一個(gè)字。server在解密時(shí)操作相反:把每一個(gè)字符變成ascII碼表中的前一個(gè)字符即可,只要client和server事先商量好這樣的加密和解密算法就可以通信了。

    但是,這樣的加密方式太簡(jiǎn)單了,惡意的第三方不會(huì)吹灰之力就可以破解出來(lái),因此client與server之間需要更加復(fù)雜的加密算法,這就是SSL要解決的問(wèn)題,這部分內(nèi)容稍后再表。

    加密方式

    根據(jù)是否可以把密文還原成明文,加密方式分為兩類(lèi):

    可逆加密;
    不可逆加密。

    剛才描述的加密、解密過(guò)程(“hello”->“ifmmp”->“hello”)是屬于可逆加密,也就是說(shuō)可以把密文還原成明文,主要應(yīng)用在通信場(chǎng)景中。如果一個(gè)密文不能還原成明文,就稱(chēng)為不可逆加密,不可逆加密也非常重要。

    可逆加密

    剛才已經(jīng)說(shuō)到,可逆加密就是可以把密文還原成明文,只要client端和server端商量好加密算法(例如剛才所說(shuō)的利用ascII表的下一個(gè)字符)就可以達(dá)到目的,也就是說(shuō):client端的加密算法和server端的解密算法是一樣的,當(dāng)然了這里的算法太簡(jiǎn)單。

    我們可以稍微復(fù)雜一點(diǎn)點(diǎn),先定義一個(gè)固定的字符串“258”,然后把明文"hello"中的每一個(gè)字符,用固定的字符串進(jìn)行計(jì)算:先加2,再減5,最后加8,得到加密后的字符串"mjqqt",server接收到之后再執(zhí)行相反操作就解密得到明文“hello”。從算法角度看,這兩個(gè)加密方式是一樣的,但是第二種算法利用了一個(gè)獨(dú)立的、固定的字符串“258”,這個(gè)字符串就叫做秘鑰,當(dāng)然,實(shí)際通信中使用的秘鑰更復(fù)雜。通信雙方是通過(guò)算法+秘鑰的方式來(lái)進(jìn)行加密和解密。而且,通信雙方使用的秘鑰是相同的,這就叫做對(duì)稱(chēng)加密

    既然存在對(duì)稱(chēng)加密,那肯定就存在非對(duì)稱(chēng)加密,也就是說(shuō),根據(jù)通信雙方使用的秘鑰是否相同,可逆加密分為2種:

  • 對(duì)稱(chēng)加密;
  • 非對(duì)稱(chēng)加密。
  • 對(duì)稱(chēng)加密常用算法有:DES、AES;非對(duì)稱(chēng)加密常用算法有:RSA、DH、ECC。

    對(duì)稱(chēng)加密的特點(diǎn):

  • 計(jì)算速度快;
  • 加密強(qiáng)度高;
  • 能處理的數(shù)據(jù)量大。
  • 非對(duì)稱(chēng)加密的特點(diǎn):

  • 效率低;
  • 能處理的數(shù)據(jù)量大小有限制。
  • 既然非對(duì)稱(chēng)加密的缺點(diǎn)這么明顯,那么它有什么作用呢?

    回到剛才的通信示例場(chǎng)景中:client與server需要使用同一個(gè)秘鑰“258”,那么它們雙方應(yīng)該如何協(xié)商得到這個(gè)對(duì)稱(chēng)秘鑰呢?難道是使用固定的秘鑰嗎?顯然這個(gè)答案不太可能,需要通信的設(shè)備那么多,不可能像網(wǎng)卡的MAC地址那樣預(yù)先分配,而且秘鑰很容易泄漏。因此,這個(gè)對(duì)稱(chēng)秘鑰一般都是在通信的剛開(kāi)始的握手階段,由client與server動(dòng)態(tài)的協(xié)商得到的。在這個(gè)協(xié)商的過(guò)程中,為了防止協(xié)商內(nèi)容被第三方截獲,就需要使用非對(duì)稱(chēng)加密來(lái)保證握手階段的數(shù)據(jù)安全性

    因?yàn)槲帐謹(jǐn)?shù)據(jù)只發(fā)生在通信的剛開(kāi)始階段,即使效率低一點(diǎn)也沒(méi)關(guān)系,安全比效率更重要

    一句話(huà):非對(duì)稱(chēng)加密在通信初始階段的協(xié)商過(guò)程中使用,用來(lái)得到一個(gè)對(duì)稱(chēng)秘鑰,這個(gè)協(xié)商過(guò)程就叫做握手,在后面的HTTPS通信過(guò)程中,我們?cè)僭敿?xì)看一下握手過(guò)程。

    不可逆加密

    顧名思義,不可逆加密就是說(shuō)把明文加密之后得到密文,但是不能從密文還原得到明文。從術(shù)語(yǔ)上來(lái)說(shuō),一般不把這個(gè)加密結(jié)果稱(chēng)作密文,而是稱(chēng)作摘要或者指紋

    不可逆加密原理:把一個(gè)任意大小的數(shù)據(jù),經(jīng)過(guò)一定的算法,轉(zhuǎn)換成規(guī)定長(zhǎng)度的輸出。如果數(shù)據(jù)的內(nèi)容發(fā)生了一絲絲的變化,再次加密就得到另一個(gè)不同的結(jié)果,而且是大不相同。從這個(gè)角度看,是不是稱(chēng)作指紋更形象一些?

    不可逆加密最常用的算法就是:MD5、SHA1。

    回想一下:我們?cè)谙螺d一些軟件的時(shí)候,在服務(wù)器上除了看到軟件的下載地址,一般還會(huì)看到該軟件的MD5碼。我們把軟件下載到本地之后,計(jì)算得到MD5,也就是文件的指紋,然后把這個(gè)MD5與服務(wù)器上公布的MD5進(jìn)行比較,如果這兩個(gè)MD5不一致,就說(shuō)明下載的文件被別人修改過(guò)。

    這是glib庫(kù)的下載頁(yè)面:

    補(bǔ)充:SHA相關(guān)知識(shí)

  • SHA

    SHA安全哈希算法,由美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院發(fā)布的一組加密函數(shù)。它是一種常用的摘要算法,就是輸入一段數(shù)據(jù),輸出合法的證書(shū)一個(gè)摘要信息,包括SHA0、SHA1、SHA2等不同的版本。
  • SHA1

    代表安全哈希算法1,接收輸入,輸出一個(gè)160位的哈希值,稱(chēng)作信息摘要。在2005年之后,SHA1被認(rèn)為不安全。
  • SHA2

    SHA2指的是具有兩個(gè)不同塊大小的相似哈希函數(shù)的族,其中包括:SHA256,SHA512。SHA256可以輸出一個(gè)256位的哈希值,安全級(jí)別更高。
  • 一個(gè)實(shí)際的使用場(chǎng)景:OTA升級(jí)

  • 首先服務(wù)器推送一個(gè)upgrate.json格式字符串給設(shè)備,文件中包括:新固件的下載地址URL,新固件的MD5值;
  • 設(shè)備根據(jù)URL下載新固件到本地;
  • 設(shè)備計(jì)算下載的新固件MD5值,與upgrade.json中的MD5值進(jìn)行比較;
  • 如果這兩個(gè)MD5值一致,說(shuō)明下載的固件沒(méi)有問(wèn)題,那么就開(kāi)始升級(jí)。
  • 再來(lái)了解一下不可逆加密的特點(diǎn)

  • 不可逆:除非使用窮舉等手段,原則上不存在根據(jù)密文推斷出原文的算法;
  • 雪崩效應(yīng):對(duì)輸入數(shù)據(jù)敏感,原始數(shù)據(jù)的極小改動(dòng)會(huì)造成輸出指紋的巨大差異;
  • 防碰撞:很難找到兩段不同的數(shù)據(jù),輸出相同的指紋。
  • 公鑰和私鑰

    上面說(shuō)到了非對(duì)稱(chēng)加密,那么就必須再補(bǔ)充一下私鑰和公鑰。從字面上就可以看出:它倆是一對(duì)兄弟,都是秘鑰,必須成對(duì)使用,稱(chēng)作:秘鑰對(duì)。我們可以通過(guò)一些軟件工具(例如:OpenSSL)生成自己的公鑰和私鑰。

    公鑰:就是公開(kāi)告訴別人的;私鑰:就是自己的,作為寶貝一樣自己私藏起來(lái),千萬(wàn)不要告訴別人

    公鑰和私鑰的作用有2個(gè):

  • 數(shù)據(jù)加密:公鑰加密,私鑰解密,用于通信場(chǎng)景;
  • 數(shù)字簽名:私鑰加密,公鑰解密,用于不可耍賴(lài)場(chǎng)景。
  • 數(shù)據(jù)加密就是上面描述的非對(duì)稱(chēng)加密,例如:

    張三想發(fā)一個(gè)文件給我,為了防止文件被其他人看到,于是張三用我的公鑰對(duì)文件進(jìn)行加密,然后把加密后的文件發(fā)給我。我拿到密文后,用我的私鑰就可以把密文還原成原始的文件,其他人即使拿到了密文,但是沒(méi)有我的私鑰,就解不開(kāi)文件。 如下面這張圖:

    數(shù)字簽名與我們?nèi)粘I钪械慕钘l上的簽名類(lèi)似,一旦簽名了,就具有法律效力,不能耍賴(lài)說(shuō):這個(gè)不是我簽名,我不認(rèn)。具體流程是:我寫(xiě)了一個(gè)文件,然后用我的私鑰對(duì)文件進(jìn)行加密,那么如果以后我耍賴(lài)說(shuō):這個(gè)文件不是我寫(xiě)的,其他人就可以用我的公鑰來(lái)嘗試對(duì)加密后的文件進(jìn)行解密。如果成功解密了,就說(shuō)明這個(gè)文件一定是用我的私鑰進(jìn)行加密的,而私鑰只有我才有,那就說(shuō)明這個(gè)文件一定是我寫(xiě)的。如下圖:

    證書(shū)

    前面談到了公鑰是公開(kāi)給別人的,本質(zhì)上就是一段數(shù)據(jù),那么這段數(shù)據(jù)是以什么樣的形式或者說(shuō)以什么樣的載體發(fā)送給別人的呢?答案就是:證書(shū)

    如何申請(qǐng)證書(shū)

    我們以一個(gè)網(wǎng)站為例,瀏覽器在訪(fǎng)問(wèn)網(wǎng)站的時(shí)候,在握手階段,網(wǎng)站會(huì)把自己的證書(shū)發(fā)送給瀏覽器。那么這個(gè)證書(shū)是如何產(chǎn)生的呢?

    Step1

    在網(wǎng)站上線(xiàn)之初,需要把自己的相關(guān)信息放在一個(gè)請(qǐng)求文件中(server.req),把請(qǐng)求文件發(fā)送給一個(gè)權(quán)威的認(rèn)證機(jī)構(gòu)。請(qǐng)求文件的內(nèi)容包括:

    網(wǎng)站的域名
    申請(qǐng)者信息
    公鑰
    以及其他一些相關(guān)信息

    Step2

    認(rèn)證機(jī)構(gòu)通過(guò)其他途徑來(lái)確定申請(qǐng)者是合法的。

    Step3

    認(rèn)證機(jī)構(gòu)使用某個(gè)算法,對(duì)請(qǐng)求文件server.req中的信息進(jìn)行計(jì)算,得到一個(gè)數(shù)字摘要

    算法包括:

    MD5
    SHA-1
    SHA-256

    信息包括:

    申請(qǐng)者的基本信息:網(wǎng)站使用的加密算法、網(wǎng)站使用的hash算法;
    申請(qǐng)者的公鑰;
    認(rèn)證機(jī)構(gòu)的信息:認(rèn)證機(jī)構(gòu)的名稱(chēng),證書(shū)到期時(shí)間。

    Step4

    認(rèn)證機(jī)構(gòu)用自己的私鑰,對(duì)Step3中得到的數(shù)字摘要進(jìn)行加密,得到數(shù)字簽名(也就證書(shū)簽名)

    Step5

    認(rèn)證機(jī)構(gòu)把以上這些信息進(jìn)行匯總,得到最終的證書(shū)文件server.crt,然后發(fā)給申請(qǐng)者。

    最終,證書(shū)server.crt中的內(nèi)容包括這幾個(gè)大類(lèi):

  • 申請(qǐng)者的基本信息:網(wǎng)站使用的加密算法、網(wǎng)站使用的hash算法;
  • 申請(qǐng)者的公鑰;
  • 認(rèn)證機(jī)構(gòu)的信息:認(rèn)證機(jī)構(gòu)的名稱(chēng),證書(shū)到期時(shí)間。
  • 認(rèn)證機(jī)構(gòu)的證書(shū)簽名。
  • 如何確認(rèn)證書(shū)的合法性

    現(xiàn)在,客戶(hù)端拿到了服務(wù)器發(fā)來(lái)的證書(shū)文件,應(yīng)該如何驗(yàn)證這是一個(gè)合法的證書(shū)呢?

    Step1

    讀取證書(shū)中的明文信息,包括:申請(qǐng)者的基本信息,申請(qǐng)者的公鑰,認(rèn)證機(jī)構(gòu)的信息。

    Step2

    瀏覽器或者操作系統(tǒng)中查找這個(gè)認(rèn)證機(jī)構(gòu)的相關(guān)信息,得到這個(gè)認(rèn)證機(jī)構(gòu)的公鑰。

    補(bǔ)充:瀏覽器或者操作系統(tǒng)中,一般都會(huì)預(yù)裝一些可信任的權(quán)威認(rèn)證機(jī)構(gòu)的證書(shū)列表,所以能拿到認(rèn)證機(jī)構(gòu)的公鑰

    Step3

    使用認(rèn)證機(jī)構(gòu)相同的算法,對(duì)Step1中的明文信息進(jìn)行計(jì)算,得到摘要1

    Step4

    使用認(rèn)證機(jī)構(gòu)的公鑰,對(duì)證書(shū)中認(rèn)證機(jī)構(gòu)的數(shù)字簽名進(jìn)行解密,得到摘要2

    Step5

    比較摘要1與摘要2是否相同,如果相同,說(shuō)明這個(gè)證書(shū)是合法的,也就證明當(dāng)前訪(fǎng)問(wèn)的是一個(gè)合法的服務(wù)器

    單向認(rèn)證和雙向認(rèn)證

    上面描述的認(rèn)證過(guò)程,是瀏覽器用來(lái)確認(rèn)所訪(fǎng)問(wèn)的網(wǎng)站是否是一個(gè)合法的網(wǎng)站;文章開(kāi)頭所舉的例子:一個(gè)物聯(lián)網(wǎng)產(chǎn)品在連接云平臺(tái)的時(shí)候,是云平臺(tái)來(lái)驗(yàn)證這個(gè)想連接進(jìn)來(lái)的設(shè)備是否為一個(gè)合法的設(shè)備。

    這兩個(gè)場(chǎng)景中都是單向認(rèn)證,也就是通信的一方來(lái)驗(yàn)證另一方是否合法。那么雙向認(rèn)證就很好理解了:通信的每一方都要認(rèn)證對(duì)方是否合法。

    至于如何選擇使用單向認(rèn)證或者雙向認(rèn)證,甚至是不使用證書(shū)(只使用用戶(hù)名和密碼來(lái)鑒權(quán)),這就需要根據(jù)實(shí)際的使用場(chǎng)景、安全等級(jí)、操作的難易程度來(lái)決定了。比如:在物聯(lián)網(wǎng)產(chǎn)品中,每一個(gè)產(chǎn)品都需要在生產(chǎn)階段把動(dòng)態(tài)生成的證書(shū)燒寫(xiě)到設(shè)備中,增加了生產(chǎn)環(huán)節(jié)的流程和成本,為了安全性,萬(wàn)萬(wàn)不可偷懶。如果沒(méi)有證書(shū)來(lái)驗(yàn)證,那么黑客就可以模擬無(wú)數(shù)個(gè)設(shè)備,頻繁的連接到云平臺(tái),這就存在極大的安全隱患。

    認(rèn)證機(jī)構(gòu)

    證書(shū)本質(zhì)上就是一個(gè)文件,只不過(guò)這個(gè)文件具有特殊的一個(gè)性質(zhì):可以被證明是合法的。那么應(yīng)該如何來(lái)證明呢?這就要來(lái)說(shuō)一下認(rèn)證機(jī)構(gòu)。

    認(rèn)證機(jī)構(gòu)(CA: Certificate Authority)是一個(gè)權(quán)威的組織,是被國(guó)家、行業(yè)認(rèn)可的權(quán)威結(jié)構(gòu),不是隨便一個(gè)機(jī)構(gòu)都有資格頒發(fā)證書(shū),不然也不叫做權(quán)威機(jī)構(gòu)。只要能證明一個(gè)證書(shū)是由CA機(jī)構(gòu)頒發(fā)的,我們就認(rèn)為這個(gè)證書(shū)是合法的,也就是說(shuō):證書(shū)的可信任性基于信任機(jī)制。

    就像銀行貸款給個(gè)人一樣,銀行在放款之前,會(huì)到征信系統(tǒng)中查詢(xún)這個(gè)人的信用報(bào)告,如果征信系統(tǒng)中表明這個(gè)人的信用沒(méi)有問(wèn)題,銀行相信征信系統(tǒng),所以銀行就相信這個(gè)人,可以貸款給他,這是一個(gè)信任鏈的傳遞

    CA認(rèn)證機(jī)構(gòu)就類(lèi)似于征信系統(tǒng),相當(dāng)于CA結(jié)構(gòu)給證書(shū)進(jìn)行了背書(shū),它保證從它手里頒發(fā)的證書(shū)都是合法有效的,那么我們只要能證明證書(shū)是從CA認(rèn)證機(jī)構(gòu)頒發(fā)的,就可以認(rèn)為證書(shū)是有效的

    證書(shū)鏈

    CA認(rèn)證機(jī)構(gòu)是一個(gè)樹(shù)狀的結(jié)構(gòu),最頂部的稱(chēng)為根認(rèn)證機(jī)構(gòu)。往下層是:二級(jí)認(rèn)證機(jī)構(gòu)、三級(jí)認(rèn)證機(jī)構(gòu)…。

    根認(rèn)證機(jī)構(gòu)給二級(jí)認(rèn)證機(jī)構(gòu)頒發(fā)證書(shū),二級(jí)認(rèn)證機(jī)構(gòu)給三級(jí)認(rèn)證結(jié)構(gòu)頒發(fā)證書(shū)…。不同等級(jí)的認(rèn)證機(jī)構(gòu)對(duì)審核的要求也不一樣,于是證書(shū)也分為免費(fèi)的、便宜的和貴的。

    你可能會(huì)問(wèn):那么根認(rèn)證機(jī)構(gòu)的證書(shū)是由誰(shuí)簽名的?答案是:根認(rèn)證機(jī)構(gòu)自己簽名的,這也叫做自簽名。因?yàn)楦J(rèn)證機(jī)構(gòu)是由國(guó)家或者行業(yè)組織認(rèn)可的,已經(jīng)是一個(gè)可以信賴(lài)的權(quán)威機(jī)構(gòu),所以可以為自己簽名。

    另外,我們?cè)跍y(cè)試的過(guò)程中,也常常利用OpenSSL中提供的程序來(lái)產(chǎn)生自簽名的證書(shū),當(dāng)然,這個(gè)測(cè)試的自簽名證書(shū)只能你自己玩,因?yàn)閯e人不信任你

    證書(shū)文件的后綴名

    剛接觸到證書(shū)概念的小伙伴,常常被眼花繚亂的后綴名所迷惑。

    首先要明確一點(diǎn):證書(shū)文件的后綴名只是為了見(jiàn)名識(shí)意,實(shí)際上可以取任意的名字。常見(jiàn)的后綴名包括:

    .crt:per格式的證書(shū)
    .der: der格式的證書(shū)
    .key:pem格式的私鑰
    .pub:pem格式的公鑰
    .req:申請(qǐng)證書(shū)時(shí)發(fā)送給CA認(rèn)證機(jī)構(gòu)的請(qǐng)求文件
    .csr:也表示請(qǐng)求文件

    證書(shū)文件的格式

    所有證書(shū)內(nèi)容格式有兩種:pem格式和der格式,這兩種格式的證書(shū)文件可以相互轉(zhuǎn)換,利用OpenSSL中的程序就可以完成。

    PEM格式(Privacy Enhanced Mail)

    pem格式的證書(shū)內(nèi)容是經(jīng)過(guò)加密的文本文件,一般是base64格式,可以用記事本來(lái)打開(kāi)一個(gè)base64格式的證書(shū),例如下面這個(gè)證書(shū)文件的內(nèi)容:

    -----BEGIN CERTIFICATE----- MIIGbzCCBFegAwIBAgIICZftEJ0fB/wwDQYJKoZIhvcNApQELBQAwfDELMAkGA1UE BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp ... Nztr2Isaaz4LpMEo4mGCiGxec5mKr1w8AE9n6D91CvxR5/zL1VU1JCVC7sAtkdki vnN1/6jEKFJvlUr5/FX04JXeomIjXTI8ciruZ6HIkbtJup1n9Zxvmr9JQcFTsP2c bRbjaT7JD6MBidAWRCJWClR/5etTZwWwWrRCrzvIHC7WO6rCzwu69a+l7ofCKlWs y702dmPTKEdEfwhgLx0LxJr/Aw== -----END CERTIFICATE-----

    補(bǔ)充:base64算法就是把原始數(shù)據(jù)中按照每3個(gè)字節(jié)進(jìn)行拆分,3個(gè)字節(jié)是24bit,然后把24bit分成4組,每組6bit,最后在每個(gè)6bit的簽名添加2個(gè)0,這樣得到的4組字節(jié)碼就可以用ascII碼來(lái)表示了。

    DER格式(Distinguished Encoding Rules)

    der格式的證書(shū)文件內(nèi)容是經(jīng)過(guò)加密的二進(jìn)制數(shù)據(jù),也就是說(shuō)文件內(nèi)容打開(kāi)后是亂碼。

    X.509標(biāo)準(zhǔn)

    上面說(shuō)到證書(shū)中包含了必要的信息,那么這些信息在文件中并不是隨意擺放的,而是要根據(jù)固定的格式來(lái)存儲(chǔ),只有這樣才能通過(guò)軟件生成或解析。
    那么這個(gè)固定的格式是由誰(shuí)來(lái)規(guī)定的呢?這就是X.509標(biāo)準(zhǔn)與公共秘鑰證書(shū)

    X.509是一個(gè)體系、標(biāo)準(zhǔn),用來(lái)規(guī)定一個(gè)證書(shū)的格式標(biāo)準(zhǔn),CA認(rèn)證結(jié)構(gòu)在生成證書(shū)的時(shí)候,就根據(jù)這個(gè)標(biāo)準(zhǔn)把每部分信息寫(xiě)入到證書(shū)文件中。

    X.509包括3個(gè)版本:V1, V2和V3。每一個(gè)版本中頒發(fā)證書(shū)時(shí),必須包含下列信息:

    版本號(hào):用來(lái)區(qū)分版本;
    系列號(hào):由CA認(rèn)證機(jī)構(gòu)給每一個(gè)證書(shū)分配一個(gè)唯一的數(shù)字編號(hào);
    算法簽名標(biāo)識(shí)符:用來(lái)指定CA認(rèn)證機(jī)構(gòu)在頒發(fā)證書(shū)時(shí)使用的簽名算法;
    認(rèn)證機(jī)構(gòu):頒發(fā)證書(shū)的機(jī)構(gòu)唯一名稱(chēng);
    有效期限:證書(shū)有效期(開(kāi)始時(shí)間和結(jié)束時(shí)間);
    主題信息:證書(shū)持有人的基本信息;
    公鑰信息:證書(shū)持有者的公鑰;
    認(rèn)證結(jié)構(gòu)簽名:以確保這個(gè)證書(shū)在頒發(fā)之后沒(méi)有被篡改過(guò);

    證書(shū)格式

    總之:證書(shū)的核心功能就是安全的傳遞公鑰!

    OpenPGP協(xié)議/標(biāo)準(zhǔn)

    加密和證書(shū)的概念介紹完了,再來(lái)了解一個(gè)行業(yè)標(biāo)準(zhǔn):OpenPGP

    OpenPGP是什么?

    OpenPGP是一種非專(zhuān)有協(xié)議,為加密消息、簽名、私鑰和用于交換公鑰的證書(shū)定義了統(tǒng)一標(biāo)準(zhǔn)。

    OpenPGP協(xié)議的實(shí)現(xiàn)

    OpenPGP協(xié)議有2個(gè)實(shí)現(xiàn)

  • PGP(Pretty Good Privacy)
  • GPG(GNU Privacy Guard)
  • PGP是一個(gè)加密程序,為數(shù)據(jù)通信提供了加密和驗(yàn)證功能,通常用于簽名、加密和解密文本、電子郵件和文件。

    GPG是PGP的開(kāi)源實(shí)現(xiàn)

    OpenPGP的使用流程

    Step1: 公布自己的公鑰

    每個(gè)人把自己的公鑰上傳到公鑰服務(wù)器上(subkeys.pgp.net),然后通過(guò)交換機(jī)制,所有的公鑰服務(wù)器最終都會(huì)包含你的公鑰,就類(lèi)似域名服務(wù)器同步域名解析信息一樣。

    由于公鑰服務(wù)器沒(méi)有檢查機(jī)制,任何人都可以用我的名義上傳公鑰,所以沒(méi)有辦法來(lái)保證服務(wù)器上的公鑰一定是可靠性。通常,我可以在網(wǎng)站上公布一個(gè)公鑰指紋,讓其他人下載我的公鑰之后,計(jì)算一下公鑰指紋,然后與我公布的指紋進(jìn)行比對(duì),以此來(lái)確認(rèn)證書(shū)的有效性。

    Step2: 獲取別人的公鑰

    為了獲得別人的公鑰,可以讓對(duì)方直接發(fā)給我,也可以從公鑰服務(wù)器上下載。為了安全起見(jiàn),需要對(duì)下載的公鑰使用其他機(jī)制進(jìn)行安全認(rèn)證,例如剛才說(shuō)的指紋。

    Step3: 用于加密

    用對(duì)方的公鑰加密文件,發(fā)送給對(duì)方,對(duì)方用他自己的私鑰進(jìn)行解密。

    Step4: 用于簽名

    用我的私鑰進(jìn)行加密,把加密后文件發(fā)送給對(duì)方,對(duì)方用我的公鑰進(jìn)行解密,只要能正確解密,就證明這個(gè)文件的確是我加密的。

    SSL/TLS

    SSL全稱(chēng)是Secure Socket Layer(安全套階層協(xié)議),它是一個(gè)安全協(xié)議,目的是用來(lái)為互聯(lián)網(wǎng)提供安全的數(shù)據(jù)傳輸。

    SSL在工作過(guò)程中,就利用了前面描述的概念:對(duì)稱(chēng)加密、非對(duì)稱(chēng)加密、證書(shū)等。如果前面的概念都梳理清楚了,那么理解SSL也就不成問(wèn)題了。

    SSL協(xié)議有1,2,3這個(gè)三個(gè)版本,TLS是SSL V3標(biāo)準(zhǔn)化之后的產(chǎn)物。事實(shí)上現(xiàn)在用的都是TLS,但是大家都習(xí)慣了SSL這個(gè)稱(chēng)呼。

    協(xié)議分層

    SSL協(xié)議最大的優(yōu)點(diǎn)就是與應(yīng)用層無(wú)關(guān),在SSL協(xié)議的上層,可以運(yùn)行一些高層應(yīng)用協(xié)議,例如:HTTP, FTP, TELNET…,也就是說(shuō)這些高層協(xié)議可以透明的建立在SSL協(xié)議層之上。

    握手過(guò)程

    SSL使用X.509標(biāo)準(zhǔn),握手就是指客戶(hù)端與服務(wù)端在通信的開(kāi)始階段進(jìn)行鑒權(quán)和協(xié)商,最終目的是:

  • 確認(rèn)對(duì)方是合法的通信對(duì)象;
  • 與對(duì)方協(xié)商得到對(duì)稱(chēng)加密秘鑰。
  • 我們來(lái)一步一步梳理握手過(guò)程:

    Step1

    Client向Server發(fā)送如下信息:

    隨機(jī)數(shù)1;
    Client端支持的SSL版本號(hào);
    Client端支持的加密算法列表。

    Step2

    Server分析接收到的信息,返回如下信息給Client:

    隨機(jī)數(shù)2;
    選擇的加密算法;
    Server證書(shū)

    Step3

    Client端驗(yàn)證Server發(fā)來(lái)的證書(shū)是否有效,具體過(guò)程上面已經(jīng)描述過(guò)。

    如果驗(yàn)證失敗,通信結(jié)束
    如果驗(yàn)證通過(guò),就產(chǎn)生隨機(jī)數(shù)3,并使用剛才的隨機(jī)數(shù)1、隨機(jī)數(shù)2,然后用選擇的算法生成一個(gè)對(duì)稱(chēng)加密秘鑰,這個(gè)秘鑰就用于后面正常的數(shù)據(jù)通信中。

    然后發(fā)送如下信息給Server:

    隨機(jī)數(shù)3,并且用server證書(shū)中的公鑰進(jìn)行加密;

    此時(shí),Cliend端的握手流程結(jié)束,因?yàn)橐呀?jīng)達(dá)到了握手的最終目的:確認(rèn)Server合法,得到對(duì)稱(chēng)加密秘鑰。

    Step4

    Server端在接收到加密后的隨機(jī)數(shù)3時(shí),用自己的私鑰進(jìn)行解密,然后和之前的隨機(jī)數(shù)1、隨機(jī)數(shù)2一起,使用相同的算法生成對(duì)稱(chēng)加密秘鑰

    至此,Server端的握手過(guò)程也就結(jié)束,下面就可以用對(duì)稱(chēng)加密秘鑰來(lái)對(duì)數(shù)據(jù)進(jìn)行加密了

    注意:上面描述的握手過(guò)程中是單向認(rèn)證,也就是Client端驗(yàn)證Server是否合法的
    如果需要雙向認(rèn)證,那么客戶(hù)端也應(yīng)該把自己的證書(shū)發(fā)送給Server,然后Server來(lái)驗(yàn)證這個(gè)證書(shū)是否合法,確認(rèn)證書(shū)合法之后才繼續(xù)執(zhí)行后面面的握手流程。

    HTTPS與SSL的關(guān)系

    HTTPS拆開(kāi)來(lái)就是:HTTP+SSL,就是在HTTP的下面增加了SSL安全傳輸協(xié)議層,在瀏覽器連接到服務(wù)器之后,就執(zhí)行上面描述的SSL握手過(guò)程。握手結(jié)束之后,雙方得到對(duì)稱(chēng)加密秘鑰,在HTTP協(xié)議看來(lái)是明文傳輸數(shù)據(jù),下面的SSL層對(duì)數(shù)據(jù)進(jìn)行加密和解密。

    OpenSSL

    OpenSSL是什么?

    上面描述的SSL中這么多的東西都是協(xié)議(或者稱(chēng)為標(biāo)準(zhǔn)),協(xié)議只是規(guī)定了應(yīng)該怎么做,但是具體的代碼實(shí)現(xiàn)應(yīng)該由誰(shuí)來(lái)做呢?我們?cè)趯?xiě)相關(guān)的SSL程序時(shí)好像從來(lái)沒(méi)有實(shí)現(xiàn)過(guò)這個(gè)協(xié)議,都是直接調(diào)用第三方提供的庫(kù)就達(dá)到了加密傳輸?shù)哪康摹.?dāng)然了,如果你實(shí)現(xiàn)過(guò)SSL協(xié)議,請(qǐng)?jiān)试S我對(duì)你表示佩服,給你一萬(wàn)個(gè)贊!

    在編程領(lǐng)域,永遠(yuǎn)都存在熱心腸的人!OpenSSL就是一個(gè)免費(fèi)的SSL/TLS實(shí)現(xiàn),就是說(shuō):OpenSSL實(shí)現(xiàn)了SSL/TLS協(xié)議中定義的所有功能,包括:

    SSL2
    SSL3
    TLSv1
    TLSv1.1
    TLSv1.2

    而且,OpenSSL是用C語(yǔ)言開(kāi)發(fā)的,具有優(yōu)秀的跨平臺(tái)特性,在Linux、Windows、BSD、MAC等平臺(tái)上可以執(zhí)行。

    具體來(lái)說(shuō),OpenSSL實(shí)現(xiàn)中,包括下面幾個(gè)功能模塊

    密碼算法庫(kù)

    密碼算法庫(kù)中包括:

    對(duì)稱(chēng)加密算法: AES、DES等。
    非對(duì)稱(chēng)加密算法: DH、RSA、DSA、EC等。

    信息摘要算法

    信息摘要算法包括:MD5、SHA等。

    秘鑰和證書(shū)管理

    OpenSSL提供的CA應(yīng)用程序就是一個(gè)小型的證書(shū)管理中心,實(shí)現(xiàn)了證書(shū)簽發(fā)的整個(gè)流程和證書(shū)管理的大部分機(jī)制,我們?cè)趯W(xué)習(xí)的時(shí)候一般都會(huì)用OpenSSL中提供的CA程序來(lái)生成秘鑰對(duì)、自簽名等等。具體的內(nèi)容包括:

    證書(shū)秘鑰產(chǎn)生、請(qǐng)求產(chǎn)生、證書(shū)簽發(fā)、吊銷(xiāo)和驗(yàn)證功能;
    對(duì)證書(shū)的X.509標(biāo)準(zhǔn)解碼、PKCS#12/PKCS#7格式的編解碼;
    提供了產(chǎn)生各種秘鑰對(duì)的函數(shù);

    SSL協(xié)議庫(kù)

    實(shí)現(xiàn)了SSLv2、SSLv3、TLSv1.0協(xié)議。

    應(yīng)用程序

    OpenSSL的應(yīng)用程序是基于密碼算法庫(kù)和SSL協(xié)議庫(kù)實(shí)現(xiàn)的,是非常好的OpenSSL的API函數(shù)使用范例,主要包括:秘鑰生成、證書(shū)管理、格式轉(zhuǎn)換、數(shù)據(jù)加密和簽名、SSL測(cè)試以及其他輔助配置功能

    OpenSSH又是什么?

    SSH

    首先說(shuō)一下SSH:Secure Shell(安全外殼協(xié)議),又是一個(gè)協(xié)議,用來(lái)實(shí)現(xiàn)遠(yuǎn)程登錄系統(tǒng),我們通常利用SSH來(lái)傳輸命令行界面和遠(yuǎn)程執(zhí)行命令。

    比如:在調(diào)試一個(gè)ARM系統(tǒng)時(shí),可以通過(guò)串口助手連接到ARM板子上;但是更常用的調(diào)試場(chǎng)景是在PC機(jī)上遠(yuǎn)程登錄到ARM系統(tǒng)中,執(zhí)行ARM中的任何指令,這就是利用SSH來(lái)實(shí)現(xiàn)的。

    SSH提供2種級(jí)別的安全驗(yàn)證:

    基于密碼;
    基于秘鑰。

    SSH中基于口令的安全驗(yàn)證

    只需要知道賬號(hào)和密碼,就可以遠(yuǎn)程登錄到系統(tǒng),我們一般常用的就是這用方式。但是不能保證我正在連接的設(shè)備就是我想連接的那臺(tái)設(shè)備,可能會(huì)有別的服務(wù)器冒充真正的服務(wù)器,也就是受到“中間人”這種方式的攻擊。

    當(dāng)然還經(jīng)常遇到另一種錯(cuò)誤:在局域網(wǎng)中有多臺(tái)設(shè)備,本想遠(yuǎn)程連接到設(shè)備A中,由于IP地址記錯(cuò)了,結(jié)果遠(yuǎn)程登錄到另外一臺(tái)設(shè)備B上了,如果你的同事也正在調(diào)試設(shè)備B,接下來(lái)就是悲劇發(fā)生的時(shí)刻!

    SSH中基于秘鑰的安全認(rèn)證

    Step1

    首先為自己創(chuàng)建一個(gè)秘鑰對(duì),并提前把公鑰放在需要訪(fǎng)問(wèn)的服務(wù)器上,例如:放在賬號(hào)的家目錄中。

    Step2

    通過(guò)客戶(hù)端遠(yuǎn)程登錄到服務(wù)器,把自己的公鑰發(fā)給服務(wù)器,并請(qǐng)服務(wù)器進(jìn)行安全驗(yàn)證。

    Step3

    服務(wù)器接收到請(qǐng)求后,在登錄賬號(hào)的家目錄下查找公鑰,然后與接收到的公鑰進(jìn)行比對(duì)。

    Step4

    如果比對(duì)不一致,通信結(jié)束;如果比對(duì)一致,服務(wù)器就用公鑰加密一段數(shù)據(jù)(challenge),并發(fā)送給客戶(hù)端。

    Step5

    客戶(hù)端接收到challenge,用私鑰進(jìn)行解密,然后把結(jié)果發(fā)給服務(wù)器。

    Step6

    服務(wù)器把接收到的結(jié)果與Step4中的數(shù)據(jù)進(jìn)行比對(duì),如果一致則驗(yàn)證通過(guò)。

    SSH協(xié)議的實(shí)現(xiàn)

    既然SSH是一個(gè)協(xié)議,那么就一定存在對(duì)應(yīng)的實(shí)現(xiàn),這就是OpenSSH,它是一個(gè)免費(fèi)開(kāi)源的SSH實(shí)現(xiàn)

    OpenSSH實(shí)現(xiàn)中,利用了OpenSSL中的加密和算法庫(kù)函數(shù),這就是它倆之間的關(guān)系。

    總結(jié)

    到這里,與加密、證書(shū)相關(guān)的基礎(chǔ)概念都介紹完畢了,不知道你是否有所收獲。

    如果你是初次接觸到這些東西,敬請(qǐng)放心,即使現(xiàn)在明白了,一個(gè)星期之后肯定忘記一多半了。只有經(jīng)歷過(guò)幾個(gè)項(xiàng)目的歷練之后,才會(huì)有更深刻的理解和記憶,最后,祝您好運(yùn)!


    如果覺(jué)得文章不錯(cuò),請(qǐng)轉(zhuǎn)發(fā)、分享給您的朋友。

    我會(huì)把十多年嵌入式開(kāi)發(fā)中的項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)進(jìn)行總結(jié)、分享,相信不會(huì)讓你失望的!

    轉(zhuǎn)載:歡迎轉(zhuǎn)載,但未經(jīng)作者同意,必須保留此段聲明,必須在文章中給出原文連接。




    推薦閱讀

    [1] 原來(lái)gdb的底層調(diào)試原理這么簡(jiǎn)單
    [2] 生產(chǎn)者和消費(fèi)者模式中的雙緩沖技術(shù)
    [3] 深入LUA腳本語(yǔ)言,讓你徹底明白調(diào)試原理
    [4] 一步步分析-如何用C實(shí)現(xiàn)面向?qū)ο缶幊?/p>

    總結(jié)

    以上是生活随笔為你收集整理的关于加密、证书的那些事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。