仅使用 RSA 和 AES 构建 openssl

标签 build openssl rsa aes sha

我在一个项目中使用 libcrypto.a (OpenSSL)。默认情况下,所有算法都在 libcrypto.a 下可用。对于这个项目,我只需要 RSA、AES 和 SHA。

如何仅使用这些算法构建 libcrypto.a?

最佳答案

如果您通过运行 config 来构建 OpenSSL或 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 协议(protocol)需要它们。所以不要做 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 之外的所有东西构建了它。

关于仅使用 RSA 和 AES 构建 openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827836/

相关文章:

mobile - 将 .jsb3 项目移植到现代 sencha cmd 4.0 兼容项目

android - 使用 Crosswalk WebView 插件构建 Cordova 应用程序时出错

macos - 在 Mac(单声道)上构建 F# .fsproj

ruby-on-rails - Ruby on Rails 中的 DES3 解密

java - 我可以在 Java 中进行 RSA 加密但在 PHP 中解密吗?

r - 从 Github 安装时,包中缺少整理字段中的文件

c - 错误 : ‘AES_BLOCK_SIZE’ undeclared. 无法在 Linux 中使用 C 编译 OpenSSL

windows - 如何正确使用 SSL_read() 和 select()?

java - 如何使用keytool生成公钥证书和.jks文件?

openssl - RSA:获取给定公钥的指数和模数