最近简单学习了HTTPS,并在golang中实践了一下,现在把学到的知识记录下来,方便以后查看,如果有幸能帮到有需要的人就更好了,如果有错误欢迎留言指出。

  • 一些简单的概念,可以自行百度百科
  1. HTTPS简介:HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
  2. HTTPS与HTTP的区别:HTTP是以明文的方式来传递数据的,HTTPS是在HTTP的基础上加入了SSL协议的加密传输方式。
  3. CA(Certificate Authority):ca就是我们所说的证书颁发机构,ca是可信的权威机构,其实就是个办证的,给他钱,他给我们办证,当然了办的都是真证。ca机构也是有证书的,我们的电脑中自带了很多ca机构的证书,这些证书被称为“根证书”,根证书的作用就是检查别人的证是不是合法的。系统中的根证书如图:
  4. 服务端证书:在使用https时,服务端要载入服务端证书和服务端私钥,这里涉及到一些非对称加密的知识(简单讲,非对称加密就是有两个钥匙,公钥和私钥,用公钥加密用私钥解密,这样会安全一些,比如说,客户端要向服务器传消息,可以给服务器一个请求,拿到服务器的公钥,用服务器的公钥把数据加密,加密后的数据传给服务器,服务器收到之后用服务器端的私钥解密,拿到数据,非对称开销大,不适合大数据量传输)可以自行搜索学习一下。服务端证书就是上面提到的办证(CA)的给你办的证,你得有这个证,人家才觉得你这人靠谱,证书中呢有一些信息,例如服务端公钥,谁给你办的证(CA的签名)
  5. 服务端私钥:这就是解密一些客户端发到服务器来的前置数据所用的私钥。

客户端和服务器通信时二者需要的数据:

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

在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中的应用的更多相关文章

  1. [skill][https][ssl/tls] HTTPS相关知识汇总

    结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA   DHE / ECDHE   PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...

  2. 爬虫(2)- HTTP和HTTPS 相关知识

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...

  3. HTTP与HTTPS相关知识

    URL的开头一般会有http或https,这是访问资源需要的协议类型.有时还会看到ftp.sftp.smb开头的URL,这些都是协议类型.一般使用得最多的还是http和https. HTTP HTTP ...

  4. JPA相关知识点滴--持续更新中.....

    Java 持久化(JPA)  •Java EE 5 在EJB 3.0 中包含JPA 1.0 •参考实现:TopLink Essentials •Java EE 6 包含JPA 2.0 •参考实现:Ec ...

  5. https相关知识总结

    从园子里看到很多讲解不错的文章,将链接放到这里,备忘 浅析数字证书:https://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html

  6. CSS相关知识(持续更新中)

    1. 弹性布局 一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式.引入弹性布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列.对齐和分配空白空间. 2. ...

  7. Android Https相关完全解析 当OkHttp遇到Https

    一.概述 其实这篇文章理论上不限于okhttp去访问自签名的网站,不过接上篇博文了,就叫这个了.首先要了解的事,okhttp默认情况下是支持https协议的网站的,比如https://www.baid ...

  8. Android Https相关完全解析

    转载: 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/48129405: 本文出自:[张鸿洋的博客] 一.概述 其实这篇文章理论 ...

  9. C#相关知识总结

    字符串相关知识   判断某字符串中包含某个字符,并过滤 if (string.Contains("*")) string = string.Replace('*',' '); // ...

随机推荐

  1. 修改容器的hosts文件

    修改容器的hosts文件 1.介绍 docker容器中的hosts文件虽然在宿主机磁盘上/var/lib/docker/containers/xxx/hosts中,但是修改该文件是无效的,需要通过其他 ...

  2. x64 QWORD Xor shellcode encoder

    #!/usr/bin/env python #Filename: Xor_QWORD_x64.py #coding=utf-8 import re import sys import random i ...

  3. python 中的list&tuple

    list Python内置的一种数据类型是列表:list>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classm ...

  4. Linux--sudo权限讲解

    sudo简介:sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 和管理时间,同 ...

  5. Linux 命令行浏览器

    真是没有做不到只有想不到! Linux下竟然有命令行式的浏览器:W3m SPC向下翻页 b向上翻页 J 向下滚动一行 K 向上滚动一行 > 右移一屏 < 左移一屏 TAB 转到下个超链接 ...

  6. 四、HTTP和HTTPS的区别

    1:简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可 ...

  7. Perl入门(七) Perl脚本的调试

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/sunshoupo211/article/details/32711165 编程中错误不可避免.调试可 ...

  8. BZOJ2118:墨墨的等式(最短路)

    Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...

  9. 【CSS】易错

    1.外边距默认是透明的,因此不会遮挡其后的任何元素.2.背景应用于由内容和内边距.边框组成的区域.3.外边距可以是负值,而且在很多情况下都要使用负值的外边距.4.不要给元素添加具有指定宽度的内边距,而 ...

  10. java GC是何时对什么东西做什么事情

    之前学习了javaGC的原理机制,有了一定的了解,现在做一个整理总结,便于理解记忆,包括三个问题: 1. java GC是什么时候做的? 2. java GC作用的东西是什么? 3. java GC具 ...