加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 酷站推荐 > 酷站 > 正文

GoLang:你真的了解 HTTPS 吗?

发布时间:2020-03-06 11:35:56 所属栏目:酷站 来源:站长网
导读:副标题#e# 一直以来,在实验室甚至整个公司特别强调安全和隐私,近半年,笔者在用 GoLang 开发智能边缘计算设备的网络通信项目时,常被要求务必重视通信的安全和隐私。期间,对接了多个合作方,有的要求公网下要防止域名劫持,有的要求客户端上报要带证书啊

在信任链上有 3 类证书:根证书,中介证书和用户证书。根证书前文已有说明,用户证书就是对端发过来的证书,或者说是用户向权威 CA 机构绑定了自己身份(主要指域名)和自己公钥的证书。中介证书可以理解由权威 CA 机构委派的代理机构签发的数字证书,推荐阅读《What is an intermediate certificate?》。中介证书或者说是中介机构的存在是为了保证根证书的密钥的安全性。

细心的同学仔细看一看 certmgr 会发现有一个分类是“中间证书颁发机构”,这里存放的就是中介证书。用户证书绝大多数是通过权威的 CA 机构的代理中介机构颁发。

这么来说,根据对端发来的用户证书寻找对应的根证书岂不是更困难了?

自问自答:这是一个在树形数据结构中,从叶子节点搜索根节点的过程,直接一个最原始的深搜(DFS)不就可以了嘛?举例说明,如下图(引自Wikipedia-Chain of trust):

GoLang:你真的了解 HTTPS 吗?

从用户证书开始。

记“Issuer”字段的值为 i1,搜索本地证书,寻找由“Subject”为 i1 的证书。

若没有找到,结束返回证书无效;否则,跳到步骤 4)。

判断该证书的 Issuer 值是否等于 Subject 值。

若是,则该证书是根证书,结束返回该证书;否则跳到步骤 6)。

以该证书开始,跳转 2)(继续搜索)。

更多关于信任链的知识点,推荐阅读《What is the SSL Certificate Chain?》

4. 证书怎么样?

相信不少同学或多或少接触过证书文件,比如.pem、.crt、.cer、.key 等,于是问题就来了:

“为什么有这么多不同后缀名的证书啊?他们有什么联系和区别?”

回答这个问题要从 3 个层面来分析:

证书标准

证书编码格式

文件扩展名

(1) 证书标准

数字证书的格式普遍采用的是 X.509 国际标准,维基百科对于 X.509 解释如下:

X.509 是密码学里公钥证书的格式标准。X.509 证书已应用在包括 TLS/SSL 在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509 证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构 CA 的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

X.509 是 ITU-T 标准化部门基于他们之前的 ASN.1 定义的一套证书标准。

 

(2) 证书的编码格式

X.509 标准的证书文件具有不同的编码格式:PEM 和 DER。

PEM:

PEM,全称 Privacy Enhanced Mail,以文本格式存储,以 -----BEGIN

XXX-----开头、-----END XXX-----结尾,中间内容是 BASE64 编码数据。其文本内容大概如下:

html -----BEGIN CERTIFICATE----- Base64编码过的证书数据 -----END CERTIFICATE----- 

通常,PEM 格式可以存储公钥、私钥、证书签名请求等数据。查看 PEM 格式证书的信息一般采用如下命令:

openssl x509 -in xxx.pem -text -noout 

Apache 和 Nginx 服务器偏向于使用这种编码格式。

DER:

DER,全称 Distinguished Encoding Rules,以二进制存储,因此文件结构无法直接预览,只能通过如下命令查看:

html openssl x509 -in xxx.der -inform der -text -noout 

DER 格式也可以存储公钥、私钥、证书签名请求等数据。Java 和 Windows 应用偏向于使用这种编码格式。

当然同一 X.509 证书的不同编码之间可以互相转换:

PEM 转为 DER:

openssl x509 -in xxx.pem -outform der -out xxx.der 

DER 转为 PEM:

openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem 

(3) 文件扩展名

不同的扩展名可以分为以下几类:

证书:存放数字证书,X.509 标准,格式可能是 PEM 或 DER。.crt、.cer

密钥:用来存放一个 RSA 公钥或私钥,这类文件不是 X.509 标准,但是是 PEM 或 DER 格式。后缀名有.key。

证书+密钥:可同时存放证书和 RSA 公钥/.pem、.der、.p12

证书请求:并不是证书,而是证书签名请求。csr

四、完整性校验:HTTPS 的哈希

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读