我正在一个项目中使用 libcrypto.a (OpenSSL)。默认情况下,所有算法都在 libcrypto.a 下可用。对于该项目,我只需要 RSA、AES 和 SHA。
如何仅使用这些算法构建 libcrypto.a?
如果您通过运行以下命令构建 OpenSSLconfig
or Configure
脚本,您提供no-<cipher>
作为排除密码的参数。跑步Configure
没有选项来查看可用的构建选项。
配置脚本将这些参数转换为预处理器的选项。以下是您可以在编译时禁用的几乎所有内容的列表。首先是配置脚本参数,然后是它转换为的编译器参数。
Ciphers:
no-idea -DOPENSSL_NO_IDEA
no-aes -DOPENSSL_NO_AES
no-camellia -DOPENSSL_NO_CAMELLIA
no-seed -DOPENSSL_NO_SEED
no-bf -DOPENSSL_NO_BF
no-cast -DOPENSSL_NO_CAST
no-des -DOPENSSL_NO_DES
no-rc2 -DOPENSSL_NO_RC2
no-rc4 -DOPENSSL_NO_RC4
no-rc5 -DOPENSSL_NO_RC5
no-md2 -DOPENSSL_NO_MD2
no-md4 -DOPENSSL_NO_MD4
no-md5 -DOPENSSL_NO_MD5
no-sha -DOPENSSL_NO_SHA
no-ripemd -DOPENSSL_NO_RIPEMD
no-mdc2 -DOPENSSL_NO_MDC2
no-rsa -DOPENSSL_NO_RSA
no-dsa -DOPENSSL_NO_DSA
no-dh -DOPENSSL_NO_DH
no-ec -DOPENSSL_NO_EC
no-ecdsa -DOPENSSL_NO_ECDSA
no-ecdh -DOPENSSL_NO_ECDH
Non-cipher functionality:
no-sock -DOPENSSL_NO_SOCK No socket code.
no-ssl2 -DOPENSSL_NO_SSL2 No SSLv2.
no-ssl3 -DOPENSSL_NO_SSL3 No SSLv3.
no-err -DOPENSSL_NO_ERR No error strings.
no-krb5 -DOPENSSL_NO_KRB5 No Kerberos v5.
no-engine -DOPENSSL_NO_ENGINE No dynamic engines.
no-hw -DOPENSSL_NO_HW No support for external hardware.
Not documented:
no-tlsext -DOPENSSL_NO_TLSEXT
no-cms -DOPENSSL_NO_CMS
no-jpake -DOPENSSL_NO_JPAKE
no-capieng -DOPENSSL_NO_CAPIENG
请注意,有些事情是有依赖性的。例如,如果没有密码和摘要算法,您就无法构建 SSL 库,因为 SSL 和 TLS 协议需要它们。所以而不是做make all
,你想做make build_crypto
这样它只构建 libcrypto.a。
通过实验,我发现(在 OpenSSL 0.9.8r 中)libcrypto 有 2 个算法依赖项:用于随机数生成器算法的 MD5(在 crypto/rand_lib.c 中)和用于打印证书哈希值的 SHA-1(在 crypto/asn1/t_x509 中) 。C)。我想说这些依赖关系是开发人员的疏忽。
这就是我仅使用 MD5 和 SHA 构建 libcrypto.a 的方法:
./config no-idea no-aes no-camellia no-seed no-bf no-cast no-des no-rc2 no-rc4 no-rc5 \
no-md2 no-md4 no-ripemd no-mdc2 no-rsa no-dsa no-dh no-ec no-ecdsa no-ecdh no-sock \
no-ssl2 no-ssl3 no-err no-krb5 no-engine no-hw
make depend
make build_crypto
我还按照问题的要求,使用除 AES、RSA、SHA 和 MD5 之外的所有内容成功构建了它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)