当前位置: 主页 > 服务器技术 > 安全防护 > OpenSSL应用简介

OpenSSL应用简介

时间:2010-4-13来源:互联网 点击:

1、OpenSSL总体结构

    * OpenSSL真正的精华所在是那些目录,也就是源程序了。并非所有这些子目录都是很重要的,如:
          o MacOS、ms、os2以及VMS这几个目录,包含了在不同的平台编译时候的环境变量配置文件,在安装编译完成之后,这几个目录就没有作用了。
          o Bugs、certs、perl、shlib、times、tools以及utils目录都是一些辅助的目录,里面包含的文件对于使用OpenSSL进行工作并没有很多的帮助,所以可以不作深究。
                + 这些目录中的文件在编译的时候起的作用可能是不可或缺的。

2、OpenSSL部分目录的功能说明

存放了OpenSSL自身功能测试程序的源码文件                 

Test 存放了使用OpenSSL的库时需要的头文件。

Include 存放了一些基于OpenSSL的应用程序例子,这些例子一般都很简单,演示怎么使用OpenSSL其中的一个功能。

Demos 存放了OpenSSL中所有的使用说明文档,包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL协议API说明文档。

Doc 存放OpenSSL中所有应用程序源码文件,如CA、X509等应用程序的源文件就存放在这里。也是研究OpenSSL的API很好的例子

pps 存放OpenSSL中SSL协议各个版本和TLS 1.0协议源码文件,包含了OpenSSL协议库的所有内容。

SSL 存放OpenSSL所有加密算法源码文件和相关标注如X.509源码文件,是OpenSSL中最重要的目录,包含了OpenSSL密码算法库的所有内容。

Crypto 目录名

功能描述

    * 若在Windows平台下将OpenSSL编译成功后,会增加三个新的目录:inc32、out32dll、tmp32dll。
          o Inc32目录根Include目录相似,存放的是Windows平台下使用OpenSSL进行编程需要包含的头文件。
          o Out32dll则存放了OpenSSL编译成功后的可执行应用程序、链接库LIB文件和动态DLL文件。
          o Tmp32dll则是在编译过程中存放OBJ等临时文件的目录

3、OpenSSL算法目录 Crypto

    * OpenSSL的密码算法库包含了OpenSSL中所有密码算法、密钥管理和证书管理相关标准的实现,在Windows下编程后的库文件名为 libeay32.lib,在Linux下编译后生产的库文件名为libcrypto.a。Crypto目录下包含了众多的子目录,这些目录大多数以相关的算法或标准名称的简写命名
          o 对OpenSSL提供的密码算法大概总结一下:
                + 对称加密算法8种
                + 非对称加密算法4种
                + 信息摘要算法5种

4、OpenSSL文档目录Doc

    * 由于非商业软件开发的共同缺点,OpenSSL提供的文档并不全面,甚至可以说是非常有限,而且不能及时跟着版本更新。但是对于初学者来说,这些文档能解决不少问题 。
    * OpenSSL的文档使用Perl文档格式保存,为.pod文件 。
          o 使用Perl工具pod2text或者pod2html命令将文档转换成txt文本格式或者html格式以方便阅读。
    * OpenSSL的文档主要分为三部分:
          o 应用程序说明文档、密码算法库API文档以及SSL

7.3 OpenSSL的使用


7.3.1 Openssl的功能

    * 利用enc命令来进行对称加密/解密
          o enc命令格式:

        openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-k password] [-kfile filename] [-K key] [-iv IV] [-p] [-P] [-bufsize number] [-debug]

                      # 说明:对称加密算法工具。它能够把数据用不同对称加密算法来加/解密。还能够把加密/解密结果进行base64编码
                + 参数含义
                      # -in filename : 要加密/解密的输入文件,缺省为标准输入。
                      # -out filename :要加密/解密的输出文件,缺省为标准输出。
                      # -pass arg   : 输入文件如果有密码保护,在这里输入密码。
                      # -e   : 一个缺省, 把输入数据加密。
                      # -d : 解密输入数据。
                      # -a   :用base64编码处理数据。表示在加密之后的数据还要用base64编码处理一次,解密之前则先用base64编码解码。
                      # -k password : 一个过时了的项,为了和以前版本兼容。现在用-pass代替了。
                      # -kfile filename : 同上
                      # -K key : 以16进制表示的密码。 -iv IV : 作用完全同-k。
                      # -p : 打印出使用的密码。 -P: 作用同上,但打印完之后马上退出。
                      # -bufsize number   :    设置I/O操作的缓冲区大小
                      # -debug   :    打印调试信息。
                      # -ciphername: 使用对称加密的方法,种类较多。见P/178表7.3

1.利用enc命令来进行对称加密/解密

    * 加密算法中有块加密算法和流加密算法俩种
          o 块加密算法是一次加密固定长度的数据,一般是8Bytes
          o 流加密算法则加密大量数据
    * 对于DES加密,都分des-ecb, des-cbc, des-cfb形式。简单解释一下:
          o ecb就是说每读到8bytes,就加密8bytes送出去。各个不同的数据块之间没有任何联系。cbc和cfb则每次加密一个8bytes的时候都和上一个8bytes加密的结果有一个运算法则。各个数据块之间是有联系的。

例:使用Openssl加/解密文件

    * 准备:
          o 步骤一:拷贝openssl压缩包。
          o 步骤二:解压缩软件包,解压缩在C盘根目录下,自动生成openssl文件夹。
          o 步骤三:点击“开始”、“程序”、“附件”、“命令提示符”,打开“命令提示符”窗口。
          o 步骤四:在命令窗口中,键入cd c:\openssl\out32dll,输入后按回车键,进入到openssl\out32dll的目录下。
    * 实验例1:将某源文件转换成base64编码文件。
          o 利用记事本生成名为example.txt存放在C盘out32dll 目录下。
          o 执行命令:openssl enc –base64 –in example.txt –out file.b64(加密)
    * 实验例2:将某base64编码文件转换成源文件
          o 执行命令:openssl enc –base64 –d –in file.b64 –out exp.txt    (解密)
                + 此两个加解密无密码保护

例3:使用DES-CBC方式加密

    * 使用DES-CBC方式解密



    * 例4:加密某文件,并将加密结果进行Base64编码,用bf+cbc算法加密
    * 例5:先用base64解码某文件,再解密

2、利用gendsa和genrsa产生不对称密钥对

    * gendsa命令:由DSA参数来产生DSA的一对不对称密钥。dsa参数可以用dsaparam来产生 。命令格式:

      openssl gendsa [-out filename] [-des] [-des3] [-idea] [-rand file(s)] [paramfile]

      参数含义:

                + -des|-des3|-idea :采用不同对称加密算法来加密不对称密钥。一般会要你输入保护密码。如果这三个中一个也没, 不对称密钥将不被加密。
                + -rand file(s) : 产生不对称key的时候用过seed的文件,可以把多个文件用冒号分开一起做seed。
                + paramfile :    指定使用的DSA参数文件。

例1:产生一个1024位长的DSA私钥

      Openssl dsaparam –rand –genkey pit mydsa.key 1024   //生成参数文件

      Openssl gendsa –des3 out mydsaCA.key mydsa.key    //产生密钥

                + dsaparam产生DSA参数文件时,产生的参数文件格式可以是PEM或DER。默认格式为PEM,即Base64编码格式,这是大多数.key和.crty文件采用的格式。

2、利用gendsa和genrsa产生不对称密钥对

    * genrsa命令:生成RSA私有密钥的工具
          o 格式:openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [numbits]
                + -out filename : 私有密钥输入文件名,缺省为标准输出。
                + -des|-des3|-idea : 采用什么加密算法来加密密钥。一般会要你输入保护密码。 如果这三个中一个也没设, 密钥将不被加密而输入。
                + -F4|-3 :使用的公共组件,一种是3, 一种是F4。
                + -rand file(s) : 产生key的时候用过seed的文件,可以把多个文件用冒号分开一起做seed.
                + numbits   :指明产生的参数的长度。必须是本指令的最后一个参数。如果没有指明,则产生512bit长的参数。
          o RSA的私有密钥其实就是三个数字,其中俩个是质数。这俩个就叫prime numbers.产生RSA私有密钥的关键就是产生这俩。还有一些其他的参数,引导着整个私有密钥产生的过程。因为产生私有密钥过程需要很多随机数,这个过程的时间是不固定的。  
                产生prime numbers的算法有个bug, 它不能产生短的primes. key的bits起码要有64位。一般都用1024bit的key.

2、利用gendsa和genrsa产生不对称密钥对

例:7.7产生一个1024位长的RSA私钥

      Openssl genrsa –des3 put myrsaCA.key 1024

使用三重DES加密算法

密钥长度为1024位

3、利用RSA或DSA来管理私有密钥文件

    * 利用RSA或DSA命令管理相对应的私有密钥文件中的内容。
          o 如将私有密钥文件中的内容以文本格式详细显示在屏幕上
                + Openssl rsa –in myrsaCA.key –text –noout
                      # 无noout参数,则以base64格式显示私钥内容
                      # 若只显示公钥内容,则输入:
                            * Openssl rsa –in myrsaca.key –pubout –out rsapub.pem

                      文件名随意取

                      # 若将公钥内容显示在屏幕上则:
                            * Openssl rsa –in myrsaca.key –pubout –text
          o 取消RSA私钥保护密码(不建议这样做)
                + Openssl rsa –in myrsacakey –out rasout.key
                      # 新私钥密码文件无保护密码
          o 用DES算法加密私有密码文件
                + Openssl rsa –in myrsaca.key –des –out myout.key
          o 将一个私有密钥文件由PEM格式转化为DER格式
                + Openssl rsa –in myrsaca.key outform DER –out ca.der

4.利用rsautl进行数据加/解密、签名和身份验证

    * 使用rsautl只能对少量数据(<150字节)文件进行加密或签名。命令格式:
          o Openssl rsautl [-in file][-out file][-inkey file] [-pubin][-certin] [-sign][-verify] [-encrypt] [-decrypt] [-pkcs][-ssl] [-raw][-hexdump] [-asnlparse]
          o 参数说明
                + -in file:指定输入文件名,默认为标准输入
                + -out file:指定输出文件名,默认为标准输出
                + -inkey file:指定私有密钥文件,须是RSA私钥文件,不能是DSA的。
                + -pubin:输入文件是一个含有RSA公钥的文件
                + -certin:输入文件是一个含有RSA公钥的证书文件
                + -sign:用私钥对输入的数据文件签名,需要私有密钥文件
                + -verify:用公钥对输入的数据文件进行验证
                + -encrypt:用公钥对输入的数据文件进行加密
                + -decrypt:用私钥对输入的数据文件进行解密
                + -pkcs,-oaep,-ssl,-raw:算法中采用模式,分别代表PKCS#1.5, 1,OAEP, SSLv2 和不填充(raw),若是签名,只能使用-PKCS和-raw
                + -hexdump:用十六进制输出数据
                + -asnlparse:对输出的数据进行ASN1分析。

例:对数据文件进行加密、解密

    * 先用记事本生成一数据文件,内容为:这是利用RSA进行加/解密、签名和验证。文件名为:RSA.TXT,存于C盘out32dll文件夹中
    * 生成一RSA密钥文件,设保护密码为123456
          o Openssl genrsa –des3 –out my.key 1024
    * 导出公钥(备后用)
          o openssl rsa -in my.key -pubout -out mykey.pem
    * 对rsa.txt文件进行加密(利用公钥,参数 -encrypt )
          o Openssl rsautl –encrypt –in rsa.txt –inkey my.key –out rsa1.txt     //rsa1.txt是乱码
    * 用私钥对rsa1.txt进行解密( -decrypt)
          o Openssl rsautl –decrypt –in rsa1.txt –inkey my.key –out rsa2.txt    //rsa2.txt应与rsa.txt内容一致

站长资讯网
.
分页: [1] [2]
TAG: openSSL 应用
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言