去语言中怎么实现HTTPS加密协议,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>去语言强>
去语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.Go语言专门针对多处理器系统应用程序的编程进行了优化,使用去编译的程序可以媲美C或c++代码的速度,而且更加安全,支持并行进程。
<强> HTTPS 强>
HTTPS是在HTTP下加入SSL(安全套接字层安全套接层)层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL,及其继任者传输层安全(传输层安全性,Transport Layer Security, TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密。
<强>客户端CA对其服务端证书进行校验过程如下:强>
<强>一:对其证书不进行校验强>
1,简易的HTTPS web服务器
服务器。:
包主要
import (
“fmt "net/http "
/*
引用>只要实现了ServerHTTP方法便可构建web服务器
*/
函数处理程序(w http。ResponseWriter r * http.Request) {
fmt。Println(“嗨,这是一个例子的https服务golang !”)
}
函数主要(){
http。HandleFunc(“/?处理程序)//设置路由及相对应的处理函数且实现了ServerHTTP方法
http.ListenAndServeTLS (“192.168.20.162:8001”、“server.crt”,
"服务器。键”,nil)//服务器。crt:服务端证书包含服务端公钥信息server.key:服务端私钥
/*
引用>生成私钥:
, openssl genrsa两级服务器。关键2048
引用>生成证书信息:
openssl点播- x509关键服务器。关键的两级服务器。crt天365
,,,, */
}
客户端。:
包主要
import (
,,,, "加密/tls "
,,,,“fmt”
,,,, " io/ioutil "
,,,, "net/http "
函数主要(){
,,,, tr:=, http.Transport {
,,,,,,,, TLSClientConfig:和tls。配置{InsecureSkipVerify:真},
,,,,}
,,,,/*
引用>客户端与服务器进行通信时客户端也要对服务器返回数字证书进行校验
因为服务器自签证书是无效的为了客户机与服务器正常通信
通过设置客户端跳过证书校验
TLSClientConfig: {, tls。配置{InsecureSkipVerify:真}
,,,,,,,,真的:跳过证书校验
*/
客户:=和http。客户端{传输:tr}
职责,犯错:=client.Get (“https://192.168.20.162:8002”)
如果犯错!=nil {
fmt.Println (err)
返回}
推迟resp.Body.Close ()
身体,犯错:=ioutil.ReadAll (resp.Body)
fmt.Println (string(身体))
}
引用>1 - 1,执行运行服务器。
1 - 2,浏览器访问https://192.168.20.162:8001如下:
1 - 3,继续点击添加例外方可继续进行访问
出现这种原因:
浏览器利用自身的CA对服务器返回的数字证书进行合法性校验时发现该数字证书是自签证书,对其该证书不信任及认定为无效证书,因而导致无法继续访问
1 - 4,执行去运行客户端。去便可正常访问服务器(因为此时客户端跳过了证书校验)
<强>二:对其服务端证书进行校验强>
1,浏览器本身内置了一些有权威的CA(如、)
2, CA证书自身也包含自己的公钥信息,及一些证书的相关信息如该证书是由哪个CA(证书授权机构)颁发的,来自签发机构的签名等
3,客户端对来自服务端证书的校验就是使用CA证书校验对来自服务端证书的签名是否是这个CA签的
3 - 1 CA校验服务端数字证书签名过程:
1,客户端利用自身CA证书中的签名算法对服务端证书内容部分(C部分)进行相对应的哈希运算得到哈希值(也就是对内容利用自身的哈希算法进行签名)
2,客户端利用得到的哈希值与服务端数字证书的证书签名进行比较
若相同则服务端证书便是由该CA颁发的否则不是该CA颁发的
4代码如下
首先准备好服务端的私钥及证书客户端的CA证书
4 - 1,使用openssl命令生成相关私钥及证书
1,生成CA私钥
openssl genrsa治疗ca.key 2048
引用>2,生成CA证书
openssl点播x509 -节点关键ca.key主题“/CN=ca_host”天5000治疗ca.crt
引用>CN=ca_host”:设置该证书由那台服务器生成(若只进行客户端对服务端证书校验此处可以随便填不影响)
去语言中怎么实现HTTPS加密协议