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 测试环境
-
在
openssl\openssl.cnf
下设置证书缺省字段 -
生成客户端和服务端的证书请求文件和私钥
openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem
-
执行命令,签发客户端和服务端证书。
openssl ca -in req1.pem -out sslclientcert.pem openssl ca -in req2.pem -out sslservercert.pem
-
执行命令,运行 ssl 服务端和客户端
openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 openssl s_client -ssl3 -CAfile demoCA/cacert.pem
OpenSSL 编程
- 源代码
- 与标准 CRC SHA 工具的运算结果比较,完全相同,说明算法正确。
HTTPS 网站抓包及过程简析
为了好截图以呈现结果,找了一个内容比较少的小站 https://www.fantasyroom.cn (也是我的小站咯~)
IP 地址为 49.235.250.44(现在已更换,所以不作打码处理咯~)
- 可以看到几个 TLSv1.2 标志的包
- 首先,客户端发送 client hello,协商密钥参数等信息
- 服务器端发回 server hello,这个 server hello 包含认证信息和服务端的密钥交换。这次交换用到了椭圆曲线 DH 协议。
- 客户端的密钥交换。握手消息此时已经处于加密状态。
- 双方以加密方式互相通信应用数据。需要新的 session 时,由 server 端发起 change cipher spec 请求。