freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

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安全 # 系统安全 # 数据安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 smworld 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
smworld LV.2
这家伙太懒了,还未填写个人描述!
  • 2 文章数
  • 0 关注者
Java代码审计项目--某在线教育开源系统
2023-01-28