網(wǎng)絡(luò)安全
密鑰
TLS/SSL是一個公鑰與私鑰的結(jié)構(gòu),它是一個非對稱的結(jié)構(gòu)跃捣。每一個服務(wù)器和客戶端都有自己的公私密鑰枷颊。公鑰用來加密要傳輸?shù)臄?shù)據(jù),私鑰用來解密接收的數(shù)據(jù)艾少。公鑰和私鑰是配對的卡乾,通過公鑰加密的數(shù)據(jù),只有通過私鑰才能解密缚够,所以建立安全傳輸之前幔妨,客戶端和服務(wù)器端之間需要互換公鑰。
Node底層采用的是openssl實現(xiàn)TLS/SSL
// 生成服務(wù)器端私鑰
openssl genrsa -out server.key 1024
// 生成客戶端私鑰
openssl genrsa -out client.key 1024
通過生辰1024位長的RSA私鑰文件谍椅,然后根據(jù)rsa私鑰文件生成公鑰
openssl rsa -in server.key -pubout -out server.pem
// 根據(jù)私鑰生成對應(yīng)的公鑰文件
openssl rsa -in client.key -pubout -out client.pem
為了解決中間人攻擊文件陶冷, 需要在數(shù)據(jù)傳輸?shù)倪^程中對得到的公鑰進行認證,以確保得到的公鑰是出自目標(biāo)服務(wù)器毯辅。TSL/SSL引入了數(shù)字證書來進行認證埂伦。與直接用公鑰不同,數(shù)字證書中包含了服務(wù)器的名稱和主機名思恐、服務(wù)器的公鑰/簽名機構(gòu)的名稱沾谜、來自簽名頒發(fā)機構(gòu)的簽名膊毁。在連接建立前,通過證書的簽名確認收到的公鑰是否來自目標(biāo)服務(wù)器基跑,從而產(chǎn)生信任關(guān)系婚温。
數(shù)字證書
我們需要引入一個第三方:CA(certificate Authority,數(shù)字證書認證中心)CA的作用是為站點頒發(fā)證書媳否,這個證書具有通過CA通過自己的公鑰和私鑰實現(xiàn)的簽名栅螟。
為了得到簽名證書,服務(wù)器需要通過自己的私鑰生成CSR(certificate Signing Request篱竭, 證書簽名請求)文件力图。CA機構(gòu)通過這個文件辦法屬于該服務(wù)器端的簽名證書,只要通過CA機構(gòu)就能夠驗證證書是否合法掺逼。
一般的中小企業(yè)多半采用自簽名證書來構(gòu)建安全網(wǎng)絡(luò)的吃媒,所謂的自簽名證書,就是自己扮演CA機構(gòu)吕喘,給自己的服務(wù)器端頒發(fā)簽名證書赘那。
首先CA需要生成私鑰,生辰CSR文件氯质,通過私鑰自簽名生成證書的過程:
openssl genrsa -out ca.key 1024
openssl req -new ca.key -out ca.csr
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
服務(wù)器端
服務(wù)器首先需要創(chuàng)建自己的CSR文件募舟,此時需要Common Name需要匹配服務(wù)器域名,否則需要出錯
openssl req -new -key server.key -out server.csr
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
CA機構(gòu)簽名需要CA的證書和私鑰,最后得到的是一個帶有CA簽名的證書闻察。