openssl是一个开放源代码的SSL协议的产品实现,采用C语言作为开发语言,具备了跨系统的性能。 Openssl最早版本在1995年发布的,1998年后开始由openssl项目组维护和开发。openssl的源代码库可以从官网链接: https://www.openssl.org/.支持Linux、Windows、MAC和VWS等多种平台。目前,openssl已经获得广泛运用,例如VOIP的openH323协议、Apache服务器、Linux安全模块等。
Openssl实际上包含三部分:SSL协议库、密码算法库、应用程序。 SSL协议库部分完全实现了SSL协议的三个版本和TLS协议,SSL协议库的实现是由密码算法库的基础上实现的。使用该库,可以完整的建立一个SSL服务器和SSL客户端。该部分在Linux下编译会形成一个明文libssl.a的库,在Windows下则是名为ssleay32.lib的库。
openssl密码算法库是一个强大完整的密码算法库,主要包括公开密钥算法、对称加密算法、散列函数算法、X.509数字证书标准、PKCS12、PKCS7等标准。该部分在Linux下编译会形成一个明文libcrypto.a的库,在Windows下则是名为libeay32.lib的库。
应用程序部分是Openssl最生动的部分,也是openssl使用入门的部分。该部分基于上述的密码算法库和SSL协议实现很多实用和范例性的应用程序,主要包括各种算法的加密程序和各种密钥的产生程序(例如rsa、md5、enc等)、证书签发和验证程序(ca、x509,crl等)、SSL连接测试程序,以及其他的标准程序等。
与其他的一些同类型的密码算法库相比,openssl有以下优点
采用C语言开发,支持多种操作系统,可移植性好;功能全面,支持大部分主流密码算法、相关标准协议和SSL协议;开放源代码,可信任,能根据自己需要进行修改,对技术人员有借鉴和研究的价值;具备应用程序,既能直接使用,也可方便地进行二次开发;免费,也可用作非商业用途。有以下缺点:
采用非面向对象的C语言开发,对于初学者来说有一定的困难,也不利于代码的剥离;文档不全面、增加使用的困难性。 总的来说,openssl是一个非常优秀的软件包,很值得密码安全技术人员的研究和使用。介绍其主要功能:
对称加密算法:openssl提供八种加密算法,其中7种是分组密码加密,AES(128bit)、DES、blowfish、CAST、IDEA、RC2、RC4、,仅有的一个是流密码算法RC4,非对称加密算法:DH(密钥交换)、RSA(密钥交换、数字签名、加密(速度慢))、DSA(数字签名)、EC信息摘要算法:MD2、MD5、MDC2、SHA(SHA1)和RIPEMD密钥和证书管理SSL和TLS协议应用程序:也就是openssl的指令,供测试或者其他目的的使用以下介绍openssl的指令:
asn1parse:对于ASN.1编码的文件或字符串进行解析,比如对证书文件,可以使用该指令对其进行解释,它会将其中每一个数据对象打印处理ca:证书签发和管理,模拟一个小型ca的功能,并跟openssl数据连接起来作为证书数据库。该指令具有签发、验证和吊销等功能ciphers:该指令可以列出不同协议支持的算法体系crl:证书签发和管理,该指令可以针对吊销证书列表(CRL)文件进行文本解析和验证crl2pkcs7:格式转换,该指令可以将CRL和多个证书封装成一个PKCS#7格式的证书文件dgst:信息摘要和签名dh:非对称密钥,生成和处理DH密钥参数文件,dhparam已经集成了该指令的功能,一般不使用该指令了dhparam:用于生成DH密钥参数文件、解析DH密钥参数文件以及格式转换等。在新版中,该指令集成了dh和gendh指令的功能dsa:该指令用于对DSA密钥的格式转换一信息输出处理,,并且可以对DSA密钥进行加密dsaparam:该指令用于生成和处理DSA参数文件,并且可以用于生成DSA密钥enc:对称密钥,该指令可以使用openssl支持的各种对称加密算法对给定的数据或者文件进行加密或者解密engine:该指令显示openssl支持的engine接口列表,并且可以测试openssl猪脆骨的engine接口是否有效errstr:根据给定错误代码提示错误信息gendh:非对称密钥,生成DH密钥,该功能已集成到dhparam指令中gendsa:非对称密钥,根据dsa参数文件生成一个DSA私钥,可以采用不同的算法对DSA私钥加密保护genrsa:用于生成RSA私钥,可以同时对rsa私钥进行加密保护nseq:格式转换,可以将普通X.509证书转换成Netscape格式的证书,也可以转换过来ocsp:是一个实现了在线证书状态协议(OCSP)的指令工具,可以对证书的有效性进行验证等OCSP任务操作passwd:根据给定的口令通过hash算法生成密钥pkcs12:格式转换,该指令可以将X.509证书和PEM编码的私钥封装成pkcs#12格式的证书,也可以转换回来pkcs7:格式转换,该指令可以将PKCS#7格式的文件转换成普通的X.509格式的证书或者CRLpkcs8:格式转换,该指令可以将私钥加密转换成PKCS#8格式或者将其转换成普通的PEM或DER编码私钥rand:该指令可以产生一系列伪随机比特,并保存在文件中req:证书的签发和管理,该指令生成证书标准的请求文件,并且可以生成自签名的根证书rsa:该指令对RSA密钥进行格式转换和文本解析输出等处理,格式转换的时候可以对密钥进行加密rsautl:非对称密钥,该指令采用rsa算法对输入数据进行签名、验证、加密和解密等操作s_client:SSL测试,模拟成一个客户端s_server:模拟一个服务器,可以对支持SSL的服务器进行调试和测试s_time:该指令可以用来测试建立一个SSL链接的时间sess_id:该指令可以处理经编码保存下来的SSLSession结构并可以根据选项打印出其中信息smime:该指令可以用来对S/MIME邮件进行加密、解密、签名和验证等操作speed:该指令测试算法的速度,如果有硬件加密设备,也可以测试硬件设备的加密速度spkac:该指令用于处理Netscape的签名公钥个挑战文件(SPKAC),可以验证SPKAC的签名,可以打印信息,也可用来生成SPKAC文件verify:证书签发和管理,该指令用来验证证书或者证书链的合法性version:该指令用来输出openssl的版本信息x509,:证书签发和管理,该指令用来显示证书内容以及签发新的证书持续更新更新中~