HTTPS相关知识以及在golang中的应用
最近简单学习了HTTPS,并在golang中实践了一下,现在把学到的知识记录下来,方便以后查看,如果有幸能帮到有需要的人就更好了,如果有错误欢迎留言指出。
- 一些简单的概念,可以自行百度百科
- HTTPS简介:HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
- HTTPS与HTTP的区别:HTTP是以明文的方式来传递数据的,HTTPS是在HTTP的基础上加入了SSL协议的加密传输方式。
- CA(Certificate Authority):ca就是我们所说的证书颁发机构,ca是可信的权威机构,其实就是个办证的,给他钱,他给我们办证,当然了办的都是真证。ca机构也是有证书的,我们的电脑中自带了很多ca机构的证书,这些证书被称为“根证书”,根证书的作用就是检查别人的证是不是合法的。系统中的根证书如图:

- 服务端证书:在使用https时,服务端要载入服务端证书和服务端私钥,这里涉及到一些非对称加密的知识(简单讲,非对称加密就是有两个钥匙,公钥和私钥,用公钥加密用私钥解密,这样会安全一些,比如说,客户端要向服务器传消息,可以给服务器一个请求,拿到服务器的公钥,用服务器的公钥把数据加密,加密后的数据传给服务器,服务器收到之后用服务器端的私钥解密,拿到数据,非对称开销大,不适合大数据量传输)可以自行搜索学习一下。服务端证书就是上面提到的办证(CA)的给你办的证,你得有这个证,人家才觉得你这人靠谱,证书中呢有一些信息,例如服务端公钥,谁给你办的证(CA的签名)
- 服务端私钥:这就是解密一些客户端发到服务器来的前置数据所用的私钥。
客户端和服务器通信时二者需要的数据:

客户端和服务器通信的流程:

在golang中的使用:
首先我们要有一个服务于https的服务端,通过golang的http包,很简单的就能完成https服务端的构建
func main() {
http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {
defer request.Body.Close()
writer.Write([]byte("hello world"))
})
if err := http.ListenAndServeTLS(":8080", certPath, keyPath, nil); err != nil {
panic(err)
}
}
certPath和keyPath分别是服务端证书和服务端私钥的路径,在这里我用openssl生成了一个CA根证书,用这个CA根证书签发了服务器证书。
然后我将我用openssl生成的CA根证书导入浏览器中并信任该CA,然后重启chrome(不要随便导入未知的CA根证书,这很危险)

然后我们通过浏览器访问https://localhost:8080/test

ok,已经可以正常通信了。
如果没有把根证书导入到我们的电脑中并设置信任会怎么样呢?下面我将根证书设为不信任。

再次访问https://localhost:8080/test

浏览器会提示你这个链接不是安全的https链接
数据摘要:将数据做hash之后得到的就是数据摘要。常用的算法有md5,sha1等等。
签名:签名就是用私钥对数据摘要进行加密,这个操作就叫做签名。
签名解决的问题:在非对称加密中,加密公钥是公开的,AB两个终端建立连接,发送的公钥可能会被其他人获取到,这个人获取到公钥后可能会伪装成AB其中一人向另一个人发送加密后的请求。为了防止有人冒充,引入了签名的机制来验证发送人是否合法。
签名验证问题:在非对称加密中,公钥用于数据加密,私钥用于数据解密,私钥也可以用于对数据签名,用公钥来验证签名。
签名验证的流程:非对称加密中,A要向B传送密文,B要验证接收到的数据是否是A发送的,所以A需要在向B发送密文数据时一起发送一个签名。首先将要发送的数据明文做hash,得到数据摘要,再用私钥加密数据摘要,生成签名,将签名和已加密的密文,一起发送给B,B拿到密文和签名后,用私钥对密文进行解密,解密后获得明文,对明文做hash生成数据摘要,B将A发送来的签名用A的公钥进行解密,解密后获得的数据摘要和B自己生成的数据摘要做比对,如果相同就是没有被篡改过的数据。
HTTPS相关知识以及在golang中的应用的更多相关文章
- [skill][https][ssl/tls] HTTPS相关知识汇总
结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA DHE / ECDHE PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...
- 爬虫(2)- HTTP和HTTPS 相关知识
HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...
- HTTP与HTTPS相关知识
URL的开头一般会有http或https,这是访问资源需要的协议类型.有时还会看到ftp.sftp.smb开头的URL,这些都是协议类型.一般使用得最多的还是http和https. HTTP HTTP ...
- JPA相关知识点滴--持续更新中.....
Java 持久化(JPA) •Java EE 5 在EJB 3.0 中包含JPA 1.0 •参考实现:TopLink Essentials •Java EE 6 包含JPA 2.0 •参考实现:Ec ...
- https相关知识总结
从园子里看到很多讲解不错的文章,将链接放到这里,备忘 浅析数字证书:https://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html
- CSS相关知识(持续更新中)
1. 弹性布局 一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式.引入弹性布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间. 2. ...
- Android Https相关完全解析 当OkHttp遇到Https
一.概述 其实这篇文章理论上不限于okhttp去访问自签名的网站,不过接上篇博文了,就叫这个了.首先要了解的事,okhttp默认情况下是支持https协议的网站的,比如https://www.baid ...
- Android Https相关完全解析
转载: 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/48129405: 本文出自:[张鸿洋的博客] 一.概述 其实这篇文章理论 ...
- C#相关知识总结
字符串相关知识 判断某字符串中包含某个字符,并过滤 if (string.Contains("*")) string = string.Replace('*',' '); // ...
随机推荐
- Carbon中文使用手册
Introduction Carbon 继承了PHP的 Datetime 类和JsonSerialiable.所以 Carbon 中没有涉及到的,但在 Datetime 和JsonSerializab ...
- [EffectiveC++]item38:通过复合塑膜出has -a 或“根据某物实现出”
Model "has-a"or “is-implemented-in-terms-of” through composition
- Java中多线程重复启动
在面试时候经常被问到多线程的相关问题: 今天在测试的时候发现下面的代码会抛出异常: java.lang.IllegalThreadStateException public static void m ...
- SOJ4480 Easy Problem IV (并查集)
Time Limit: 3000 MS Memory Limit: 131072 K Description 据说 你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任 ...
- Adobe flash player 因过期而遭到阻止解决办法
最近使用谷歌浏览器时总是提示Adobe flash player 因过期而遭到阻止,这让人很头痛,基本上就是打开一个网页就会弹出一个提示,下面是解决办法. 问题的截图界面: 解决方法:在chrome浏 ...
- BZOJ1037:[ZJOI2008]生日聚会Party(DP)
Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party.hidadz带着朋友们来到花园中,打算坐成一排玩游戏. 为了游戏不至于无聊,就座的方案应满足如下条件: ...
- 【[HAOI2009]逆序对数列】
发现自己学了几天splay已经傻了 其实还是一个比较裸的dp的,但是还是想了一小会,还sb的wa了几次 首先这道题的状态应该很好看出,我们用\(f[i][j]\)表示在前\(i\)个数中(即\(1-i ...
- HDU 6370 Werewolf 【并查集】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6370 Werewolf Time Limit: 2000/1000 MS (Java/Others) ...
- vue - 简单实例(vue-router + webpack + vuex)
分享 + 实践 基于公司部分产品技术栈转型使用vue,部分同事需要学习一下,快速上手,那么我很荣幸的成为了给大家分享vue技术栈的‘ ’导师‘,在这里我分享一下: 讲解大纲为:(我是有一份PPT的, ...
- springmvc(2)处理器设配器和映射器
非注解的处理器 映射器 和 适配器 一.处理器映射器 1.BeanNameUrlHandlerMapping <bean class="org.springframework.web ...