Golang之雙向認證

此篇文章主要介紹https用Golang生成證書和Golang實現(xiàn)https認證的過程垦巴,至于ssl/tls相關(guān)的知識點鬼癣,我在文章末尾會附上我個人覺得對讀者有用的文章汪榔。

單向驗證過程:

客戶點包含ca.crt,服務端包含server.key和server.crt驰徊;

客戶端:客戶端生成一個隨機數(shù)random-client庶诡,傳到服務器端惦银;

服務端:服務器端接收消息之后,生成一個隨機數(shù)random-server和包含公鑰的證書末誓,一起回饋給客戶端扯俱;

客戶端:客戶端收到的東西原封不動,加上premaster secret(通過random-client喇澡、random-server?經(jīng)過一定算法生成的數(shù)據(jù))迅栅,再一次送給服務器端,這次傳過去的東西是經(jīng)過服務端的公鑰進行加密后數(shù)據(jù)晴玖;

服務端:服務端經(jīng)過私鑰(server.key)读存,進行解密,獲取?premaster secret(協(xié)商密鑰過程)呕屎;

此時客戶端和服務器端都擁有了三個要素:random-client让簿、random-server和premaster secret,安全通道已經(jīng)建立秀睛,以后的交流都會校檢上面的三個要素通過算法算出的session key尔当;而雙向認證過程相當于客戶端和服務端反過來再執(zhí)行認證、加解密蹂安、協(xié)商一遍椭迎。

證書生成方式:

1. openssl工具生成:

第一步,生成ca密鑰和ca證書

openssl genrsa -out ca.key 2048

# 添加 -subj 是為了省去創(chuàng)建請求之后的交互

openssl req -new nodes -key ca.key -subj "http://CN=nzh.com" -days 5000 -out ca.crt

第二步藤抡,生成server密鑰和證書

openssl genrsa -out server.key 2048

# //CN必須添加侠碧,服務端的域名凌盯,或者hosts文件中ip的別名艳悔,等同于localhost

openssl req -new -key server.key -subj "http://CN=server" -out server.csr

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

第三步揍瑟,生成client密鑰和證書

openssl genrsa -out client.key 2048

openssl req -new -key server.key -subj "http://CN=client" -out client.csr

echo extendedkeyUsage=clientAuth > ./extfile.cnf

openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile ./extfile.cnf -out client.crt -days 5000

2. Golang代碼生成:

第一步,生成證書之前瓷式,先構(gòu)造出證書結(jié)構(gòu)體,并初始化相應的參數(shù)语泽;

構(gòu)造證書請求結(jié)構(gòu)體

第二步贸典,進行證書簽名,如果不是CA證書踱卵,則加載待簽名的證書廊驼;

加載待簽名證書

第三步据过,進行證書簽名,圖中46行和49行主要區(qū)別生成CA自簽名證書還是生成CA證書簽名妒挎;

證書簽名過程

最后生成證書目錄結(jié)構(gòu)如下:

證書目錄結(jié)構(gòu)

Golang代碼實現(xiàn)雙向認證過程:

服務器端:

雙向認證過程中绳锅,只要結(jié)構(gòu)體實現(xiàn)了ServeHTTP結(jié)構(gòu)就相當于實現(xiàn)一個handler;

加載服務端的公鑰和私鑰用于解密客戶端發(fā)送過來的隨機字符酝掩;

加載CA證書是為了驗證客戶端的證書是否合格鳞芙;

服務端代碼

客戶端:

客戶端公鑰,私鑰和CA證書處理等同于服務端證書處理期虾,然后發(fā)送請求原朝,打印返回值;

客戶端代碼

后續(xù)會繼續(xù)補充curl命令以及整個實現(xiàn)源碼镶苞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喳坠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茂蚓,更是在濱河造成了極大的恐慌丙笋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煌贴,死亡現(xiàn)場離奇詭異御板,居然都是意外死亡,警方通過查閱死者的電腦和手機牛郑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門怠肋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淹朋,你說我怎么就攤上這事笙各。” “怎么了础芍?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵杈抢,是天一觀的道長。 經(jīng)常有香客問我仑性,道長惶楼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任诊杆,我火速辦了婚禮歼捐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晨汹。我一直安慰自己豹储,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布淘这。 她就那樣靜靜地躺著剥扣,像睡著了一般巩剖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钠怯,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天球及,我揣著相機與錄音,去河邊找鬼呻疹。 笑死吃引,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的刽锤。 我是一名探鬼主播镊尺,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼并思!你這毒婦竟也來了庐氮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤宋彼,失蹤者是張志新(化名)和其女友劉穎弄砍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體输涕,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡音婶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莱坎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衣式。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檐什,靈堂內(nèi)的尸體忽然破棺而出碴卧,到底是詐尸還是另有隱情,我是刑警寧澤乃正,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布住册,位于F島的核電站,受9級特大地震影響瓮具,放射性物質(zhì)發(fā)生泄漏荧飞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一搭综、第九天 我趴在偏房一處隱蔽的房頂上張望垢箕。 院中可真熱鬧,春花似錦兑巾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帅掘。三九已至,卻和暖如春堂油,著一層夾襖步出監(jiān)牢的瞬間修档,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工府框, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吱窝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓迫靖,卻偏偏與公主長得像院峡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子系宜,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容