Openssl建立CA系统
Openssl建立CA系統(tǒng)
關(guān)鍵詞:SSL、RSA簡(jiǎn)單實(shí)例、matlab乘冪取余、OPENSSL應(yīng)用、用戶CA建立
1.SSL簡(jiǎn)介(百科)
SSL(Secure?Sockets?Layer?安全套接層),及其繼任者傳輸層安全(Transport?Layer?Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密。
SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層:?SSL記錄協(xié)議(SSL?Record?Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。?SSL握手協(xié)議(SSL?Handshake?Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
SSL的數(shù)字證書采用非對(duì)稱加密算法確保安全性。
2.RSA簡(jiǎn)介(百科)
RSA算法是一種非對(duì)稱密碼算法,所謂非對(duì)稱,就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。
RSA公鑰加密算法是1977年由Ron?Rivest、Adi?Shamirh和LenAdleman在(美國(guó)麻省理工學(xué)院)開發(fā)的。RSA取名來自開發(fā)他們?nèi)叩拿帧?/span>RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
RSA的算法涉及三個(gè)參數(shù),n、e1、e2。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。e1和e2是一對(duì)相關(guān)的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n,e1),(n,e2)就是密鑰對(duì)。其中(n,e1)為公鑰,(n,e2)為私鑰。
RSA加解密的算法完全相同,設(shè)A為明文,B為密文,則:B=A^e1?mod?n;A=B^e2?mod?n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)e1和e2可以互換使用,即:
A=B^e1?mod?n;B=A^e2?mod?n;
3.RSA簡(jiǎn)單應(yīng)用例
取p=13,q=19,n=p*q=247=11110111b,(p-1)(q-1)=216=2*2*3*2*3*3,假設(shè)取e1=5,則e2=(216*x)/5?+?1/5其中x為任意整數(shù)進(jìn)一步可取x為4得一個(gè)e2=173,則公鑰(5,247),私鑰(173,247);n長(zhǎng)度為8,對(duì)明文按每4bit單元(為保證加密后數(shù)據(jù)不丟失,這里明文編碼最大加密單元能表示的編碼數(shù)要小于247)進(jìn)行加密,加密后數(shù)據(jù)按8bit保存,如
原始明文=FEDCBA9876543210,用數(shù)組表示[15?14?13?12?11?10?9?8?7?6?5?4?3?2?1?0]
加密明文,加密后密文=[15?14?13?12?11?10?9?8?7?6?5?4?3?2?1?0]^5?mod?247=[97?105?52?103?7?212?16?164?11?119?161?36?243?32?1?0]
密文解密,解密后明文=[97?105?52?103?7?212?16?164?11?119?161?36?243?32?1?0]^173?mod?247=[15?14?13?12?11?10?9?8?7?6?5?4?3?2?1?0]=FEDCBA9876543210
針對(duì)a^b?mod?c的運(yùn)算,當(dāng)a,b值很大時(shí)不能直接計(jì)算,需要用到乘冪取余,利用a*b%c=((a%c)*(b%c))%c及冪的二進(jìn)制展開方法,下面是matlab計(jì)算a^b?mod?c的方法:
%------------------------------------
function?y=a_b_mod_c(a,b,c)
%a可以輸入一維數(shù)組,a,b,c的值必須小于32位整型最大值
if?a?>=?4294967295?|?b?>=?4294967295?|?c?>=?4294967295
? ? error('Input?a_b_mod_c(a,b,c)?a,b,c?must?less?than?4294967295');
end
int32_b?=?uint32(b);
int32_c?=?uint32(c);
y?=?[];
for?m=1:max(size(a))
? ? fresult?=?a(m);
? ? result?=?1;
? ? ?for?n=1:32
? ? ? ? if?bitget(int32_b,n)==1
? ? ? ? ? ?result?=?mod(result*fresult,int32_c);
? ? ? ? end
? ? ? ? fresult?=?mod(fresult*fresult,int32_c);
? ? end
? ? y?=[y,double(result)];
end
4.安裝openssl
安裝openssl軟件包,openssl?version可以查看版本,本文檔實(shí)驗(yàn)openssl版本0.9.8k?25?Mar?2009
5.生成RSA密鑰
如果需要對(duì)RSA密鑰進(jìn)行密碼保護(hù),方法:
$openssl?genrsa?-des3?-out?privkey.pem?2048
如果不需要對(duì)RSA密鑰進(jìn)行密碼保護(hù),方法:
$openssl?genrsa?-out?privkey.pem?2048
生成2048位的密鑰,des3為密鑰加密方法
6.生成證書請(qǐng)求和自簽名證書
生成證書請(qǐng)求文件cert.csr可以由其它CA機(jī)構(gòu)進(jìn)行簽名,假設(shè)CA機(jī)構(gòu)是直接頂層權(quán)威機(jī)構(gòu),它公之于眾的證書就是rootca.pem。
$openssl?req?-new?-key?privkey.pem?-out?cert.csr
頂層權(quán)威機(jī)構(gòu)會(huì)給cert.csr用它的密鑰進(jìn)行簽名,最終給你一個(gè)文件cacert.pem,這個(gè)就是和privkey.pem配對(duì)的數(shù)字證書。有了privkey.pem和cacert.pem,就可以和其它信任rootca.pem的系統(tǒng)進(jìn)行依賴于數(shù)字證書認(rèn)證的SSL通信了。
如果自己就是CA頂層權(quán)威機(jī)構(gòu)(比如自己做實(shí)驗(yàn)),那么先前生成的privkey.pem就是ROOT?CA的密鑰,這個(gè)密鑰會(huì)用來簽名用戶數(shù)據(jù)證書。頂層CA機(jī)構(gòu)需要一個(gè)公之于眾的根證書,用privkey.pem給自己簽名生成一個(gè)根證書,方法:
$openssl?req?-new?-x509?-key?privkey.pem?-out?rootca.pem?-days?1095
生成根證書會(huì)提示輸入很多相關(guān)信息。
7.建立自己的CA系統(tǒng)
建立自己的CA系統(tǒng),上面6生成的自簽名證書就可以做根證書,為方便可將privkey.pem改名為cakey.pem,rootca.pem改名為cacert.pem,然后配置openssl.cnf文件。
建立自己的CA根目錄,如/home/thq/myca,由于是測(cè)試自己的CA系統(tǒng),可以從/etc/ssh/openssl.cnf拷貝一份到/home/thq/myca目錄:
配置自己的openssl.cnf文件,修改CA_default如MyCA,其它配置如下
圖中可以看出需要在myca目錄下創(chuàng)建一些目錄和文件:
$cd?/home/thq/myca
$mkdir?certs?crl?newcerts?private
$touch?index.txt
$echo?01>serial
$echo?01>crlnumber
$chomd?777?-R?.
拷貝前面生成的cakey.pem和cacert.pem到指定目錄,降低CA?policy
#?For?the?CA?policy
[?policy_match?]
countryName?????????????=?supplied
stateOrProvinceName?????=?supplied
organizationName????????=?supplied
organizationalUnitName??=?optional
commonName??????????????=?supplied
emailAddress????????????=?optional
生成用戶密鑰和證書請(qǐng)求
$openssl?genrsa?-out?userkey.pem?2048
$openssl?req?-new?-key?privkey.pem?-out?usercert.csr
生成證書,證書生成目錄/home/thq/newcerts:
$openssl?ca?-in?usercert.csr?-config?/home/thq/myca/openssl.cnf?
/home/thq/newcerts/01.pem即為usercert.pem,可以看到/home/thq/myca/serial和index有變化。
8.吊銷證書并生成CRL列表
吊銷證書
$cd?/home/thq/myca/newcerts
$openssl?ca?-revoke?usercert.pem?-config?/home/thq/myca/openssl.cnf
生成CRL列表
$cd?/home/thq/myca/crl
$openssl?ca?-gencrl?-out?myca.crl?-config?/home/thq/myca/openssl.cnf
9.總結(jié)
至此生成的文件有:
CA密鑰:cakey.pem
CA證書(根證書):cacert.pem
用戶密鑰:userkey.pem
用戶證書:usercert.pem
CA證書吊銷列表CRL:myca.crl
這樣CA建立完畢,如果多個(gè)用戶都到myca申請(qǐng)證書,由于所有用戶都信任cacert.pem,也信任由myca簽名的證書,所以用戶間可以交換自己的usercert.pem進(jìn)行安全認(rèn)證,并建立安全通信。
總結(jié)
以上是生活随笔為你收集整理的Openssl建立CA系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 砂.随笔.二十.微笑
- 下一篇: 可计算代数数论(2012-12-09 2