Go&HTTPS

本文详细介绍了HTTPS的工作原理、握手步骤以及分类,并通过Go语言实现展示了客户端单向校验、双向校验的应用,解释了如何配置数字证书以确保安全通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道。HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,它运行在TCP/IP层之上,应用层之下。

HTTPS工作原理

HTTPS由两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。工作原理图如下:
https handshake

HTTPS握手详细步骤

  1. 客户端向web服务器发送HTTPS请求(通知可支持的加密算法)
  2. 服务器发送公钥和电子证书,发送是以公钥加密方式发送。电子证书是被认证中心的私钥加密。
  3. 客户端确认电子证书,确认公钥是否为刚才访问的web服务器。如果是则利用被认证中心的公钥解密。
  4. 以对称加密的方式生成密钥(使用web服务器的公钥进行加密),发送到服务器。
  5. 服务器用私钥解密,获得密钥。
  6. 根据对称加密方式的密钥,使用web服务器的公钥进行解密后发送。

HTTPS分类

  1. client端的单向检验
    比如用户在网上进行金钱等操作时,访问的网站就需要提供相应的证书,浏览器会对这些证书进行校验。
  2. server端的单向校验
    例如网银,用户必须提供可以证明自己身份的证书,操作才能继续进行。
  3. server/client的双向校验
    例如微信发红包,它是双向校验。微信平台需要校验用户的身份,用户也需要校验服务器的身份。

HTTPS具体应用

针对HTTPS应用场景的分类,下面对其进行逐一演示。

client端的单向校验
  1. 浏览器的校验
    为了保证CA证书的真实性,浏览器在出厂时都内置了知名CA的相关信息,用来校验服务端发送过来的数字证书。一般服务器证书都会包含诸如站点的名称和主机名、公钥、签发机构(CA)名称和来自签发机构的签名等。对于证书的校验,就是使用浏览器CA证书来验证服务端证书的签名是否是这个CA签发的。
    通过签名我们可以确认:服务端传来的数字证书(数字证书详解)是否是由某个特定CA签发的;其次,服务端传来的数字证书有没有被中途篡改过。一旦签名验证通过,由于我们信任这个CA,从而信任该主机。但是我们也可以自己选择,当服务器提供的证书不是由浏览器CA签发的时候,是否信任该服务器。
package main

import (
    "net/http"
    "log"
)

func handler(w http.ResponseWriter, req *http.Request) {
    w.Header().Set("Content-Type", "text/plain")
    w.Write([]byte("This is an example server\n"))
}

func main() {
    http.HandleFunc("/", handler)
    log.Printf("About to listen on 10443.Go to https://127.0.0.1:10443")
    err := http.ListenAndServeTLS(":10443", "server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值