c - 如何修改s_client的代码?

标签 c linux networking ssl openssl

我正在使用 openssl 源代码中的 apps/s_client.c。我想做一些更改并运行它,但是在我保存文件并执行 make allmake 后我的更改没有得到反射(reflect)。

例如,我将 sc_usage 函数更改为:

BIO_printf(bio_err,"This is how you use s_client\n");
BIO_printf(bio_err,"usage: s_client args\n");
BIO_printf(bio_err,"\n");
BIO_printf(bio_err," -host host     - use -connect instead\n");
BIO_printf(bio_err," -port port     - use -connect instead\n");

然后我在 apps 文件夹中保存并执行 make all,但是当我通过这样做运行程序时:openssl s_client abc ,我没有在输出中看到我介绍的行,this is how you use s_client

我哪里错了?

最佳答案

I want to make a few changes and run it, but my changes are not getting reflected after I save the file and do a make all, or a make.

一旦你知道了技巧,它甚至比这更容易。

  1. 正常配置 OpenSSL 库(配置)
  2. 正常构建 OpenSSL 库(make depend && make)
  3. 正常安装 OpenSSL 库(sudo make install)
  4. s_client.c 进行更改
  5. 就地编译s_client.c(apps/目录):

这是油脂。您必须构建一些额外的目标文件,例如 apps.oapps_rand.o,以支持 s_client.o

export OPENSSLDIR=/usr/local/ssl/darwin    
gcc -DOPENSSL_NO_PSK -DMONOLITH -I$OPENSSLDIR/include -I../ -c apps.c    
gcc -DOPENSSL_NO_PSK -DMONOLITH -I$OPENSSLDIR/include -I../ -c app_rand.c    
gcc -DOPENSSL_NO_PSK -DMONOLITH -I$OPENSSLDIR/include -I../ -c s_cb.c
gcc -DOPENSSL_NO_PSK -DMONOLITH -I$OPENSSLDIR/include -I../ -c s_socket.c

gcc -DOPENSSL_NO_PSK -I$OPENSSLDIR/include -I../ \
  app_rand.o apps.o s_cb.o s_socket.o \
  $OPENSSLDIR/lib/libssl.a $OPENSSLDIR/lib/libcrypto.a \
  s_client.c -o my_s_client.exe

OPENSSL_NO_PSK 是必需的,因为声明 (psk_key) 被注释掉了。 -I../ 是必需的,因为 e_os.hmake install 之后没有安装。如果 OpenSSL 在发布之前真正测试了他们的东西,那肯定会很好......

然后:

$ ./my_s_client.exe -connect www.google.com:443
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 ...

无需重建整个库或所有应用程序。不需要 openssl s_client ...

关于c - 如何修改s_client的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313713/

相关文章:

c - 如何让音频听起来更好? (C+FFMpeg音频生成示例)

linux - Shell 将最大尺寸的文件复制到另一个文件夹

python - 禁用 Python 中的 Plotly 以任何形式与网络通信

networking - 私网IP和公网IP的区别

c - 替代 ceil() 和 Floor() 来获取浮点值上方和下方最接近的整数值?

c - 如何处理二进制文件格式的可移植性问题

POSIX 中的条件变量

linux - 使用 shell 脚本读取具有不同序列的日志文件

php - UTF-8贯穿始终

php - 如何使用PHP获取用户信息