本篇文章中,将描述如何使用go创建CA,并使用CA签署证书.在使用openssl创建证书时,遵循的步骤是 创建秘钥 创建CA 生成要颁发证书的秘钥 使用CA签发证书.这种步骤,那么我们现在就来尝试下.
首先,会从将从创建 CA 开始. CA 会被用来签署其他证书
此时此刻呢需要对证书生成公钥和私钥
然后生成证书:
我们看到的证书内容是PEM编码后的,现在 caBytes 我们有了生成的证书,我们将其进行 PEM 编码以供以后使用:
为该证书创建私钥和公钥:
有了上述的内容后,可以创建证书并用CA进行签名
要保存成证书格式需要做PEM编码
创建一个 ca.go 里面是创建ca和颁发证书的逻辑
如果需要使用的话,可以引用这些函数
keyUsage : 密钥用法,防否认(nonRepudiation)、数字签名(digitalSignature)、密钥加密(keyEncipherment).
文章来自
摘自? HTTPS 精读之 TLS 证书校验 ?
这篇讲证书校验,写得很好.
文章最开始,我们访问? ?时,浏览器并非只拿到了一个证书,而是一个证书链:
证书「*. 」的 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语言生成数字证书相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!