freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

HTTPS协议与证书单、双向认证
2023-02-08 19:38:36
所属地 海外

https基础知识

HTTPS 协议是由HTTP 加上TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

SSL v1.0 、V2.0、V3.0是较早期使用的,TLS是现在使用的,是由SSL发展而来的。由于协议版本漏洞的原因,现在主要是使用TLS v1.1、TLS v1.2版本进行加密。TLS v1.3由于改动比较大,使用的还教少。

image

HTTPS协议握手

开启wireshark进行抓包后,命令行执行 curl https://www.baidu.com(使用curl可以避免产生多余的数据包,也可使用浏览器访问,但是会加载许多资源)。

  • 第一步:TCP三次握手。

image

  • 第二步:客户端发送Client Hello。

image

  • 第三步:服务端发送 Server Hello。

image

  • 第三步:服务端发送证书 Certificate、Server Key Exchange、Server Hello Done。
    image
  • 第四步:客户端发送 Client Key Exchage、Change Cipher Spec、Encrypted Handshake Message。
    image
  • 第五步: 服务端发送 New Session Ticket、Change Cipher Spec、Encrypted Handshake Message。

image

  • 第六步:完成秘钥协商,开始发送数据。
    image
  • 第七步:完成数据发送,4次TCP挥手。(此处的 Encrypted Alert / ACK 为SSL/TLS的挥手)

image

使用openssl s_client -connect IP:port命令可查看连接网站的证书详情。

image

image

证书生成

  • 第一步:生成ca证书ca_cert.crt 。
openssl req -newkey rsa:2048 -nodes -keyout ca_key.key -x509 -days 365 -out ca_cert.crt -subj "/C=CN/ST=GD/L=SZ/O=test/OU=dev/CN=ca.com/emailAddress=ca@ca.com"

-newkey rsa:2048 -nodes -keyout:表示生成不加密的私钥;
CN值为域名。

  • 第二步:生成服务端私钥server_key.key和证书server.crt。
//生成私钥。
openssl genrsa -out server_key.key 2048

//生成请求文件。
openssl req -new -key server_key.key -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=test/OU=dev/CN=server.com/emailAddress=server@server.com"

//生成证书文件。
openssl x509 -req -days 3650 -in server.csr -CA ca_cert.crt -CAkey ca_key.key -CAcreateserial -out server.crt
  • 第三步:生成客户端私钥client_key.key和证书client.crt。
//生成私钥。
openssl genrsa -out client_key.key 2048

//生成请求文件。
openssl req -new -key client_key.key -out client.csr -subj "/C=CN/ST=GD/L=SZ/O=test/OU=dev/CN=client.com/emailAddress=client@client.com"

//生成证书文件。
openssl x509 -req -days 3650 -in client.csr -CA ca_cert.crt -CAkey ca_key.key -CAcreateserial -out client.crt

单向证书认证

此处使用phpstudy中的nginx进行证书配置。打开nginx目录下的nginx.conf配置。

image

然后本地点击ca_cert.crt证书进行本地安装即可。

image)

本地使用HTTPS协议访问成功。

image

双向证书认证

nginx开启双向认证配置。

image

此时浏览器访问出现400,显示未发送证书。此时需要携带客户端证书。

需要把client.crt与client_key.key转化为.p12格式的证书再导入浏览器中。

//此处需要输入密码对证书进行加密,后续导入浏览器中需要使用此密码
openssl pkcs12 -export -in client.crt -inkey client_key.key -out client.p12

将client.p12证书导入浏览器中即可。

image

此时重新访问时选择导入的证书访问即可成功。

image

也可使用curl命令进行访问。

//此处的server.com为证书生成时服务端的CN域名值。
//需要本地配置C:\Windows\System32\drivers\etc\hosts文件。

curl --cert client.crt --key client_key.key --cacert ca_cert.crt https://server.com

image

# 网络安全 # web安全 # 系统安全 # 数据安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者