Golang之双向认证

栏目: 服务器 · 发布时间: 6年前

内容简介:此篇文章主要介绍https用Golang生成证书和Golang实现https认证的过程,至于ssl/tls相关的知识点,我在文章末尾会附上我个人觉得对读者有用的文章。客户点包含ca.crt,服务端包含server.key和server.crt;客户端:客户端生成一个随机数random-client,传到服务器端;

此篇文章主要介绍https用Golang生成证书和Golang实现https认证的过程,至于ssl/tls相关的知识点,我在文章末尾会附上我个人觉得对读者有用的文章。

单向验证过程:

客户点包含ca.crt,服务端包含server.key和server.crt;

客户端:客户端生成一个随机数random-client,传到服务器端;

服务端:服务器端接收消息之后,生成一个随机数random-server和包含公钥的证书,一起回馈给客户端;

客户端:客户端收到的东西原封不动,加上premaster secret(通过random-client、random-server 经过一定算法生成的数据),再一次送给服务器端,这次传过去的东西是经过服务端的公钥进行加密后数据;

服务端:服务端经过私钥(server.key),进行解密,获取 premaster secret(协商密钥过程);

此时客户端和服务器端都拥有了三个要素:random-client、random-server和premaster secret,安全通道已经建立,以后的交流都会校检上面的三个要素通过算法算出的session key;而双向认证过程相当于客户端和服务端反过来再执行认证、加解密、协商一遍。

证书生成方式:

1. openssl工具生成:

第一步,生成ca密钥和ca证书

openssl genrsa -out ca.key 2048
# 添加 -subj 是为了省去创建请求之后的交互
openssl req -new nodes -key ca.key -subj "//CN=nzh.com" -days 5000 -out ca.crt

第二步,生成server密钥和证书

openssl genrsa -out server.key 2048
# //CN必须添加,服务端的域名,或者hosts文件中ip的别名,等同于localhost
openssl req -new -key server.key -subj "//CN=server" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000

第三步,生成client密钥和证书

openssl genrsa -out client.key 2048
openssl req -new -key server.key -subj "//CN=client" -out client.csr
echo extendedkeyUsage=clientAuth > ./extfile.cnf
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile ./extfile.cnf -out client.crt -days 5000

2. Golang代码生成:

第一步,生成证书之前,先构造出证书结构体,并初始化相应的参数;

Golang之双向认证

构造证书请求结构体

第二步,进行证书签名,如果不是CA证书,则加载待签名的证书;

Golang之双向认证

加载待签名证书

第三步,进行证书签名,图中46行和49行主要区别生成CA自签名证书还是生成CA证书签名;

Golang之双向认证

证书签名过程

最后生成证书目录结构如下:

Golang之双向认证

证书目录结构

Golang代码实现双向认证过程:

服务器端:

双向认证过程中,只要结构体实现了ServeHTTP结构就相当于实现一个handler;

加载服务端的公钥和私钥用于解密客户端发送过来的随机字符;

加载CA证书是为了验证客户端的证书是否合格;

Golang之双向认证

服务端代码

客户端:

客户端公钥,私钥和CA证书处理等同于服务端证书处理,然后发送请求,打印返回值;

Golang之双向认证

客户端代码

后续会继续补充curl命令以及整个实现源码。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mission Python

Mission Python

Sean McManus / No Starch Press / 2018-9-18 / GBP 24.99

Launch into coding with Mission Python, a space-themed guide to building a complete computer game in Python. You'll learn programming fundamentals like loops, strings, and lists as you build Escape!, ......一起来看看 《Mission Python》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具