青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

使用 Openssl驗(yàn)證證書(shū)鏈(轉(zhuǎn))

Link:http://blog.csdn.net/rabbit729/archive/2009/02/06/3866525.aspx

項(xiàng) 目中遇到使用Openssl驗(yàn)證證書(shū)鏈的問(wèn)題,在網(wǎng)上找了很長(zhǎng)時(shí)間,發(fā)現(xiàn)這方面的資料很少,通過(guò)多方努力,總算實(shí)現(xiàn)了基本功能,為了給大家提供一下參考, 本人實(shí)現(xiàn)了一個(gè)驗(yàn)證證書(shū)鏈的類,以供參考,由于本人也是剛剛接觸Openssl,如果有不正確的地方,請(qǐng)大家多多指導(dǎo)

  1. /************************************************************************/??
  2. /*??????????????????????????VerifyDCChain.h?????????????????????????????*/??
  3. /************************************************************************/??
  4. #ifndef?VERIFYDCCHAIN_H_??
  5. #define?VERIFYDCCHAIN_H_??
  6. ??
  7. #include?<openssl/bio.h>??
  8. #include?<openssl/err.h>??
  9. #include?<openssl/x509.h>??
  10. #include?<openssl/x509v3.h>??
  11. #include?<openssl/pem.h>??
  12. #include?<openssl/crypto.h>??
  13. #include?<string>??
  14. #include?<iostream>??
  15. using?namespace?std;??
  16. ??
  17. class?VerifyDCChain??
  18. {??
  19. public:??
  20. ????VerifyDCChain();??
  21. ????~VerifyDCChain();??
  22. ??
  23. ????/*?
  24. ????*?初 始化證書(shū)鏈堆棧m_chain?
  25. ????*?@param[in]?certChains?證書(shū)鏈中各個(gè)證 書(shū)文件名數(shù)組?
  26. ????*?@param[in]?num?證書(shū)鏈中證書(shū)個(gè)數(shù)?
  27. ????*/??
  28. ????int?Init(const?string*?certChains,?const?int?num);??
  29. ??
  30. ????/*?
  31. ????*?使 用給定的證書(shū)鏈驗(yàn)證葉子證書(shū)?
  32. ????*?@param[in]?certFile?需要驗(yàn)證的葉子證書(shū)文 件名?
  33. ????*/??
  34. ????int?verify(const?char*?certFile);??
  35. private:??
  36. ??
  37. ????/*?
  38. ????*?加 載證書(shū)文件?
  39. ????*?@param[in]?certFile?需要加載的證書(shū)文件名?
  40. ????*/??
  41. ????X509*?load_certfile(const?char*?certFile);??
  42. private:??
  43. ????X509*?m_leaf;??
  44. ????STACK_OF(X509)*?m_chain;??????
  45. };??
  46. ??
  47. #endif??
  48. ??
  49. /************************************************************************/??
  50. /*??????????????????????????VerifyDCChain.cpp???????????????????????????*/??
  51. /************************************************************************/??
  52. ??
  53. #include?"VerifyDCChain.h"??
  54. ??
  55. VerifyDCChain::VerifyDCChain():m_leaf(NULL),?m_chain(NULL)??
  56. {??
  57. ????CRYPTO_malloc_init();???
  58. ????OpenSSL_add_all_algorithms();??
  59. }??
  60. ??
  61. VerifyDCChain::~VerifyDCChain()??
  62. {??
  63. ????if(m_leaf?!=?NULL)???
  64. ????{??
  65. ????????X509_free(m_leaf);??
  66. ????}??
  67. ????if?(m_chain?!=NULL)??
  68. ????{??
  69. ????????sk_X509_free(m_chain);??
  70. ????}??
  71. }??
  72. ??
  73. int?VerifyDCChain::Init(const?string*?certChains,?const?int?num)??
  74. {??
  75. ????int?ret?=?0;??
  76. ????X509*?temp?=?new?X509;??
  77. ????m_chain?=?sk_X509_new_null();??
  78. ??
  79. ????//?注 意此處加載證書(shū)鏈中證書(shū)的順序沒(méi)有要求,因?yàn)??
  80. ????//?在X509_verify_cert()函 數(shù)中會(huì)對(duì)證書(shū)鏈中的證書(shū)??
  81. ????//?進(jìn)行排序??
  82. ????for?(int?i?=?0;?i?<?num;?i++)??
  83. ????{??
  84. ????????temp?=?load_certfile(certChains[i].c_str());??
  85. ????????sk_X509_push(m_chain,?temp);??
  86. ????}??
  87. ????return?1;??
  88. }??
  89. ??
  90. int?VerifyDCChain::verify(const?char*?certFile)??
  91. {??
  92. ????int?ret?=?0;??
  93. ????X509_STORE?*store=NULL;??
  94. ????X509_STORE_CTX?ctx;??
  95. ????m_leaf?=?new?X509();??
  96. ??
  97. ????// 創(chuàng)建X509_store對(duì)象,用來(lái)存儲(chǔ)證書(shū)、撤銷(xiāo)列表等??
  98. ????store=X509_STORE_new();??
  99. ??
  100. ????//?載 入葉子證書(shū)??
  101. ????m_leaf?=?load_certfile(certFile);??
  102. ??
  103. ????// 設(shè)置驗(yàn)證標(biāo)記?都驗(yàn)證那些項(xiàng)?X509_V_FLAG_CRL_CHECK_ALL表示全部驗(yàn)證??
  104. ????X509_STORE_set_flags(store,X509_V_FLAG_CRL_CHECK_ALL);??
  105. ????// 初始化CTX?這個(gè)類就是所謂的上下文?該類收集完必要的信息數(shù)據(jù)?可以進(jìn)行驗(yàn)證??
  106. ????//?此處 X509_STORE_CTX_init最后一個(gè)參數(shù)為NULL,表示不加載證書(shū)撤銷(xiāo)列表CPL??
  107. ????if(!X509_STORE_CTX_init(&ctx,store?,m_leaf,NULL))??
  108. ????{??
  109. ????????ret?=?0;??
  110. ????????goto?end;??
  111. ????}??
  112. ??
  113. ????if(m_chain?==?NULL)??
  114. ????{??
  115. ????????cout<<" 加載證書(shū)鏈?zhǔn)?\n"<<endl;??
  116. ????????ret?=?0;??
  117. ????????goto?end;??
  118. ????}??
  119. ????else??
  120. ????{??
  121. ????????// 將證書(shū)鏈存入CTX??
  122. ????????X509_STORE_CTX_trusted_stack(&ctx,?m_chain);??
  123. ????}??
  124. ??
  125. ????// 證書(shū)鏈?zhǔn)津?yàn)證??
  126. ????if(1?==?X509_verify_cert(&ctx))??
  127. ????????ret?=?1;??
  128. ????else??
  129. ????????ret?=?0;??
  130. end:??
  131. ????X509_STORE_CTX_cleanup(&ctx);??
  132. ????if(store)X509_STORE_free(store);??
  133. ????return?ret;??
  134. }??
  135. ??
  136. X509*?VerifyDCChain::load_certfile(const?char*?certFile)??
  137. {??
  138. ????X509*?cert?=?NULL;??
  139. ????BIO*?in?=?NULL;??
  140. ??
  141. ????if(certFile==NULL)??
  142. ????????goto?end;??
  143. ????in?=?BIO_new_file(certFile,"r");??
  144. ????if(in==NULL)??
  145. ????????goto?end;??
  146. ????// 將IO中數(shù)據(jù)以PEM格式讀入到X509對(duì)象??
  147. ????cert?=?PEM_read_bio_X509(in,NULL,NULL,NULL);??
  148. ????if(cert?==?NULL)??
  149. ????????goto?end;??
  150. end:??
  151. ????if(in)BIO_free(in);??
  152. ????return?cert;??
  153. }??
  154. ??
  155. /************************************************************************/??
  156. /*?????????????????????????????????test.cpp?????????????????????????????*/??
  157. /************************************************************************/??
  158. ??
  159. #include?"VerifyDCChain.h"??
  160. #include?<iostream>??
  161. using?namespace?std;??
  162. ??
  163. void?main(void)??
  164. {??
  165. ????VerifyDCChain?m_check;??
  166. ??
  167. ????//?注 意此處加載證書(shū)鏈中證書(shū)文件名的順序沒(méi)有要求,??
  168. ????//?因?yàn)樵? X509_verify_cert()函數(shù)中會(huì)對(duì)證書(shū)鏈中的??
  169. ????//?證書(shū)進(jìn)行排序??
  170. ????string?certChains[4]?=?{"5.crt",?"4.crt",?"3.crt",?"2.crt"};??
  171. ????m_check.Init(certChains,?4);??
  172. ??
  173. ????if?(1?==?m_check.verify("1.crt"))??
  174. ????{??
  175. ????????cout<<"OK!"<<endl;??
  176. ????}??
  177. ????else??
  178. ????{??
  179. ????????cout<<"ERROR!"<<endl;??
  180. ????}?????
  181. }??
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩视频专区| 久久久久久欧美| 亚洲欧美亚洲| 亚洲精品美女在线观看播放| 国产日韩欧美综合| 国产欧美一区二区精品婷婷| 国产精品永久入口久久久| 国产精品日韩一区| 国产亚洲一区精品| 极品av少妇一区二区| 在线成人av网站| 亚洲国产精品久久久久| 亚洲精品欧美| 亚洲新中文字幕| 久久xxxx精品视频| 免费成人黄色片| 亚洲国产电影| 欧美福利网址| 夜夜嗨av一区二区三区免费区| 中文精品视频| 久久精品系列| 欧美精品v日韩精品v韩国精品v| 欧美日韩日日夜夜| 国产精品女人网站| 在线观看一区视频| 中文国产成人精品久久一| 欧美一区二区视频在线观看| 久久久欧美一区二区| 亚洲毛片在线观看| 久久精品30| 欧美午夜精品久久久久免费视| 国产一区二区三区免费不卡| 亚洲毛片av在线| 久久精品免费电影| 亚洲巨乳在线| 久久免费精品视频| 国产精品v欧美精品v日韩| 国内视频精品| 亚洲一区视频在线| 欧美大片网址| 欧美一区二区三区视频免费播放| 欧美激情精品久久久久久大尺度 | 欧美一区二区三区免费看| 男男成人高潮片免费网站| 国产精品日韩欧美大师| 欧美亚洲一区二区在线| 久久综合网色—综合色88| 国产精品美女久久久浪潮软件| 亚洲精品国产系列| 噜噜噜噜噜久久久久久91 | 巨胸喷奶水www久久久免费动漫| 欧美日产国产成人免费图片| 亚洲电影在线| 久久久另类综合| 午夜亚洲福利在线老司机| 欧美理论视频| 亚洲激情专区| 欧美激情中文字幕在线| 久久精品人人做人人综合| 国产欧美日韩精品a在线观看| 国产精品99久久久久久久久久久久| 欧美激情一区二区三区成人 | 欧美日韩在线不卡| 亚洲精品日韩综合观看成人91| 蜜桃av久久久亚洲精品| 欧美一区=区| 国产亚洲人成网站在线观看| 欧美影院视频| 欧美一级二区| 黄色在线成人| 欧美黑人一区二区三区| 欧美成人免费全部观看天天性色| 91久久精品www人人做人人爽| 亚洲大片av| 欧美日韩精品免费| 午夜视频一区二区| 欧美在线国产精品| 亚洲福利在线视频| 亚洲乱亚洲高清| 国产精品v日韩精品| 欧美一级免费视频| 久久99在线观看| 亚洲麻豆视频| 亚洲一区图片| 亚洲国产精品黑人久久久| 99www免费人成精品| 国产欧美一区二区色老头| 欧美大片专区| 国产精品午夜久久| 欧美大色视频| 国产精品日韩一区| 欧美成在线视频| 欧美午夜性色大片在线观看| 欧美在线播放视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 一区二区久久| 久久精品国亚洲| 一区二区高清| 久久er精品视频| 一区二区高清视频| 午夜精品福利在线| 亚洲三级免费| 亚洲欧美清纯在线制服| 久久久久久网址| 亚洲一区二区免费在线| 久久人人爽人人爽| 欧美91大片| 亚洲欧美另类在线观看| 欧美在线免费播放| 亚洲毛片在线观看| 销魂美女一区二区三区视频在线| 欧美精品一区二区三区蜜臀| 久久精品成人一区二区三区 | 欧美高清视频一二三区| 亚洲欧美日产图| 久久美女性网| 亚洲欧美日韩一区| 蜜桃久久精品乱码一区二区| 久久se精品一区精品二区| 欧美黄色aa电影| 久久免费视频在线| 欧美精品久久一区| 久久久久欧美精品| 欧美视频一区二区在线观看| 亚洲精品1234| 激情久久综合| 午夜精品视频一区| 一区二区三区免费网站| 久久人人爽国产| 亚洲一级影院| 国产精品久久午夜| 91久久黄色| 欧美亚洲第一页| 亚洲人成小说网站色在线| 国内精品伊人久久久久av影院 | 久久精品一区二区| 国产精品亚洲综合| 日韩亚洲欧美一区| 91久久午夜| 老巨人导航500精品| 久久嫩草精品久久久久| 欧美日韩亚洲激情| 欧美成人高清视频| 狠狠综合久久av一区二区老牛| 亚洲午夜高清视频| 亚洲免费在线观看| 欧美绝品在线观看成人午夜影视| 另类图片国产| 怡红院精品视频| 久久精品动漫| 久久亚洲一区二区三区四区| 国产欧美日韩综合一区在线观看| 99视频热这里只有精品免费| 日韩网站在线看片你懂的| 榴莲视频成人在线观看| 米奇777在线欧美播放| 国产色视频一区| 亚洲一区二区三区在线观看视频| 亚洲一区激情| 国产精品夜夜嗨| 午夜精品在线| 久久伊人亚洲| 在线一区二区视频| 国产精品久久久久7777婷婷| 一区二区国产精品| 欧美一激情一区二区三区| 亚洲免费观看在线视频| 在线一区二区三区做爰视频网站| 日韩性生活视频| 欧美日韩国产亚洲一区| 亚洲美女精品成人在线视频| aⅴ色国产欧美| 久久久久久高潮国产精品视| 91久久在线| 亚洲午夜精品久久| 国产精品手机视频| 欧美一区二区三区久久精品| 毛片一区二区三区| 亚洲国产日韩一区二区| 欧美日本一区二区三区| 亚洲男人的天堂在线| 久久综合色天天久久综合图片| 亚洲国产婷婷| 久久综合九色综合欧美狠狠| 亚洲一区亚洲| 牛人盗摄一区二区三区视频| 亚洲毛片在线观看| 国产精品一区二区视频| 亚洲一区二区三区视频播放| 亚洲黄色视屏| 久久av老司机精品网站导航| 亚洲国产一区二区精品专区| 国产精品99一区二区| 久久蜜臀精品av| 欧美一区二区福利在线| 亚洲九九精品| 欧美成人免费全部观看天天性色| 亚洲一区二区三区在线视频| 黄色国产精品| 国内精品久久久久久影视8|