日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Openssl建立CA系统

發(fā)布時(shí)間:2023/12/9 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Openssl建立CA系统 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Openssl建立CA系統(tǒng)


關(guān)鍵詞:SSL、RSA簡(jiǎn)單實(shí)例、matlab乘冪取余、OPENSSL應(yīng)用、用戶(hù)CA建立

1.SSL簡(jiǎn)介(百科)

  SSL(Secure?Sockets?Layer?安全套接層),及其繼任者傳輸層安全(Transport?Layer?SecurityTLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLSSSL傳輸層對(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ù)傳輸開(kāi)始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。

  SSL的數(shù)字證書(shū)采用非對(duì)稱(chēng)加密算法確保安全性。

2.RSA簡(jiǎn)介(百科)

  RSA算法是一種非對(duì)稱(chēng)密碼算法,所謂非對(duì)稱(chēng),就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。

  RSA公鑰加密算法是1977年由Ron?RivestAdi?ShamirhLenAdleman在(美國(guó)麻省理工學(xué)院)開(kāi)發(fā)的。RSA取名來(lái)自開(kāi)發(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)行因式分解卻極其困難,因此可以將乘積公開(kāi)作為加密密鑰。

  RSA的算法涉及三個(gè)參數(shù),n、e1e2。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。e1e2是一對(duì)相關(guān)的值,e1可以任意取,但要求e1(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1(ne1),(ne2)就是密鑰對(duì)。其中(ne1)為公鑰,(ne2)為私鑰。

  RSA加解密的算法完全相同,設(shè)A為明文,B為密文,則:B=A^e1?mod?nA=B^e2?mod?n(公鑰加密體制中,一般用公鑰加密,私鑰解密)e1e2可以互換使用,即:

A=B^e1?mod?nB=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)一步可取x4得一個(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)制展開(kāi)方法,下面是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.生成證書(shū)請(qǐng)求和自簽名證書(shū)

  生成證書(shū)請(qǐng)求文件cert.csr可以由其它CA機(jī)構(gòu)進(jìn)行簽名,假設(shè)CA機(jī)構(gòu)是直接頂層權(quán)威機(jī)構(gòu),它公之于眾的證書(shū)就是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ù)字證書(shū)。有了privkey.pemcacert.pem,就可以和其它信任rootca.pem的系統(tǒng)進(jìn)行依賴(lài)于數(shù)字證書(shū)認(rèn)證的SSL通信了。

  如果自己就是CA頂層權(quán)威機(jī)構(gòu)(比如自己做實(shí)驗(yàn)),那么先前生成的privkey.pem就是ROOT?CA的密鑰,這個(gè)密鑰會(huì)用來(lái)簽名用戶(hù)數(shù)據(jù)證書(shū)。頂層CA機(jī)構(gòu)需要一個(gè)公之于眾的根證書(shū),用privkey.pem給自己簽名生成一個(gè)根證書(shū),方法:

    $openssl?req?-new?-x509?-key?privkey.pem?-out?rootca.pem?-days?1095

  生成根證書(shū)會(huì)提示輸入很多相關(guān)信息。

7.建立自己的CA系統(tǒng)

  建立自己的CA系統(tǒng),上面6生成的自簽名證書(shū)就可以做根證書(shū),為方便可將privkey.pem改名為cakey.pemrootca.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.pemcacert.pem到指定目錄,降低CA?policy

    #?For?the?CA?policy

    [?policy_match?]

    countryName?????????????=?supplied

    stateOrProvinceName?????=?supplied

    organizationName????????=?supplied

    organizationalUnitName??=?optional

    commonName??????????????=?supplied

    emailAddress????????????=?optional

  生成用戶(hù)密鑰和證書(shū)請(qǐng)求

    $openssl?genrsa?-out?userkey.pem?2048

    $openssl?req?-new?-key?privkey.pem?-out?usercert.csr

  生成證書(shū),證書(shū)生成目錄/home/thq/newcerts:

    $openssl?ca?-in?usercert.csr?-config?/home/thq/myca/openssl.cnf?

  /home/thq/newcerts/01.pem即為usercert.pem,可以看到/home/thq/myca/serialindex有變化。

8.吊銷(xiāo)證書(shū)并生成CRL列表

  吊銷(xiāo)證書(shū)

    $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證書(shū)(根證書(shū))cacert.pem

    用戶(hù)密鑰:userkey.pem

    用戶(hù)證書(shū):usercert.pem

    CA證書(shū)吊銷(xiāo)列表CRLmyca.crl

  這樣CA建立完畢,如果多個(gè)用戶(hù)都到myca申請(qǐng)證書(shū),由于所有用戶(hù)都信任cacert.pem,也信任由myca簽名的證書(shū),所以用戶(hù)間可以交換自己的usercert.pem進(jìn)行安全認(rèn)證,并建立安全通信。



總結(jié)

以上是生活随笔為你收集整理的Openssl建立CA系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。