OpenSSL 1.0.2h不接受配置参数

时间:2018-01-29 10:14:24

标签: openssl

我正在尝试从源代码编译OpenSSL 1.0.2h以满足Common Criteria定义的要求,并且我需要限制某些类的密码套件,例如ECHDE,DHE,DSA,除TLS1.2之外的所有TLS协议并使用FIPS对象模块编译OpenSSL。我做了以下事情:

root@cc3:/home/openssl#wget https://openssl.org/source/openssl-1.0.2h.tar.gz

root@cc3:/home/openssl#wget https://openssl.org/source/openssl-fips-2.0.12.tar.gz

root@cc3:/home/openssl#tar -xvf openssl-fips-2.0.12.tar.gz

root@cc3:/home/openssl#tar -xvf openssl-1.0.2h.tar.gz

root@cc3:/home/openssl#cd openssl-fips-2.0.12 && ./config -d && make && make install

root@cc3:/home/openssl#./config fips no-camellia no-camelia \
no-tls1 no-ssl2 no-ssl3 no-ecdh no-srp no-srtp no-dhe no-dh \
no-dsa no-psk no-idea no-seed no-rc4 no-deprecated no-des \
--prefix=/home/openssl/local && make depend && make && make install

然而,在执行上述操作时,我遇到了各种各样的错误。例如,如果我添加no-ecdhe标志,则一个错误要求我删除no-dh标志而另一个错误则抛出错误。

有趣的是,如果我使用的是OpenSSL 1.0.2n而不是全部,那么no-tlsno-camellia等一些参数会起作用。

任何人都可以帮我弄清楚我在这里缺少什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

...但是,在执行上述操作时,我遇到了各种各样的错误。对于   例如,一个错误要求我删除no-ecdhe标志而另一个错误   如果我添加no-dh标志,则抛出错误。

     

有趣的是,一些参数如no-tls,no-camellia都是   如果我使用OpenSSL 1.0.2n但不是全部工作。

     

任何人都可以帮我弄清楚我在这里缺少什么吗?

我认为这个难题有三个部分。第一部分是,您可以使用no-xxx来配置库。我从未见过可用的no-xxx选项列表,但答案主要在下面显示。

我只能说“大部分”,因为即使有伴随的定义,也有些事情无法被删除。例如,如果您尝试使用no-aes,即使某处有OPENSSL_NO_AES定义,事情也会以惊人的方式破坏。

作为另一个例子,一些定义是特殊情况。我相信在iPhone和Windows Mobile设备上使用OPENSSL_NO_STDIO。由于缺少标题和缺少输出设备,需要OPENSSL_NO_STDIO才能在平台上进行编译,但它不适用于一般用途。

$ grep -oIR 'OPENSSL_NO_[[:alnum:]]*' | cut -f 2 -d ':' | sort | uniq
OPENSSL_NO_AES
OPENSSL_NO_AFALGENG
OPENSSL_NO_ALGORITHMS
OPENSSL_NO_ARIA
OPENSSL_NO_ASAN
OPENSSL_NO_ASM
OPENSSL_NO_ASN1
OPENSSL_NO_ASN1T
OPENSSL_NO_ASYNC
OPENSSL_NO_AUTOALGINIT
OPENSSL_NO_AUTOERRINIT
OPENSSL_NO_BF
OPENSSL_NO_BIO
OPENSSL_NO_BLAKE2
OPENSSL_NO_BLOWFISH
OPENSSL_NO_BN
OPENSSL_NO_BUFFER
OPENSSL_NO_CAMELLIA
OPENSSL_NO_CAPIENG
OPENSSL_NO_CAST
OPENSSL_NO_CHACHA
OPENSSL_NO_CHAIN
OPENSSL_NO_CMAC
OPENSSL_NO_CMS
OPENSSL_NO_COMP
OPENSSL_NO_CONF
OPENSSL_NO_CRYPTO
OPENSSL_NO_CT
OPENSSL_NO_DECC
OPENSSL_NO_DEPRECATED
OPENSSL_NO_DES
OPENSSL_NO_DEVCRYPTOENG
OPENSSL_NO_DGRAM
OPENSSL_NO_DH
OPENSSL_NO_DSA
OPENSSL_NO_DSO
OPENSSL_NO_DTLS
OPENSSL_NO_DTLS1
OPENSSL_NO_DYNAMIC
OPENSSL_NO_E
OPENSSL_NO_EBCDIC
OPENSSL_NO_EC
OPENSSL_NO_EC2M
OPENSSL_NO_ECDH
OPENSSL_NO_ECDSA
OPENSSL_NO_EGD
OPENSSL_NO_ENGINE
OPENSSL_NO_ERR
OPENSSL_NO_EVP
OPENSSL_NO_FILENAMES
OPENSSL_NO_FIPS
OPENSSL_NO_FP
OPENSSL_NO_FUZZ
OPENSSL_NO_GOST
OPENSSL_NO_HASH
OPENSSL_NO_HEARTBEATS
OPENSSL_NO_HMAC
OPENSSL_NO_HW
OPENSSL_NO_IDEA
OPENSSL_NO_INLINE
OPENSSL_NO_KDF
OPENSSL_NO_LHASH
OPENSSL_NO_MD2
OPENSSL_NO_MD4
OPENSSL_NO_MD5
OPENSSL_NO_MDC2
OPENSSL_NO_MODES
OPENSSL_NO_MSAN
OPENSSL_NO_MULTIBLOCK
OPENSSL_NO_NEXTPROTONEG
OPENSSL_NO_OBJ
OPENSSL_NO_OBJECT
OPENSSL_NO_OBJECTS
OPENSSL_NO_OCB
OPENSSL_NO_OCSP
OPENSSL_NO_OPENSSLV
OPENSSL_NO_OSSL
OPENSSL_NO_PEM
OPENSSL_NO_PEM2
OPENSSL_NO_PKCS12
OPENSSL_NO_PKCS7
OPENSSL_NO_POLY1305
OPENSSL_NO_POSIX
OPENSSL_NO_PSK
OPENSSL_NO_RAND
OPENSSL_NO_RC2
OPENSSL_NO_RC4
OPENSSL_NO_RC5
OPENSSL_NO_RDRAND
OPENSSL_NO_RFC3779
OPENSSL_NO_RIPEMD
OPENSSL_NO_RIPEMD160
OPENSSL_NO_RMD160
OPENSSL_NO_RSA
OPENSSL_NO_SAFESTACK
OPENSSL_NO_SCRYPT
OPENSSL_NO_SCTP
OPENSSL_NO_SECURE
OPENSSL_NO_SEED
OPENSSL_NO_SETVBUF
OPENSSL_NO_SHA
OPENSSL_NO_SIPHASH
OPENSSL_NO_SM3
OPENSSL_NO_SM4
OPENSSL_NO_SOCK
OPENSSL_NO_SPEED
OPENSSL_NO_SRP
OPENSSL_NO_SRTP
OPENSSL_NO_SSL
OPENSSL_NO_SSL2
OPENSSL_NO_SSL3
OPENSSL_NO_STACK
OPENSSL_NO_STATIC
OPENSSL_NO_STDIO
OPENSSL_NO_SYMHACKS
OPENSSL_NO_TLS
OPENSSL_NO_TLS1
OPENSSL_NO_TLS13DOWNGRADE
OPENSSL_NO_TLSEXT
OPENSSL_NO_TS
OPENSSL_NO_TXT
OPENSSL_NO_UBSAN
OPENSSL_NO_UI
OPENSSL_NO_UNIT
OPENSSL_NO_WEAK
OPENSSL_NO_WHIRLPOOL
OPENSSL_NO_WHRLPOOL
OPENSSL_NO_X509
OPENSSL_NO_X509V3
OPENSSL_NO_xxx

第二个难题是,FIPS罐是一个隔离物体。您无法从中删除不需要的东西,例如Diffie-Hellman或SHA-512。您必须使用FIPS容器中的任何算法,因此不要尝试删除算法。

如果您设法从FIPS容器中删除算法,那么事情可能会以微妙的方式破坏。例如,您可能违反了构建过程,因此生成的模块未经过FIPS验证。或者,您可能会进入运行时并且FIPS_mode_set可能会返回0,因为模块的校验和错误。

第三部分是,OPENSSL_NO_*是使用Perl脚本从no-xxx动态构建的。据我所知,他们没有验证。在尝试禁用SSLv2和SSLv3(以及其他)时,这在过去引起了问题。例如,使用no-ssl2工作,但no-sslv2导致无声失败,因为它不是公认的选项。

apps/progs.pl:2538:        print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n";
apps/progs.pl:2644:        print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n";
apps/progs.pl:2764:        print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n";
apps/progs.pl:3227:        print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n";
apps/progs.pl:3346:        print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n";
apps/progs.pl:5089:        print "#ifndef OPENSSL_NO_" . uc($algo) . "\n${str}#endif\n";
apps/progs.pl:5214:        print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${st

我建造FIPS罐已经有一段时间了,我不记得程序要求了。您可能对FIPS Object Module v2.0用户指南感兴趣的确切程序。