Openssl建立CA系统
Openssl建立CA系統
關鍵詞:SSL、RSA簡單實例、matlab乘冪取余、OPENSSL應用、用戶CA建立
1.SSL簡介(百科)
SSL(Secure?Sockets?Layer?安全套接層),及其繼任者傳輸層安全(Transport?Layer?Security,TLS)是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密。
SSL協議位于TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:?SSL記錄協議(SSL?Record?Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。?SSL握手協議(SSL?Handshake?Protocol):它建立在SSL記錄協議之上,用于在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
SSL的數字證書采用非對稱加密算法確保安全性。
2.RSA簡介(百科)
RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA公鑰加密算法是1977年由Ron?Rivest、Adi?Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標準。RSA算法基于一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
RSA的算法涉及三個參數,n、e1、e2。其中,n是兩個大質數p、q的積,n的二進制表示時所占用的位數,就是所謂的密鑰長度。e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n,e1),(n,e2)就是密鑰對。其中(n,e1)為公鑰,(n,e2)為私鑰。
RSA加解密的算法完全相同,設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簡單應用例
取p=13,q=19,n=p*q=247=11110111b,(p-1)(q-1)=216=2*2*3*2*3*3,假設取e1=5,則e2=(216*x)/5?+?1/5其中x為任意整數進一步可取x為4得一個e2=173,則公鑰(5,247),私鑰(173,247);n長度為8,對明文按每4bit單元(為保證加密后數據不丟失,這里明文編碼最大加密單元能表示的編碼數要小于247)進行加密,加密后數據按8bit保存,如
原始明文=FEDCBA9876543210,用數組表示[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
針對a^b?mod?c的運算,當a,b值很大時不能直接計算,需要用到乘冪取余,利用a*b%c=((a%c)*(b%c))%c及冪的二進制展開方法,下面是matlab計算a^b?mod?c的方法:
%------------------------------------
function?y=a_b_mod_c(a,b,c)
%a可以輸入一維數組,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可以查看版本,本文檔實驗openssl版本0.9.8k?25?Mar?2009
5.生成RSA密鑰
如果需要對RSA密鑰進行密碼保護,方法:
$openssl?genrsa?-des3?-out?privkey.pem?2048
如果不需要對RSA密鑰進行密碼保護,方法:
$openssl?genrsa?-out?privkey.pem?2048
生成2048位的密鑰,des3為密鑰加密方法
6.生成證書請求和自簽名證書
生成證書請求文件cert.csr可以由其它CA機構進行簽名,假設CA機構是直接頂層權威機構,它公之于眾的證書就是rootca.pem。
$openssl?req?-new?-key?privkey.pem?-out?cert.csr
頂層權威機構會給cert.csr用它的密鑰進行簽名,最終給你一個文件cacert.pem,這個就是和privkey.pem配對的數字證書。有了privkey.pem和cacert.pem,就可以和其它信任rootca.pem的系統進行依賴于數字證書認證的SSL通信了。
如果自己就是CA頂層權威機構(比如自己做實驗),那么先前生成的privkey.pem就是ROOT?CA的密鑰,這個密鑰會用來簽名用戶數據證書。頂層CA機構需要一個公之于眾的根證書,用privkey.pem給自己簽名生成一個根證書,方法:
$openssl?req?-new?-x509?-key?privkey.pem?-out?rootca.pem?-days?1095
生成根證書會提示輸入很多相關信息。
7.建立自己的CA系統
建立自己的CA系統,上面6生成的自簽名證書就可以做根證書,為方便可將privkey.pem改名為cakey.pem,rootca.pem改名為cacert.pem,然后配置openssl.cnf文件。
建立自己的CA根目錄,如/home/thq/myca,由于是測試自己的CA系統,可以從/etc/ssh/openssl.cnf拷貝一份到/home/thq/myca目錄:
配置自己的openssl.cnf文件,修改CA_default如MyCA,其它配置如下
圖中可以看出需要在myca目錄下創建一些目錄和文件:
$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
生成用戶密鑰和證書請求
$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.總結
至此生成的文件有:
CA密鑰:cakey.pem
CA證書(根證書):cacert.pem
用戶密鑰:userkey.pem
用戶證書:usercert.pem
CA證書吊銷列表CRL:myca.crl
這樣CA建立完畢,如果多個用戶都到myca申請證書,由于所有用戶都信任cacert.pem,也信任由myca簽名的證書,所以用戶間可以交換自己的usercert.pem進行安全認證,并建立安全通信。
總結
以上是生活随笔為你收集整理的Openssl建立CA系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 砂.随笔.二十.微笑
- 下一篇: WIN7系统更新安装补丁“此更新不适用于