iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Go语言中怎么实现HTTPS加密协议
  • 674
分享到

Go语言中怎么实现HTTPS加密协议

2023-06-04 17:06:11 674人浏览 泡泡鱼
摘要

Go语言中怎么实现https加密协议,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Go语言Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况

Go语言中怎么实现https加密协议,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Go语言

Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或c++代码的速度,而且更加安全、支持并行进程。

HTTPS

HttpS是在HTTP下加入SSL(Secure Sockets Layer 安全套接层)层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

SSL,及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

客户端CA对其服务端证书进行校验过程如下:

一:对其证书不进行校验

1,简易的https WEB 服务器

server.go:

package main

import (

“fmt”

“net/http”

)

func handler(w http.ResponseWriter, r *http.Request) {

fmt.Println(“Hi, This is an example of https service in golang!”)

}

func main() {

http.HandleFunc(“/”, handler) //设置路由及相对应的处理函数 且实现了ServerHTTP方法

http.ListenAndServeTLS(“192.168.20.162:8001”, “server.crt”,

“server.key”, nil) //server.crt:服务端证书 包含服务端公钥信息 server.key:服务端私钥

}

client.go:

package main

import (

    “crypto/tls”

    “fmt”

    “io/ioutil”

    “net/http”

)

func main() {

    tr := &http.Transport{

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

    }

    

client := &http.Client{Transport: tr}

resp, err := client.Get(“https://192.168.20.162:8002”)

if err != nil {

fmt.Println(err)

return

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

fmt.Println(string(body))

}

1-1,执行 go run server.go

1-2,浏览器访问 https://192.168.20.162:8001 如下:

1-3,继续点击 添加例外方可继续进行访问

出现这种原因:

浏览器利用自身的CA对服务器返回的 数字证书进行合法性校验时发现 该数字证书是自签证书,对其该证书不信任及认定为无效证书,因而导致无法继续访问

1-4, 执行 go run client.go 便可正常访问服务器(因为此时客户端跳过了证书校验)

二:对其服务端证书进行校验

1,浏览器本身内置了一些有权威的CA(如Symantec、Globalsign、GDCA)

2,CA证书自身也包含自己的公钥信息,及一些证书的相关信息如该证书是由哪个CA(证书授权机构)颁发的,来自签发机构的签名等

3,客户端对来自服务端证书的校验就是使用CA证书 校验对来自服务端证书的签名是否是 这个CA签的

3-1 CA校验服务端数字证书签名过程:

1,客户端利用自身CA证书中的签名算法对 服务端证书内容部分(C部分)进行相对应的哈希运算得到哈希值(也就是对内容利用自身的哈希算法进行签名)

2,客户端利用得到的哈希值与服务端数字证书的证书签名 进行比较

若相同则服务端证书 便是由该CA颁发的 否则不是该CA颁发的

4,代码如下

首先准备好服务端的私钥及证书 客户端的CA证书

4-1,使用openssl命令生成相关私钥及证书

1,生成 CA 私钥

openssl genrsa -out ca.key 2048

2,生成CA证书

openssl req -x509 -new -nodes -key ca.key -subj “/CN=ca_host” -days 5000 -out ca.crt

CN=ca_host”:设置该证书 由那台服务器生成(若只进行客户端对服务端证书校验 此处可以随便填 不影响)

3,生成服务端私钥

openssl genrsa -out server.key 2048

4,生成服务端证书认证请求

openssl req -new -key server.key -subj “/CN=GC_host” -out server.csr

CN=gc_host:此处必须按真实填写 服务端在哪台服务器设备起着就必须填写哪台设备的主机名

不同的客户端设备在调用时 需在自身设备 /etc/hosts 配置服务器设备ip及主机名

因为客户端在请求url中只识别服务端证书的 CN

证书认证请求并不是证书,需要CA的私钥进行签名之后方是证书

5,生成服务端证书

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

server.go:

package main

import (

“fmt”

“net/http”

)

func handler(w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w,

“Hi, This is an example of http service in golang!”)

}

func main() {

http.HandleFunc(“/”, handler)

http.ListenAndServeTLS(“192.168.20.162:8003”,

“server.crt”, “server.key”, nil)

}

client.go:

package main

import (

“crypto/tls”

“crypto/x509”

“fmt”

“io/ioutil”

“net/http”

)

func main() {

pool := x509.NewCertPool()

caCertPath := “ca.crt”

caCrt, err := ioutil.ReadFile(caCertPath)

if err != nil {

fmt.Println(“ReadFile err:”, err)

return

}

pool.AppendCertsFromPEM(caCrt) //客户端添加ca证书

tr := &http.Transport{

TLSClientConfig: &tls.Config{RootCAs: pool}, //客户端加载ca证书

DisableCompression: true,

}

client := &http.Client{Transport: tr}

resp, err := client.Get(“https://gc_host:8003/”)

if err != nil {

fmt.Println(“Get error:”, err)

return

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

fmt.Println(string(body))

}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Go语言中怎么实现HTTPS加密协议

本文链接: https://www.lsjlt.com/news/238903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中怎么实现HTTPS加密协议
    Go语言中怎么实现HTTPS加密协议,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Go语言Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况...
    99+
    2023-06-04
  • Go语言中怎么使用HTTPS协议进行请求
    这篇文章主要介绍“Go语言中怎么使用HTTPS协议进行请求”,在日常操作中,相信很多人在Go语言中怎么使用HTTPS协议进行请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中怎么使用HTTPS协议进...
    99+
    2023-07-06
  • go语言实现mqtt协议的实践
    目录一、什么是MQTT二、Go语言MQTT服务器Broker的搭建三、Go客户端访问简单API一、什么是MQTT MQTT(Message Queuing Telemetry Tra...
    99+
    2024-04-02
  • 如何在Go语言中使用HTTPS协议进行请求
    随着网络安全意识的提高,越来越多的网站开始使用HTTPS协议进行数据传输保护。为了能够更好地与这些网站进行交互,我们需要学习如何在Go语言中使用HTTPS协议进行请求。一、简介HTTPS是HTTP协议加密版,用于保护传输数据的安全。HTTP...
    99+
    2023-05-14
  • Go 语言中怎么实现凯撒加密
    今天就跟大家聊聊有关 Go 语言中怎么实现凯撒加密,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码清单 9-6 处理单个字符: caesar.go...
    99+
    2024-04-02
  • Go语言怎么实现RSA加密解密
    这篇文章将为大家详细讲解有关Go语言怎么实现RSA加密解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go是什么golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-14
  • 深入理解Go语言中的TCPF协议实现
    抱歉,我无法为您提供具体的代码示例。但是我可以为您提供一个关于深入理解Go语言中TCP协议实现的文章草稿,请您查看: 随着互联网的快速发展,网络通信协议在软件开发中扮演着至关重要的角...
    99+
    2024-04-02
  • Go语言实现UDP协议及TCP通讯
    ⼀、使用Golang创建⼀一个TCP连接 1.服务端处理理流程 a.监听端口b.接受客户端的链接c.创建Goroutine,处理这个链接(⼀个服务端要链接多个客户端,所以使用Goro...
    99+
    2024-04-02
  • SpringBoot中支持Https协议的实现
    目录一、https 简介二、获取 https 证书三、在 SpringBoot 中引入 https四、请求转发一、https 简介 超文本传输安全协议(HyperText Trans...
    99+
    2023-01-28
    SpringBoot支持Https协议 SpringBoot Https协议
  • Nodejs中怎么开启https协议
    这期内容当中小编将会给大家带来有关Nodejs中怎么开启https协议,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。接着写nodejs全栈开发的一些记录。本系列选取的技术栈:nginx+nodejs+ex...
    99+
    2023-06-19
  • go语言中的udp协议及TCP通讯实现示例
    目录udp协议server端client端TCP通讯(基本)服务端客户端TCP通讯并发服务器服务端客户端udp协议 server端 package main import ( "f...
    99+
    2024-04-02
  • 怎么通过Go语言实现凯撒加密
    小编给大家分享一下怎么通过Go语言实现凯撒加密,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在 2 世纪, 发送机密消息的一个有效方法就是对每个字母进行位移, 使...
    99+
    2023-06-27
  • Go语言 如何实现RSA加密解密
    RSA是一种非对称加密算法,它的名字是由它的三位开发者,即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母组成的(Rivest-Shamir-Ad...
    99+
    2024-04-02
  • 使用Go语言实现TCPF协议的关键步骤
    对不起,我无法提供代码示例。但我可以帮您简要介绍使用 Go 语言实现 TCP 协议的关键步骤,您可以根据介绍来撰写自己的代码。您是否需要这样的帮助呢?以上就是使用Go语言实现TCPF协...
    99+
    2024-04-02
  • go语言中的udp协议及TCP通讯怎么配置
    这篇“go语言中的udp协议及TCP通讯怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中的udp协议及TCP...
    99+
    2023-06-30
  • Go语言如何实现Sm2加解密
    这篇文章主要讲解了“Go语言如何实现Sm2加解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言如何实现Sm2加解密”吧!在 Go 语言中,可以使用 github.com/tjfoc/...
    99+
    2023-07-05
  • go语言指的是什么开源协议
    小编给大家分享一下go语言指的是什么开源协议,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go语言采用BSD开源协议。BSD开源协议是一个给于使用者很大自由的协议...
    99+
    2023-06-15
  • Go语言开源库怎么实现Onvif协议客户端设备搜索
    这篇文章主要讲解了“Go语言开源库怎么实现Onvif协议客户端设备搜索”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言开源库怎么实现Onvif协议客户端设备搜索”吧!1、前言之前我们已...
    99+
    2023-06-30
  • GO语言怎么实现协程池管理
    本篇内容介绍了“GO语言怎么实现协程池管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用channel实现协程池通过 Channel 实...
    99+
    2023-06-20
  • C语言怎么实现MD5加密
    这篇文章主要介绍“C语言怎么实现MD5加密”,在日常操作中,相信很多人在C语言怎么实现MD5加密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现MD5加密”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作