OpenSSL是使用非常广泛的 SSL 的开源实现。由于其中实现了为SSL 所用的各种加密算法,因此OpenSSL也是被广泛使用的加密函数库。SSL/TLS 协议位于 TCP 协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。SSL作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC 算法等密码算法实现安全服务。在Linux环境中,除可以使用OpenSSL提供的各种加密函数库外,还能利用其应用程序实现许多重要的功能。以下内容翻译自:OpenSSL Command-Line HOWTO
一、系统环境
以红旗DC Server 5.0 for x86 SP2环境为例,自带版本为:
openssl-0.9.7a-43.14
openssl-perl-0.9.7a-43.14
openssl-devel-0.9.7a-43.14
openssl096b-0.9.6b-22.46
二、介绍
1、如何知道我的OpenSSL运行版本
OpenSSL 0.9.7a Feb 19 2003
-a参数可以获得更详细的信息:
OpenSSL 0.9.7a Feb 19 2003
built on: Tue Oct 31 02:10:29 EST 2006
platform: linux-elf
options: bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) blowfish(idx)
compiler: gcc -fPIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -DOPENSSL_NO_ASM -DOPENSSL_NO_IDEA -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_EC -I/usr/kerberos/include -DL_ENDIAN -DTERMIO -Wall -O2 -g -march=i386 -mcpu=i686 -Wa,–noexecstack
OPENSSLDIR: "/usr/share/ssl"
engines: dynamic cswift chil atalla nuron ubsec aep ibmca sureware 4758cca
2、获取可用的命令列表
OpenSSL提供三个内置的选项命令组,而通过提供一个错误的参数,可以获得其帮助信息。(例如help、或-h)
openssl:Error: '-h' is an invalid command.
Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
enc engine errstr gendh gendsa
genrsa nseq ocsp passwd pkcs12
pkcs7 pkcs8 rand req rsa
rsautl s_client s_server s_time sess_id
smime speed spkac verify version
x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160 sha
sha1
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 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 rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40
也可以获取某个命令组可用的参数:
unknown option '-h'
options are
-c to output the digest with separating colons
-d to output debug info
-hex output as hex dump
-binary output in binary form
-sign file sign digest using private key in file
-verify file verify a signature using public key in file
-prverify file verify a signature using private key in file
-keyform arg key file format (PEM or ENGINE)
-signature file signature to verify
-binary output in binary form
-engine e use engine e, possibly a hardware device.
-md5 to use the md5 message digest algorithm (default)
-md4 to use the md4 message digest algorithm
-md2 to use the md2 message digest algorithm
-sha1 to use the sha1 message digest algorithm
-sha to use the sha message digest algorithm
-mdc2 to use the mdc2 message digest algorithm
-ripemd160 to use the ripemd160 message digest algorithm
3、如何获取可用的密码(ciphers)列表
openssl ciphers -v
# 仅显示TLSv1版本的密码
openssl ciphers -v -tls1
# 仅显示密钥大于128bit的高强度密码方式
openssl ciphers -v 'HIGH'
# 仅显示使用AES运算法则的高强度密码方式
openssl ciphers -v 'AES+HIGH'
三、性能测试
OpenSSL提供内置的性能测试组件,其通过speed选项,可以测试在一段时间内可以执行的操作数量,而不是测试固定数量操作的时间,这能确保即使是慢的系统,也不会花费过长的时间。
1、如何进行性能测试
openssl speed
# 仅进行rsa的速度测试
openssl speed rsa
# 在一个SMP系统中,进行2路的rsa速度测试
openssl speed rsa -multi 2
2、如何测试远程连接的性能
使用s_time运行你测试远程连接的性能(30sec):
除了简单的测试外,s_time也允许进行指定的测试项目:
openssl s_time -connect remote.host:443 -www /test.html -new
# 类似的,仅使用SSL v3版本和高强度的加密
openssl s_time \
-connect remote.host:443 -www /test.html -new \
-ssl3 -cipher HIGH
# 对比多个加密规则在10秒内连接的性能情况
IFS=":"
for c in $(openssl ciphers -ssl3 RSA); do
echo $c
openssl s_time -connect remote.host:443 \
-www / -new -time 10 -cipher $c 2>&1 | \
grep bytes
echo
done
如果你并没有SSL支持的Web服务器可以使用,你可以用s_server选项模拟:
openssl s_server -cert mycert.pem -www
# 主机二,通过s_time连接到指定的4433端口进行测试
openssl s_time -connect myhost:4433 -www / -new -ssl3
proftp+md5的认证及源码编译问题
Proftpd+Clamav+Mysql+MD5+Quota混合配置
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/112496.html