2015-02-04 2 views
0

Я играю с apps/s_client.c в исходном коде openssl. Я хочу сделать несколько изменений и запустить его, но мои изменения не отражаются после сохранения файла и делают make all, или make.Как изменить код для s_client?

Например, я изменил функцию 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"); 

Я затем сохранить и сделать make all в папке apps, но когда я запускаю программу, делая это: openssl s_client abc, я не см. строку, которую я представил, this is how you use s_client, на выходе.

Куда я иду не так?

ответ

1

Вы уверены, что используете подходящее приложение? Попробуйте ./openssl.

В Linux текущий каталог по умолчанию не ищет исполняемые файлы, поэтому вы, вероятно, используете openssl системы.

2

Я хочу внести несколько изменений и запустить его, но мои изменения не отражаются после сохранения файла и создания make или make.

Его еще проще, чем когда-то вы знаете трюки.

  1. Построить библиотеку OpenSSL как обычный
  2. Установите библиотеку OpenSSL как обычный
  3. Внесите изменения в s_client.c
  4. Compile s_client.c на месте (каталог apps/):

    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.h не установлен после make 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 ....