HTTPS 与 SSL 实验

本篇文章未整理成正式实验记录,故可能出现书写或表述不完整的情况。

本篇文章为实验记录,仅供交流学习使用,切勿违法应用,所有文中提到的工具不提供下载。

OpenSSL 编译及代码书写

有点小坑,需要使用安装版 vc6.0,且需要在生成 do_ms 后将 ntdll.mak 中 CFlags 中的 /WX 选项去掉。运行 nmake -f ms/ntdll.mak 生成的是动态库。

不需要 ipv6 库,所以在 configure 时要指定 -DOPENSSL_USE_IPV6=0

为方便使用,将 bin 的路径加入系统变量 path 中。这样可以在命令行中方便地启动 openssl

配置 OpenSSL 测试环境

  1. openssl\openssl.cnf 下设置证书缺省字段

  2. 生成客户端和服务端的证书请求文件和私钥

    openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem
  3. 执行命令,签发客户端和服务端证书。

    openssl ca -in req1.pem -out sslclientcert.pem openssl ca -in req2.pem -out sslservercert.pem
  4. 执行命令,运行 ssl 服务端和客户端

     
    openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 openssl s_client -ssl3 -CAfile demoCA/cacert.pem

OpenSSL 编程

  1. 源代码
  2. 与标准 CRC SHA 工具的运算结果比较,完全相同,说明算法正确。

HTTPS 网站抓包及过程简析

为了好截图以呈现结果,找了一个内容比较少的小站 https://www.fantasyroom.cn (也是我的小站咯~)

IP 地址为 49.235.250.44(现在已更换,所以不作打码处理咯~)

  1. 可以看到几个 TLSv1.2 标志的包
  2. 首先,客户端发送 client hello,协商密钥参数等信息
  3. 服务器端发回 server hello,这个 server hello 包含认证信息和服务端的密钥交换。这次交换用到了椭圆曲线 DH 协议。
  4. 客户端的密钥交换。握手消息此时已经处于加密状态。
  5. 双方以加密方式互相通信应用数据。需要新的 session 时,由 server 端发起 change cipher spec 请求。