golang x509的Certificate.Verify函數(shù)

周末在家無趣丝蹭,研究了一個golang里面的Certificate.Verify函數(shù)介粘。

golang的官方定義在這里:https://golang.org/pkg/crypto/x509/#Certificate.Verify

函數(shù)原型聲明如下:
func (c Certificate) Verify(opts VerifyOptions) (chains [][]Certificate, err error)

其中:

  1. c *Certificate是待驗證的證書
  2. 參數(shù)opts定義如下玄帕,我們只關(guān)注這兩個成員。
type VerifyOptions struct {
    ...
    Roots         *CertPool  // if nil, the system roots are used
    Intermediates *CertPool
    ...
}
  1. 返回值是一個二維數(shù)組證書译秦。

這個函數(shù)的功能是:

Verify attempts to verify c by building one or more chains from c to a certificate in opts.Roots, using certificates in opts.Intermediates if needed. If successful, it returns one or more chains where the first element of the chain is c and the last element is from opts.Roots.

If opts.Roots is nil and system roots are unavailable the returned error will be of type SystemRootsError.

解釋一下就是:

  1. 試圖找出所有從c開始到opts.Roots中的證書為止的所有的證書鏈。
  2. 這其中會有多條證書鏈,所以返回類型是二維數(shù)組[][]*Certificate筑悴,每一條鏈都是一個一維數(shù)組表示们拙。
  3. 對每一條鏈:
    • 第一個元素都是c
    • 最后一個元素是opts.Roots中的成員。
    • 中間元素都是opts.Intermediates中的成員阁吝。中間元素可能沒有砚婆,則此條證書鏈只包含兩個成員c和opts.Roots成員。
  4. 如果opts.Roots為空求摇,那么opts.Roots使用系統(tǒng)根證書射沟。

舉一個例子:
假設(shè)存在證書鏈簽出關(guān)系:C1 -> C2 -> C3 -> C4,即C1簽出C2与境,C2簽出C3验夯,C3簽出C4;現(xiàn)在使用函數(shù):

C4.Verify(VerifyOptions {
  Roots        : [...],
  Intermediates: [...],
})

我們根據(jù)Intermediates和Roots的值不同摔刁,比較輸出結(jié)果:

Roots Intermediates 輸出 說明
[C1, C2, C3] [] [C4, C3] <none>
[] [C1, C2, C3] error 找不到Roots挥转,又不屬于系統(tǒng)根證書
[C3] [C1, C2, C3] [C4, C3] 這個C3就是Roots中的C3
[C1, C2, C3] [C3] [C4, C3]
[C4, C3, C2]
第一個C3是Roots.C3
第二個C3是Intermediates.C3
[C1, C2, C3] [C1, C2, C3] [C4, C3]
[C4, C3, C2]
[C4, C3, C2, C1]
C4 -> C3.R
C4 -> C3.I -> C2.R
C4 -> C3.I -> C2.I -> C1.R
... ... ... ...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市共屈,隨后出現(xiàn)的幾起案子绑谣,更是在濱河造成了極大的恐慌,老刑警劉巖拗引,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件借宵,死亡現(xiàn)場離奇詭異,居然都是意外死亡矾削,警方通過查閱死者的電腦和手機(jī)壤玫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼凯,“玉大人欲间,你說我怎么就攤上這事《喜浚” “怎么了猎贴?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝴光。 經(jīng)常有香客問我她渴,道長,這世上最難降的妖魔是什么虱疏? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任惹骂,我火速辦了婚禮,結(jié)果婚禮上做瞪,老公的妹妹穿的比我還像新娘对粪。我一直安慰自己右冻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布著拭。 她就那樣靜靜地躺著纱扭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪儡遮。 梳的紋絲不亂的頭發(fā)上乳蛾,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音鄙币,去河邊找鬼肃叶。 笑死,一個胖子當(dāng)著我的面吹牛十嘿,可吹牛的內(nèi)容都是我干的因惭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绩衷,長吁一口氣:“原來是場噩夢啊……” “哼蹦魔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咳燕,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勿决,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后招盲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體低缩,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年曹货,在試婚紗的時候發(fā)現(xiàn)自己被綠了表制。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡控乾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娜遵,到底是詐尸還是另有隱情蜕衡,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布设拟,位于F島的核電站慨仿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纳胧。R本人自食惡果不足惜镰吆,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跑慕。 院中可真熱鬧万皿,春花似錦摧找、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减余,卻和暖如春综苔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背位岔。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工如筛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抒抬。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓杨刨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞧剖。 傳聞我的和親對象是個殘疾皇子拭嫁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355