国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

簡(jiǎn)述 HTTPS 證書認(rèn)證

why_rookie / 735人閱讀

摘要:個(gè)人信息交換格式,也稱為支持安全存儲(chǔ)證書私鑰和證書路徑中的所有證書。由,標(biāo)準(zhǔn)定義,以作為證書文件后綴名。加密消息語法標(biāo)準(zhǔn),格式支持證書的存儲(chǔ)和認(rèn)證路徑中的所有證書。客戶端的證書也采用根證書簽名,服務(wù)器端對(duì)客戶端進(jìn)行證書認(rèn)證。

前言

在我們不論是對(duì)服務(wù)器還是客戶端進(jìn)行 HTTPS 進(jìn)行配置時(shí),首先需要準(zhǔn)備好的肯定是相關(guān)證書文件了,而證書文件是什么又從哪里可以獲取到相關(guān)證書,并且它們又是什么關(guān)系,最后它們?cè)趺丛谕ㄓ嵵衅鹱饔媚兀靠赡芎芏嗳硕疾皇呛芟到y(tǒng)的清楚這一塊;趁現(xiàn)在有空整理出來給大家入門了解下。

名詞解釋

RSA:它是一種非對(duì)稱的加密算法,里面密鑰是一對(duì)的,分別是公鑰和私鑰;一般公鑰是由私鑰生成的;公鑰就是公開的密鑰,可以公開給大家的,而私鑰則是需要自己保管好的不能公開的密鑰;它們互相解密,即用公鑰加密用私鑰加密,反之亦然。

數(shù)字簽名:數(shù)字簽名不是用來加解密數(shù)據(jù)的,而是用來驗(yàn)證數(shù)據(jù)正確性,判斷是否被篡改,場(chǎng)景就類似在一篇文章上簽上自己的名字供給別人驗(yàn)證文章是你撰寫的;而數(shù)字簽名就是利用私鑰對(duì)原始數(shù)據(jù)的摘要(Hash 值)進(jìn)行加密出來的。

數(shù)字證書:從名字來說就可以看出來,數(shù)字證書和數(shù)字簽名很相似,但是不要把兩者混淆,數(shù)字證書的生成是用到了數(shù)字簽名的技術(shù)而已;數(shù)字證書一般由可信的權(quán)威機(jī)構(gòu) CA 證書授權(quán)(Certificate Authority)中心頒發(fā)的。持有人將公鑰以及身份信息發(fā)送給 CA 機(jī)構(gòu)進(jìn)行頒發(fā)生成證書,證書文件中包括持有人公鑰、身份信息以及 CA 機(jī)構(gòu)用其 CA 的私鑰對(duì)其進(jìn)行的數(shù)字簽名(后面握手連接中會(huì)用到 CA 自身的數(shù)字證書中的公鑰對(duì)其進(jìn)行校驗(yàn),這個(gè)證書叫做 CA 根證書,一般都集成在操作系統(tǒng)中),一般是最常見格式由X.509定義。

CSR:是 Certificate Signing Request 的縮寫,即證書簽名請(qǐng)求,這不是證書,可以簡(jiǎn)單理解成公鑰,生成證書時(shí)要把這個(gè)提交給權(quán)威的證書頒發(fā)機(jī)構(gòu)。

CRT:即 certificate 的縮寫,即證書。

X.509:是一種證書格式,對(duì) X.509 證書來說,認(rèn)證者總是 CA 或由 CA 指定的人,一份 X.509 證書是一些標(biāo)準(zhǔn)字段的集合,這些字段包含有關(guān)用戶或設(shè)備及其相應(yīng)公鑰的信息。X.509 的證書文件,一般以 .crt 為后綴名,根據(jù)該文件的內(nèi)容編碼格式,可以分為二種格式:PEM - Privacy Enhanced Mail,打開看文本格式以 "-----BEGIN..."、"-----END..." 開頭和結(jié)尾,內(nèi)容是 Base64 編碼,文件名以 .pem、.crt、.cer 為后綴名;Apache 和 Nginx 服務(wù)器偏向于使用這種編碼格式;DER - Distinguished Encoding Rules,打開看是二進(jìn)制格式,不可讀,文件名以 .der、.crt、.cer 為后綴名;Java 和 Windows 服務(wù)器偏向于使用這種編碼格式。從后綴名看出 CER 和 CRT 擴(kuò)展幾乎是同義詞。

PKCS #12:個(gè)人信息交換格式(PFX,也稱為PKCS 12)支持安全存儲(chǔ)證書、私鑰和證書路徑中的所有證書。PKCS 12格式是唯一可用于導(dǎo)出證書及其私鑰的文件格式。由 Public Key Cryptography Standards #12,PKCS#12 標(biāo)準(zhǔn)定義,以 .pfx、.p12 作為證書文件后綴名。

PKCS #7:加密消息語法標(biāo)準(zhǔn)(PKCS #7),PKCS 7 格式支持證書的存儲(chǔ)和認(rèn)證路徑中的所有證書。

正文 獲取證書

為了獲取證書前,我們需要生成自己的一對(duì)公鑰和私鑰。在這里我們會(huì)使用到一個(gè)叫做 OpenSSL 的工具庫。

自簽名證書,無 CA 簽名

生成密鑰與證書

# 生成私鑰文件
$ openssl genrsa -out server.key 2048
# 也可以通過指定加密算法來生成加密的文件,通過 "openssl genrsa -help" 查看支持的算法
$ openssl genrsa -aes128 -out server.key 2048

# 生成證書文件
$ openssl req -new -x509 -days 3650 
    -subj "/C=CN/L=Guangzhou/O=Guangzhou Example Technology Co., Ltd/CN=example.com" 
    -key server.key -out server.crt

# e.g. 百度的證書中的身份信息
CN = baidu.com  # Common Name(證書所請(qǐng)求的域名)
O = Beijing Baidu Netcom Science Technology Co., Ltd # Organization Name
OU = service operation department   # Organization Unit Name
L = beijing     # Locality Name
S = beijing     # Sate or Province Name
C = CN          # Country Name
CA 簽名證書(非機(jī)構(gòu))
# 生成 CA 根證書
$ openssl genrsa -out ca.key 2048
$ openssl req -new -x509 -days 3650 
    -subj "/C=CN/L=Guangzhou/O=CA Technology Co., Ltd/CN=XXX Global Root CA" 
    -key ca.key -out ca.crt

# 生成 .csr 證書簽名請(qǐng)求文件
$ openssl req -new 
    -subj "/C=CN/L=Guangzhou/O=Guangzhou Example Technology Co., Ltd/CN=example.com" 
    -key server.key 
    -out server.csr
# 使用 CA 根證書頒發(fā)服務(wù)器證書
$ openssl x509 -req -sha256 
    -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 
    -in server.csr 
    -out server.crt
它們的關(guān)系與作用

在 HTTP 協(xié)議傳輸下,數(shù)據(jù)都是以明文進(jìn)行傳輸,數(shù)據(jù)安全性得不到保障;使用 HTTPS 加密通訊后,數(shù)據(jù)保密和不可篡都得到進(jìn)一步的保障;根據(jù) HTTPS 服務(wù)器不同的配置方式,安全性也是不盡相同,下面就是常見的 3 種方式:

無 CA 簽名服務(wù)器證書

這種方式需要提前將服務(wù)器的證書告知客戶端,這樣客戶端在鏈接服務(wù)器時(shí)才能進(jìn)行對(duì)服務(wù)器證書認(rèn)證。

通訊過程(簡(jiǎn)化)

client ----(tcp three way handshake)-----> server
client ----(Client Hello)-----> server
client <----(Server Hello,public key)----- server
client (通過事先保存本地的 server.crt 和服務(wù)器發(fā)過來的 server.crt 進(jìn)行比較)
client ----(客戶端生成對(duì)稱密鑰,通過 server.crt 提取 public key 進(jìn)行加密發(fā)送)-----> server
client ----(密鑰交換后,按照對(duì)稱密鑰進(jìn)行加密通訊)-----> server

在復(fù)雜的網(wǎng)絡(luò)環(huán)境中,服務(wù)器證書的傳輸本身也是一個(gè)非常危險(xiǎn)的問題。如果在中間某個(gè)環(huán)節(jié),服務(wù)器證書被監(jiān)聽或替換那么對(duì)服務(wù)器的認(rèn)證也將不再可靠。

CA 簽名服務(wù)器證書

為了避免證書的傳遞過程中被篡改,可以通過一個(gè)安全可靠的 CA 根證書分別對(duì)服務(wù)器和客戶端的證書進(jìn)行簽名。這樣客戶端或服務(wù)器在收到對(duì)方的證書后可以通過根證書進(jìn)行驗(yàn)證證書的有效性。

通訊過程(簡(jiǎn)化)

client ----(tcp three way handshake)-----> server
client ----(Client Hello)-----> server
client <----(Server Hello,public key)----- server
client (通過 CA 根證書對(duì)服務(wù)器發(fā)過來的 server.crt 進(jìn)行合法性驗(yàn)證)
client ----(客戶端生成對(duì)稱密鑰,通過 public key 進(jìn)行加密發(fā)送)-----> server
client ----(密鑰交換后,按照對(duì)稱密鑰進(jìn)行加密通訊)-----> server
雙向 CA 簽名證書

上面 2 種都是由客戶端單向驗(yàn)證的,這種則是客戶端服務(wù)器雙向相互驗(yàn)證。

客戶端通過引入一個(gè) CA 根證書和服務(wù)器的名字來實(shí)現(xiàn)對(duì)服務(wù)器進(jìn)行驗(yàn)證。客戶端在連接服務(wù)器時(shí)會(huì)首先請(qǐng)求服務(wù)器的證書,然后使用 CA 根證書對(duì)收到的服務(wù)器端證書進(jìn)行驗(yàn)證。客戶端的證書也采用 CA 根證書簽名,服務(wù)器端對(duì)客戶端進(jìn)行證書認(rèn)證。

通訊過程(簡(jiǎn)化)

client ----(tcp three way handshake)-----> server
client ----(Client Hello)-----> server
client <----(Server Hello,public key)----- server
client (通過 CA 根證書對(duì)服務(wù)器發(fā)過來的 server.crt 進(jìn)行合法性驗(yàn)證)
client ----(客戶端生成對(duì)稱密鑰,通過 public key 進(jìn)行加密發(fā)送,并發(fā)送客戶端 client.crt)-----> server
server (服務(wù)端使用 CA 根證書對(duì) client.crt 進(jìn)行做法性校驗(yàn))
client ----(密鑰交換后,按照對(duì)稱密鑰進(jìn)行加密通訊)-----> server

這種常見于網(wǎng)銀系統(tǒng)等交易系統(tǒng)的網(wǎng)站或者 API 使用,確保客戶端攜帶證書進(jìn)行訪問;當(dāng)無證書的客戶端無法進(jìn)行訪問,當(dāng)訪問時(shí)會(huì)出現(xiàn) 400 Bad Reques

瀏覽器證書導(dǎo)入需要裝換為 PKCS #12 證書文件才能導(dǎo)入,命令如下:

openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx
# 輸入口令,導(dǎo)入證書后再請(qǐng)求則會(huì)彈出選擇證書的選項(xiàng)就正常訪問了
Nginx 配置 etc. 從 JKS 文件中提取服務(wù)證書

說明:JKS 文件擴(kuò)展名是 .jks 或 .keystore

查看jks文件中的entry

keytool -list -keystore server.jks

將”.jks”轉(zhuǎn)為”.p12”(PKCS12格式的證書庫)

keytool -importkeystore -srckeystore server.jks -srcalias tomcat -destkeystore server.p12 -deststoretype PKCS12

得到配置服務(wù)器使用的 server.crtserver.keyca.crt 文件

openssl pkcs12 -in server.p12 -nodes -nocerts -out server.key
openssl pkcs12 -in server.p12 -nodes -nokeys -clcerts -out server.crt
openssl pkcs12 -in server.p12 -nodes -nokeys -cacerts -out ca.crt

使用加密的私鑰配置 Nginx 支持 SSL 時(shí),并使用下面命令去除私鑰必須的口令(否則 start、reload 都得輸入密碼)

$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
Nginx 配置
server {
    listen       443 ssl;
    server_name  localhost;

    ssl                  on;
    ssl_certificate      ../cert/server.crt;
    ssl_certificate_key  ../cert/server.key;
    
    ssl_client_certificate ../cert/ca.crt;
    ssl_verify_client on;

    ssl_session_timeout  5m;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    location / {
     proxy_redirect off;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://localhost:8080;
    }
}
參考

RSA (cryptosystem):https://en.wikipedia.org/wiki...

Digital signature:https://en.wikipedia.org/wiki...

Public key certificate:https://en.wikipedia.org/wiki...

Subject Alternative Name:https://en.wikipedia.org/wiki...

使用 OpenSSL 制作一個(gè)包含 SAN(Subject Alternative Name)的證書:https://my.oschina.net/sskxyz...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/40120.html

相關(guān)文章

  • PHPer面試指南-協(xié)議篇

    摘要:地址每次面試多多少少都會(huì)被問到等等之類協(xié)議,協(xié)議相關(guān)的問題也可以說是面試必備,所以我把這些知識(shí)單獨(dú)收集成了一篇文章。即標(biāo)志位和標(biāo)志位均為。發(fā)送完畢后,服務(wù)器端進(jìn)入狀態(tài)。認(rèn)證服務(wù)器對(duì)客戶端進(jìn)行認(rèn)證以后,確認(rèn)無誤,同意發(fā)放令牌。 Git 地址:https://github.com/todayqq/PH... 每次面試多多少少都會(huì)被問到 HTTP、HTTPS、TCP、Socket、 OAu...

    megatron 評(píng)論0 收藏0
  • HTTP就是這么簡(jiǎn)單

    摘要:是不保存狀態(tài)的協(xié)議是無狀態(tài)的,也就是說,它是不對(duì)通信狀態(tài)進(jìn)行保存的。提升傳輸效率在說明之前,首先我們要知道什么是實(shí)體主體實(shí)體主體就是作為數(shù)據(jù)在中傳輸?shù)臄?shù)據(jù)。一般地,實(shí)體主體可以等價(jià)為報(bào)文主體,報(bào)文主體是中的一部分。 為什么要學(xué)HTTP? 我們絕大多數(shù)的Web應(yīng)用都是基于HTTP來進(jìn)行開發(fā)的。我們對(duì)Web的操作都是通過HTTP協(xié)議來進(jìn)行傳輸數(shù)據(jù)的。 簡(jiǎn)單來說,HTTP協(xié)議就是客戶端和服務(wù)...

    yzd 評(píng)論0 收藏0
  • PHPer面試指南-Web 篇

    摘要:擴(kuò)展閱讀收集的前端面試題和答案前端開發(fā)面試題史上最全的前端面試題匯總及答案前端工程師手冊(cè)協(xié)議工作原理協(xié)議運(yùn)行機(jī)制的概述 本書的 GitHub 地址:https://github.com/todayqq/PH... 對(duì)于大公司,很少會(huì)有全棧工程師這個(gè)崗位,全棧是個(gè)花哨的詞,對(duì)于現(xiàn)在比較熱門的技術(shù),不論是 Vue 還是 Laravel,只要智商不差,看著文檔,都能寫出一個(gè) CURD 來,...

    cnio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<