go語言生成數(shù)字證書,怎樣生成數(shù)字證書

golang判斷有沒有證書

利用客戶端對證書進(jìn)行校驗(yàn)。

瀏陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

1、服務(wù)端可以要求對客戶端的證書進(jìn)行校驗(yàn),以更嚴(yán)格識別客戶端的身份,限制客戶端的訪問。

2、要對客戶端數(shù)字證書進(jìn)行校驗(yàn),客戶端需要先有自己的證書。

通過Go語言創(chuàng)建CA與簽發(fā)證書

本篇文章中,將描述如何使用go創(chuàng)建CA,并使用CA簽署證書。在使用openssl創(chuàng)建證書時,遵循的步驟是 創(chuàng)建秘鑰 創(chuàng)建CA 生成要頒發(fā)證書的秘鑰 使用CA簽發(fā)證書。這種步驟,那么我們現(xiàn)在就來嘗試下。

首先,會從將從創(chuàng)建 CA 開始。 CA 會被用來簽署其他證書

接下來需要對證書生成公鑰和私鑰

然后生成證書:

我們看到的證書內(nèi)容是PEM編碼后的,現(xiàn)在 caBytes 我們有了生成的證書,我們將其進(jìn)行 PEM 編碼以供以后使用:

證書的 x509.Certificate 與CA的 x509.Certificate 屬性有稍微不同,需要進(jìn)行一些修改

為該證書創(chuàng)建私鑰和公鑰:

有了上述的內(nèi)容后,可以創(chuàng)建證書并用CA進(jìn)行簽名

要保存成證書格式需要做PEM編碼

創(chuàng)建一個 ca.go 里面是創(chuàng)建ca和頒發(fā)證書的邏輯

如果需要使用的話,可以引用這些函數(shù)

panic: x509: unsupported public key type: rsa.PublicKey

這里是因?yàn)? x509.CreateCertificate 的參數(shù) privatekey 需要傳入引用變量,而傳入的是一個普通變量

extendedKeyUsage :增強(qiáng)型密鑰用法(參見"new_oids"字段):服務(wù)器身份驗(yàn)證、客戶端身份驗(yàn)證、時間戳。

keyUsage : 密鑰用法,防否認(rèn)(nonRepudiation)、數(shù)字簽名(digitalSignature)、密鑰加密(keyEncipherment)。

文章來自

證書鏈和TLS Pinning

摘自? HTTPS 精讀之 TLS 證書校驗(yàn) ?

這篇講證書校驗(yàn),寫得很好。

1. 瀏覽器對服務(wù)器發(fā)送了一次請求,包含協(xié)議版本號、一個客戶端生成的隨機(jī)數(shù)(Client random),以及客戶端支持的加密方法。

2. 服務(wù)器確認(rèn)雙方使用的加密方法,并給出數(shù)字證書、以及一個服務(wù)器生成的隨機(jī)數(shù)(Server random)。

3. 瀏覽器確認(rèn)數(shù)字證書有效,然后生成一個新的隨機(jī)數(shù)(Premaster secret),并使用數(shù)字證書中的公鑰,加密這個隨機(jī)數(shù),發(fā)給服務(wù)器。

4. 服務(wù)器使用自己的私鑰,獲取瀏覽器發(fā)來的隨機(jī)數(shù)(即Premaster secret)。

5. 服務(wù)器和瀏覽器根據(jù)約定的加密方法,使用前面的三個隨機(jī)數(shù),生成"對話密鑰"(session key),用來加密接下來的整個對話過程。

X.509 除了規(guī)范證書的內(nèi)容之外,還規(guī)范了如何獲取 CRL 以及 Certificate Chain 的驗(yàn)證算法。X.509 規(guī)范由國際電信聯(lián)盟(ITU)定義, RFC 5280 ?只是定義了 X.509 的用法。

文章最開始,我們訪問? ?時,瀏覽器并非只拿到了一個證書,而是一個證書鏈:

證書「*. 」的 Issuer 就是它的父節(jié)點(diǎn)「Go Daddy Secure Certificate Authority」。因?yàn)?UA(瀏覽器或操作系統(tǒng))中會預(yù)先內(nèi)置一些權(quán)威 CA 簽發(fā)的根證書(Root Certificate)或中間證書(Intermediate Certificate),例如上面的 「Go Daddy Secure Certificate Authority」和 「Go Daddy Root Certificate Authority」。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Chain of trust - from wikipedia

當(dāng)獲得證書鏈之后,我們就可以很輕松的往上回溯到被 UA 信任的證書,雖然 UA 內(nèi)置的可能是中間證書(Intermediate Certificate),但是如果一個 End-Entity 證書即使回溯到跟證書(Root Certificate)也沒有在 UA 的受信列表中找到,那么這個站點(diǎn)就會被標(biāo)記為不安全,例如 12306 的主頁被標(biāo)記為 “Not Secure",因?yàn)樗母C書不被信任。

我們上面所分析的校驗(yàn)方式屬于單向校驗(yàn),僅僅是客戶端對服務(wù)端證書進(jìn)行校驗(yàn),這種方式無法避免中間人攻擊(Man-In-the-Middle-Attack)。我們?nèi)粘i_發(fā)中用 Charles 抓包時, Charles 就扮演了一個中間人的角色 。抓包之前,我們需要在手機(jī)上安裝一個 Charles 提供的根證書(Root Certificate),這個根證書加入到手機(jī)的 Trust Store 之后,它所簽發(fā)的證書都會被 UA 認(rèn)作可信。那么 Charles 就可以肆無忌憚地代表真正的 UA 與服務(wù)端建立連接,因?yàn)槭菃蜗蛘J(rèn)證,所以服務(wù)端并不會要求 Charles 提供證書。

但是實(shí)現(xiàn)雙向校驗(yàn)的成本會比較高,因?yàn)?UA 端的證書管理比較復(fù)雜,例如證書的獲取、有效期管理等等問題,而且需要用戶手動添加到 Trust Store,這樣也會降低用戶體驗(yàn)。

既然雙向認(rèn)證的成本如此之高,那我們不妨利用 SSL Pinning 來解決證書認(rèn)證被“劫持”的問題。

OkHttp 在 UA 端用一個類?Pin?來表示服務(wù)端的 TLS 證書。

證書的最終的表現(xiàn)形式是一個利用哈希算法(由?hashAlgorithm?字段表示)對證書公鑰生成的哈希值(由?hash?字段表示),形式如下:

sha256/afwiKY3RxoMmLkuRW1l7QsPZTJPwDS2pdDROQjXw8ig=

斜杠之前的字符串是?hashAlgorithm,之后的字符串是?hash?值。

TLS 證書的 Extension 字段中有一個 SAN,用于配置域名,例如 「*. 」的證書中配置了兩個域名 —— *. ?和? ,兩者所匹配的域名是不同的,所以?Pin?用了一個?pattern?字段來表示兩種模式。

我們知道,TLS 證書攜帶了端的公鑰(Public Key),而這個公鑰是 TLS 能夠通過握手協(xié)商出“對稱加密密鑰”的關(guān)鍵,證書驗(yàn)證僅僅是為了證明當(dāng)前證書確實(shí)是這個公鑰的攜帶者,或者叫 Owner。所以我們只需要用一個?Pin?把服務(wù)端證書的公鑰存儲在本地,當(dāng)?shù)玫阶C書鏈(Certificate Chain)之后,用?Pin?里的?hash?去匹配證書的公鑰。

因?yàn)楸镜乜梢耘渲枚鄠€?Pin,因此 OkHttp 用了一個?CertificatePinner?來管理。

如此一來,在 TLS 握手過程中,校驗(yàn)證書那一步就可以保證服務(wù)端下發(fā)的證書是客戶端想要的,從而避免了被中間人攻擊(MIMA),因?yàn)楸镜貨]有存儲中間人證書的?Pin,所以證書匹配會失敗,握手也會失敗,從而連接無法建立。

當(dāng)前標(biāo)題:go語言生成數(shù)字證書,怎樣生成數(shù)字證書
瀏覽路徑:http://muchs.cn/article8/hcjgop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信小程序面包屑導(dǎo)航、、手機(jī)網(wǎng)站建設(shè)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化