OpenSSL使用3(基本原理及生成过程)(转)
1. 基本原理
OpenSSL初接觸的人恐怕最難的在于先理解各種概念
公鑰/私鑰/簽名/驗證簽名/加密/解密/非對稱加密
我們一般的加密是用一個密碼加密文件,然后解密也用同樣的密碼.這很好理解,這個是對稱加密.而有些加密時,加密用的一個密碼,而解密用另外一組密碼,這個叫非對稱加密,意思就是加密解密的密碼不一樣.初次接觸的人恐怕無論如何都理解不了.其實這是數(shù)學(xué)上的一個素數(shù)積求因子的原理的應(yīng)用,如果你一定要搞懂,百度有大把大把的資料可以看,其結(jié)果就是用這一組密鑰中的一個來加密數(shù)據(jù),可以用另一個解開.是的沒錯,公鑰和私鑰都可以用來加密數(shù)據(jù),相反用另一個解開,公鑰加密數(shù)據(jù),然后私鑰解密的情況被稱為加密解密,私鑰加密數(shù)據(jù),公鑰解密一般被稱為簽名和驗證簽名.
因為公鑰加密的數(shù)據(jù)只有它相對應(yīng)的私鑰可以解開,所以你可以把公鑰給人和人,讓他加密他想要傳送給你的數(shù)據(jù),這個數(shù)據(jù)只有到了有私鑰的你這里,才可以解開成有用的數(shù)據(jù),其他人就是得到了,也看懂內(nèi)容.同理,如果你用你的私鑰對數(shù)據(jù)進(jìn)行簽名,那這個數(shù)據(jù)就只有配對的公鑰可以解開,有這個私鑰的只有你,所以如果配對的公鑰解開了數(shù)據(jù),就說明這數(shù)據(jù)是你發(fā)的,相反,則不是.這個被稱為簽名.
實際應(yīng)用中,一般都是和對方交換公鑰,然后你要發(fā)給對方的數(shù)據(jù),用他的公鑰加密,他得到后用他的私鑰解密,他要發(fā)給你的數(shù)據(jù),用你的公鑰加密,你得到后用你的私鑰解密,這樣最大程度保證了安全性.
RSA/DSA/SHA/MD5
非對稱加密的算法有很多,比較著名的有RSA/DSA ,不同的是RSA可以用于加/解密,也可以用于簽名驗簽,DSA則只能用于簽名.至于SHA則是一種和md5相同的算法,它不是用于加密解密或者簽名的,它被稱為摘要算法.就是通過一種算法,依據(jù)數(shù)據(jù)內(nèi)容生成一種固定長度的摘要,這串摘要值與原數(shù)據(jù)存在對應(yīng)關(guān)系,就是原數(shù)據(jù)會生成這個摘要,但是,這個摘要是不能還原成原數(shù)據(jù)的,嗯....,正常情況下是這樣的,這個算法起的作用就是,如果你把原數(shù)據(jù)修改一點點,那么生成的摘要都會不同,傳輸過程中把原數(shù)據(jù)給你再給你一個摘要,你把得到的原數(shù)據(jù)同樣做一次摘要算法,與給你的摘要相比較就可以知道這個數(shù)據(jù)有沒有在傳輸過程中被修改了.
實際應(yīng)用過程中,因為需要加密的數(shù)據(jù)可能會很大,進(jìn)行加密費時費力,所以一般都會把原數(shù)據(jù)先進(jìn)行摘要,然后對這個摘要值進(jìn)行加密,將原數(shù)據(jù)的明文和加密后的摘要值一起傳給你.這樣你解開加密后的摘要值,再和你得到的數(shù)據(jù)進(jìn)行的摘要值對應(yīng)一下就可以知道數(shù)據(jù)有沒有被修改了,而且,因為私鑰只有你有,只有你能解密摘要值,所以別人就算把原數(shù)據(jù)做了修改,然后生成一個假的摘要給你也是不行的,你這邊用密鑰也根本解不開.
CA/PEM/DER/X509/PKCS
一般的公鑰不會用明文傳輸給別人的,正常情況下都會生成一個文件,這個文件就是公鑰文件,然后這個文件可以交給其他人用于加密,但是傳輸過程中如果有人惡意破壞,將你的公鑰換成了他的公鑰,然后得到公鑰的一方加密數(shù)據(jù),不是他就可以用他自己的密鑰解密看到數(shù)據(jù)了嗎,為了解決這個問題,需要一個公證方來做這個事,任何人都可以找它來確認(rèn)公鑰是誰發(fā)的.這就是CA,CA確認(rèn)公鑰的原理也很簡單,它將它自己的公鑰發(fā)布給所有人,然后一個想要發(fā)布自己公鑰的人可以將自己的公鑰和一些身份信息發(fā)給CA,CA用自己的密鑰進(jìn)行加密,這里也可以稱為簽名.然后這個包含了你的公鑰和你的信息的文件就可以稱為證書文件了.這樣一來所有得到一些公鑰文件的人,通過CA的公鑰解密了文件,如果正常解密那么機(jī)密后里面的信息一定是真的,因為加密方只可能是CA,其他人沒它的密鑰啊.這樣你解開公鑰文件,看看里面的信息就知道這個是不是那個你需要用來加密的公鑰了.
實際應(yīng)用中,一般人都不會找CA去簽名,因為那是收錢的,所以可以自己做一個自簽名的證書文件,就是自己生成一對密鑰,然后再用自己生成的另外一對密鑰對這對密鑰進(jìn)行簽名,這個只用于真正需要簽名證書的人,普通的加密解密數(shù)據(jù),直接用公鑰和私鑰來做就可以了.
密鑰文件的格式用OpenSSL生成的就只有PEM和DER兩種格式,PEM的是將密鑰用base64編碼表示出來的,直接打開你能看到一串的英文字母,DER格式是二進(jìn)制的密鑰文件,直接打開,你可以看到........你什么也看不懂!.X509是通用的證書文件格式定義.pkcs的一系列標(biāo)準(zhǔn)是指定的存放密鑰的文件標(biāo)準(zhǔn),你只要知道PEM DER X509 PKCS這幾種格式是可以互相轉(zhuǎn)化的.
圖例如下:
2. 生成證書
一:生成CA證書
目前不使用第三方權(quán)威機(jī)構(gòu)的CA來認(rèn)證,自己充當(dāng)CA的角色。
網(wǎng)上下載一個openssl軟件
1.創(chuàng)建私鑰 :
openssl genrsa -out ca/ca-key.pem 1024?2.創(chuàng)建證書請求 :
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem-----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:rootEmail Address []:sky?3.自簽署證書 :
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650?4.將證書導(dǎo)出成瀏覽器支持的.p12格式 :
openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12?密碼:changeit
二.生成server證書
1.創(chuàng)建私鑰 :
openssl genrsa -out server/server-key.pem 1024?2.創(chuàng)建證書請求 :
openssl req -new -out server/server-req.csr -key server/server-key.pem-----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:192.168.1.246 注釋:一定要寫服務(wù)器所在的ip地址Email Address []:sky?3.自簽署證書 :
openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650?4.將證書導(dǎo)出成瀏覽器支持的.p12格式 :
openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12?密碼:changeit
三.生成client證書
1.創(chuàng)建私鑰 :
openssl genrsa -out client/client-key.pem 1024?2.創(chuàng)建證書請求 :
openssl req -new -out client/client-req.csr -key client/client-key.pem-----Country Name (2 letter code) [AU]:cnState or Province Name (full name) [Some-State]:zhejiangLocality Name (eg, city) []:hangzhouOrganization Name (eg, company) [Internet Widgits Pty Ltd]:skyvisionOrganizational Unit Name (eg, section) []:testCommon Name (eg, YOUR name) []:skyEmail Address []:sky 注釋:就是登入中心的用戶(本來用戶名應(yīng)該是Common Name,但是中山公安的不知道為什么使用的Email Address,其他版本沒有測試)Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:123456An optional company name []:tsing?3.自簽署證書 :
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650?4.將證書導(dǎo)出成瀏覽器支持的.p12格式 :
openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12密碼:changeit
請一定嚴(yán)格根據(jù)里面的步驟來,待實驗成功后,修改你自己想要修改的內(nèi)容。我就是一開始沒有安裝該填寫的來,結(jié)果生成的證書就無法配對成功。
?
原文:http://blog.csdn.net/oldmtn/article/details/52208747
?
轉(zhuǎn)載于:https://www.cnblogs.com/EasonJim/p/6291587.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的OpenSSL使用3(基本原理及生成过程)(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql distinct、gro
- 下一篇: FJUT寒假第一周作业浮点数查寻题解