下载、编译、安装、使用、调试openssl最新版

说明:文中使用的openssl最新版为1.1.1

下载

mkdir -p /data/angelotong/openssl && cd /data/angelotong/openssl
wget 'https://github.com/openssl/openssl/archive/master.zip'
unzip master.zip

编译

cd openssl-master
./config --prefix=/data/angelotong/openssl -d  (1. prefix为安装路径,为了调试过程中不影响系统现有openssl,我们安装到新建目录中  2. -d参数表示加入debug调试信息,方便后面使用gdb调试)
make -j 48

安装

make install (执行这个会安装到上面./config中的--prefix指定的目录,对于代码调试,可以仅编译不安装)
echo "/data/angelotong/openssl/lib" >> /etc/ld.so.conf  (如果选择安装,还需加入动态链接库的路径)
ldconfig -v

使用

cd /data/angelotong/openssl/openssl-master/apps
./openssl version
输出:
OpenSSL 3.0.0-dev xx XXX xxxx (Library: OpenSSL 3.0.0-dev xx XXX xxxx)
time ./openssl s_client -debug -connect 14.152.86.41:443 -showcerts -prexit -servername appdlssl.dbankcdn.com -state -tls1_2>/dev/null   (参数说明可以参考[https://www.openssl.org/docs/man1.1.1/man1/openssl-s_client.html](https://www.openssl.org/docs/man1.1.1/man1/openssl-s_client.html))
输出:
SSL_connect:before SSL initialization
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS write client hello
SSL_connect:SSLv3/TLS read server hello
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global CA G2
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = CN, ST = Jiangsu, L = Nanjing, O = Huawei Software Technologies CO.Ltd, OU = Cloud5 Platform CNDR Dept, CN = appdlssl.hicloud.com
verify return:1
SSL_connect:SSLv3/TLS read server certificate
SSL_connect:SSLv3/TLS read server key exchange
SSL_connect:SSLv3/TLS read server done
SSL_connect:SSLv3/TLS write client key exchange
SSL_connect:SSLv3/TLS write change cipher spec
SSL_connect:SSLv3/TLS write finished
SSL_connect:SSLv3/TLS write finished
SSL_connect:SSLv3/TLS read server session ticket
SSL_connect:SSLv3/TLS read change cipher spec
SSL_connect:SSLv3/TLS read finished

测试使用成功

调试

调试s_client.c

image.png
cd /data/angelotong/openssl/openssl-master/apps
gdb ./openssl
进入gdb交互界面后在添加断点:
b s_client.c:2915
image.png
image.png
s_client.c代码如下:

run s_client -debug -connect 14.152.86.41:443 -showcerts -prexit -servername appdlssl.dbankcdn.com -state -tls1_2>/dev/null
执行上述run让程序运行起来,自动停到断点处:
image.png

此时还未开始进行实际的SSL握手,SSL_write(con, &(cbufcbuf_off), (unsigned int)cbuf_len); 会执行完整握手操作

单步输入:n
image.png

由于握手等待时间过长,客户端超时了,再次重试一遍:

image.png

可以看到完整的握手已经执行完成,SSL握手调用底层接口,目前无法看到实现,下一篇文章会讲解如何具体调试握手过程

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券