读好书,交益友
分类: 网络与安全
2012-10-15 19:26:47
最近一直遇到openssl的问题,以前用的版本是0.9.7
发现使用最新的1.0.0.d居然不支持rc5的算法。
看了一下changlog
Change ./Configure so that certain algorithms can be disabled by default.
The new counterpiece to "no-xxx" is "enable-xxx".
The patented RC5 and MDC2 algorithms will now be disabled unless
"enable-rc5" and "enable-mdc2", respectively, are specified.
(IDEA remains enabled despite being patented. This is because IDEA
is frequently required for interoperability, and there is no license
fee for non-commercial use. As before, "no-idea" can be used to
avoid this algorithm.)
默认不支持rc5,需要重新编译
编译的时候
perl Configure enable-rc5 enable-mdc2 enable-md2 VC-WIN32
然后
ms\do_ms
最后
nmake -f ms\ntdll.mak
编译完毕后,发现openssl命令下
输入help还是没有任何rc5的算法,郁闷了好一阵子,觉得编译的不对劲,编译的速度快了不少。
原来没有删除tmp32下的obj文件。
删除tmp32的obj文件后,重新编译。
运行openssl,输入help
出现
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-256-cbc camellia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des-ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea
idea-cbc idea-cfb idea-ecb idea-ofb
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 rc5 rc5-cbc rc5-cfb
rc5-ecb rc5-ofb seed seed-cbc
seed-cfb seed-ecb seed-ofb
终于ok了。以后多看文档啊
openssl全部的编译指令
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-tl***t -DOPENSSL_NO_TL***T
no-cms -DOPENSSL_NO_CMS
no-jpake -DOPENSSL_NO_JPAKE
no-capieng -DOPENSSL_NO_CAPIENG
编译只带MD5和SHA的加密库
./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
我以前的blog
下载openssl的安装包并解压
下载地址:
下载安装ActivePerl:一路next就行了
安装openssl步骤:
cmd下输入perl configure VC-WIN32
接着输入ms\do_ms
Microsoft Visual Studio\VC98\bin目录下执行 vcvars32.bat
转到openssl目录下,输入:nmake -f ms\ntdll.mak
如果编译成功,最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib
打开VC-Tools-Options-Directores,在Include files中增加openssl\include目录,将libeay32.lib和ssleay32.lib 复制到工程当前目录中
在要编译的源程序中包含以下三个头文件并加入LIB:
#include
#include
#include
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
编译多个版本的openssl
cd 到openssl 目录
把 ms 目录下的 ntdll.mak 和 nt.mak 中 CFLAGS 中的 MD 改成 MTD(Debug版本) 或 MT(Rlease版本),如下所示
dll: CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo
dll debug: CFLAG= /MDd /ZI /Od /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo
static: CFLAG= /MT /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo
static debug: CFLAG= /MTd /ZI /Od /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo
nmake -f ms\ntdll.mak 动态库
nmake -f ms\nt.mak 静态库
nmake -f ms\ntdll.mak test 测试动态库
nmake -f ms\nt.mak test 测试静态库
nmake -f ms\ntdll.mak install 安装动态库
nmake -f ms\nt.mak install 安装静态库
nmake -f ms\ntdll.mak clean 清理
nmake -f ms\nt.mak clean 清理
附录:在VC中对C/C++ 运行时库不同版本编译指令说明
C Runtime Library:
/MD MSVCRT.LIB 多线程DLL的Release版本
/MDd MSVCRTD.LIB 多线程DLL的Debug版本
/MT LIBCMT.LIB 多线程静态链接的Release版本
/MTd LIBCMTD.LIB 多线程静态链接的Debug版本
/clr MSVCMRT.LIB 托管代码和非托管代码混合
/clr:pure MSVCURT.LIB 纯托管代码