2014-10-16 63 views
2

有没有一种更容易的方法来找出在构建openssl期间指定的选项,例如当时是否定义了OPENSSL_NO_SRTP? 我只能从:
openssl version -a
命令中闪烁有限的信息。但是,如果我只有二进制文件,是否有办法找出这些选项?此问题背后的原因是,如果未使用此选项编译openssl,则会引入一个漏洞“CVE-2014-3513”。openssl:如何找到openssl编译的配置选项

回答

1

如果OpenSLL编译OPENSSL_NO_SRTP然后ssleay32.dll不包含SRTP supprt相关的功能:SSL_CTX_set_tlsext_use_srtpSSL_get_selected_srtp_profileSSL_set_tlsext_use_srtpSSL_get_srtp_profiles。幸运的是,它们的名称都有“srtp”,因此您可以使用dumpbin来检查DLL是否包含这些函数。例如:

dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp"

对我来说,它发现了这些功能,所以我OpenSSL的编译没有OPENSSL_NO_SRTP

dumpbin.exe /EXPORTS ssleay32.dll | findstr /R /C:"srtp" 358 57 00026CD0 SSL_CTX_set_tlsext_use_srtp 357 AA 00026D00 SSL_get_selected_srtp_profile 360 B4 00026D10 SSL_get_srtp_profiles 354 E8 00026D40 SSL_set_tlsext_use_srtp

我希望帮助解决你的问题。

P.S. 不幸的是,据我所知,OpenSSL没有记录编译时间选项。

+0

谢谢。真正需要粗体的“无”。 :-) – Khanna111 2014-10-17 18:14:39

+0

没问题,我认为“nm”会更容易使用:“nm -C​​.so | grep srtp” – sirgeorge 2014-10-17 23:29:14

0

感谢@sirgeorge的回答。我忘了指定Linux作为平台,因此Linux中的等价物检查:

$ objdump -f libssl.so -x | grep -i SRTP 
    0000000000000000 l df *ABS* 0000000000000000    d1_srtp.c 
    00000000002609e0 l  O .data 0000000000000030    srtp_known_profiles 
    000000000003d100 g  F .text 0000000000000012    SSL_set_tlsext_use_srtp 
    000000000003cb40 g  F .text 0000000000000149    ssl_parse_serverhello_use_srtp_ext 
    000000000003d120 g  F .text 0000000000000012    SSL_CTX_set_tlsext_use_srtp 
    000000000003ca90 g  F .text 00000000000000ab    ssl_add_serverhello_use_srtp_ext 
    000000000003ca50 g  F .text 0000000000000029    SSL_get_srtp_profiles 
    000000000003ca80 g  F .text 0000000000000008    SSL_get_selected_srtp_profile 
    000000000003cc90 g  F .text 0000000000000128    ssl_add_clienthello_use_srtp_ext 
    000000000003cdc0 g  F .text 0000000000000210    ssl_parse_clienthello_use_srtp_ext 
2

可以约通过version command安装openssl的配置信息得到大部分(全部?)。特别是,

openssl version -f 

将列出在构建时指定的所有编译器标志。