网站首页 > 文章中心 > 其它

go语言生成数字证书

作者:小编 更新时间:2023-08-14 13:33:33 浏览量:395人看过

golang判断有没有证书

通过Go语言创建CA与签发证书

本篇文章中,将描述如何使用go创建CA,并使用CA签署证书.在使用openssl创建证书时,遵循的步骤是 创建秘钥 创建CA 生成要颁发证书的秘钥 使用CA签发证书.这种步骤,那么我们现在就来尝试下.

首先,会从将从创建 CA 开始. CA 会被用来签署其他证书

此时此刻呢需要对证书生成公钥和私钥

然后生成证书:

go语言生成数字证书-图1

我们看到的证书内容是PEM编码后的,现在 caBytes 我们有了生成的证书,我们将其进行 PEM 编码以供以后使用:

为该证书创建私钥和公钥:

有了上述的内容后,可以创建证书并用CA进行签名

要保存成证书格式需要做PEM编码

创建一个 ca.go 里面是创建ca和颁发证书的逻辑

如果需要使用的话,可以引用这些函数

go语言生成数字证书-图2

keyUsage : 密钥用法,防否认(nonRepudiation)、数字签名(digitalSignature)、密钥加密(keyEncipherment).

文章来自

证书链和TLS Pinning

摘自? HTTPS 精读之 TLS 证书校验 ?

这篇讲证书校验,写得很好.

文章最开始,我们访问? ?时,浏览器并非只拿到了一个证书,而是一个证书链:

go语言生成数字证书-图3

证书「*. 」的 Issuer 就是它的父节点「Go Daddy Secure Certificate Authority」.因为 UA(浏览器或操作系统)中会预先内置一些权威 CA 签发的根证书(Root Certificate)或中间证书(Intermediate Certificate),例如上面的 「Go Daddy Secure Certificate Authority」和 「Go Daddy Root Certificate Authority」.

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

但是实现双向校验的成本会比较高,因为 UA 端的证书管理比较复杂,例如证书的获取、有效期管理等等问题,而且需要用户手动添加到 Trust Store,这样也会降低用户体验.

既然双向认证的成本如此之高,那我们不妨利用 SSL Pinning 来解决证书认证被"劫持"的问题.

OkHttp 在 UA 端用一个类?Pin?来表示服务端的 TLS 证书.

证书的最终的表现形式是一个利用哈希算法(由?hashAlgorithm?字段表示)对证书公钥生成的哈希值(由?hash?字段表示),形式如下:

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

TLS 证书的 Extension 字段中有一个 SAN,用于配置域名,例如 「*. 」的证书中配置了两个域名 —— *. ?和? ,两者所匹配的域名是不同的,所以?Pin?用了一个?pattern?字段来表示两种模式.

我们知道,TLS 证书携带了端的公钥(Public Key),而这个公钥是 TLS 能够通过握手协商出"对称加密密钥"的关键,证书验证仅仅是为了证明当前证书确实是这个公钥的携带者,或者叫 Owner.所以我们只需要用一个?Pin?把服务端证书的公钥存储在本地,当得到证书链(Certificate Chain)之后,用?Pin?里的?hash?去匹配证书的公钥.

因为本地可以配置多个?Pin,所以呢 OkHttp 用了一个?CertificatePinner?来管理.

以上就是土嘎嘎小编为大家整理的go语言生成数字证书相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章