加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.52wenzhou.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 酷站推荐 > 酷站 > 正文

GoLang:你真的了解 HTTPS 吗?

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

GoLang:你真的了解 HTTPS 吗?

六、HTTPS 实战问题记录

1. 问题:HTTPS 是否需要做域名劫持?

没必要。

原因如下:https 在证书校验这步,客户端除了通过对比数字签名来校验证书的有效性,还会比较证书上的域名是否与自己要访问的域名一致。因此,只要服务器的证书是可信的且客户端不跳过“证书验证”这个步骤,https 能够防止域名劫持。

笔者在实际中做过防止域名劫持的工作,具体做法是:首先,客户端向可信赖的域名服务器请求域名对应的 IP 地址;接着,客户端用 IP 替换域名进行网络请求。被称为HTTPS 的 IP 直连。但在实际中会遇到了一个问题:域名身份不对。根本解决方案是:1).书校验时,选择自己定义的 hostname 进行校验;2).证书校验前,把 URL 的 IP 替换回域名。在很多语言实现中,解决方案更为简单:在请求头部的增加 host-name 字段,值填入域名即可。

2. 问题:"x509: certificate signed by unknown authority"

这个问题是客户端拿到了服务器的证书要进行身份验证,但是通过证书信任链策略发现中间断了,搜索不到根证书。说白了就是客户端本地没有签发这个用户证书的根证书或中介证书。

实际中的解决办法有:1). 缺啥装啥,没有根证书/中介证书,那就安装上;2).跳过证书身份验证这步。GoLang 中跳过身份验证的实现:

client := &http.Client{ 

    Transport: &http.Transport{ 

        TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 

    } 

3. 问题:https 项目中,服务端怎么管理证书和 RSA 密钥?

看情况。

如果是正规的公司,一般会有统一的接入层帮忙做掉,后台开发程序员只需要关心自己的业务逻辑即可。运维同事或者是负责接入层开发的同事们会定期更新证书,负责帮忙做 HTTPS 的 RSA 管理。而且这些证书都是由正规权威 CA 机构签发的,普遍的客户端设备上都预置了对应的根证书。

如果是个人,一般没有条件负担 HTTPS 证书费用,因此可以选择自己签发自签证书,或者到免费的证书签发机构申请证书。但是这类证书要求在客户端上同步安装对应的根证书。

4. 问题:https 项目中,客户端的根证书要提前安装吗?

上一个问题中已经提到了:

如果是正规权威 CA 机构签发的证书,一般不需要提前安装;

如果是私人签发的证书,需要提前安装。

但是,笔者在边缘计算设备上开发时发现,比如摄像头这类的“tinny os”上,是一个“阉割”版本的 Linux 系统,因此没有安装任何根证书。在这类设备上做 https 通信,一定需要提前安装根证书才行。

(编辑:温州站长网)

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

推荐文章
    热点阅读