首页 > cryptology > openssl实战

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内容一致 例:对数据文件进行签名、验证 * 利用私钥对rsa.txt加密(签名作用 -sign) o Openssl rsautl –sign –in rsa.txt –inkey my.key -out rsa * 利用公钥对rsa文件进行验证(使用公钥 -verify) o Openssl rsautl –verify –in rsa –inkey my.key –out rsa3.txt 或openssl rsautl –verify –in rsa –inkey mykey.pem –raw –hexdump + 用来检查原始的签过名的数据,一般不用 7.3.2利用openssl生成证书 * 与证书生成有关的几个命令 o Req命令:本指令用来创建和处理PKCS#10格式的证书.它还能够建立自签名证书,做Root CA. + openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-noout][-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits] [-newkey dsa:file] [-nodes] [-key filename] [-keyform PEM|DER][-keyout filename] [-[md5|sha1|md2|mdc2]] [-config filename] [-x509] [-days n] [-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] # 参数说明见备注 1、与证书生成有关的几个命令 o X509命令:用来显示证书的内容、转换证书格式,给CSR请求签名等。 + openssl X509 [-inform PEM|DER|NET] [-outform PEM|DER|NET] [-keyform DER|PEM][-CAform DER|PEM] [-CAkeyform DER|PEM] [-in filename] [-out filename] [-serial] [-hash][-subject] [-issuer] [-nameopt option] [-email] [-startdate] [-enddate] [-purpose] [-dates] [-modulus] [-fingerprint] [-alias] [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg] [-addreject arg] [-setalias arg] [-days arg] [-signkey filename] [-x509toreq] [-req] [-CA filename] [-Cakey filename] [-Cacreateserial] [-Caserial filename] [-text] [-C] [-md2|-md5|shal|mdc2] [-clrext] [-extfile filename] [-extensions section] 1、与证书生成有关的几个命令 * CA命令:模拟CA中心行为,模拟CA给各种格式的CSA请求签名,产生和维护CRL列表,显示证书的状态等。其命令格式如下。 + openssl CA [-verbose] [-config filename] [-name section] [-gencrl] [-revoke file] [-crldays days] [-crlhours hours] [-crlexts section] [-startdate date] [--endate date] [-days arg] [-md arg] [-policy arg] [-keyfile arg] [-key arg] [-passin arg] [-cert file] [-in file] [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file] [-ss_cert file] [-preserveDN] [-batch] [-msie_hack] [-extensions section] 2、证书生成的步骤描述 * 在openssl目录下创建一子目录,用于放置四个文件:openssl.cnf,index.txt, index.txt.attr,serial o openssl.cnf内容见书P/183-184 * 从openssl /apps/demoCA目录中其余三个文件到创建子目录 o 本课程提供软件中已包含,在openssl/out32dll文件夹中 * 为CA创建一个RSA私钥 set path=c:/openssl/out32dll;%path% openssl genrsa –des3 –out ca.key 1024 //保护码设:123456 + 说明:此时DOS界面已工作在c:/openssl/创建子目录名 o 若根证书名不是ca.key及cacert.crt,则对openssl.cnf文件中相应的语句作修改 + P/183页:default_keyfile=ca.key + P/184页:certificate =$dir/cacert.crt private_key=$dir/ca.key 2、证书生成的步骤描述 * 利用CA的RSA私钥创建一个自签名的CA根证书 openssl req –new –x509 –days 3650 –key ca.key –out cacert.crt –config openssl.cnf + 输入对根证书的保护码 + 国家、省份、城市、公司、部门等可选缺省值 cacert.crt是根证书名 * 为客户颁发证书 o 先用genrsa命令生成私钥,再用req命令生成证书签署请求CRS,最后用X509生成证书 openssl genrsa –des3 –out user.key 1024 //设保护码为147852 # 执行命令时需输入密码,此是对user.key保护码 openssl req –new –key user.key –out user.crs –config openssl.cnf # 提示输入密码,是user.key的保护码;再有一些个人信息输入(如同根证书) openssl x509 –req –in user.csr –out user.crt –CA cacert.crt –CAkey ca.key –days 600 # 注意大小写,同时输入的保护码是根证书的。user.crt是用户证书名 2、证书生成的步骤描述 o 将user.crt转换为个人私钥证书 openssl pkcs12 –export –clcerts –in user.crt –inkey user.key –out user.p12 # 命令执行过程中需输入三次密码 * 第一次是user.key的保护码 147852 * 第二、三次是根证书保护码 123456 + 磁盘上将得到一个含有私钥的证书user.p12 * 使用CA命令来模拟CA中心,进行证书签发和产生CRL列表 o 证书签发: openssl ca –config openssl.cnf –in user.csr –out newuser.crt # 执行时输入根证书保护码:123456,相应回答y/N时选Y,同一目录下生成几个文件。 o 产生CRL列表 + openssl ca –config openssl.cnf –gencrl –out crl.pem # 输入根证书保护码:123456 7.3.3 证书内容的查看 * 查看用户证书内容 o openssl x509 –in user.crt –noout –text * 复制user.crt证书中公钥,存放于其他.key文件中 o openssl x509 –in user.crt –pubkey –noout>user.key
* 对签名证书user.crt进行详细分析
o openssl asn1parse –in user.crt
* 获得签名内容
o openssl asn1parse –in user.crt –out usig -noout

有关证书过程

* 使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程

1. 首先建立CA密钥:

+ openssl genrsa -des3 -out ca.key 1024 (创建密钥)
+ openssl rsa -noout -text -in ca.key (查看创建的证书)

2. 利用CA密钥自签署CA证书:

+ openssl req -new -x509 -days 3650 -key ca.key -out cacert.crt
-config openssl.cnf
+ openssl x509 -noout -text -in cacert.crt (查看创建的证书)

3. 创建服务器证书签署申请:

+ openssl genrsa -des3 -out client.key 1024
+ openssl rsa -noout -text -in client.key (查看创建的证书)

4. 利用证书签署申请生成请求

+ Openssl req –new –key client.key –out client.csr -config openssl.cnf
+ openssl req -noout -text -in client.csr (查看创建的请求)

有关证书过程

* 使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程

5. 进行证书签署:

+ openssl ca -keyfile ca.key -cert cacert.crt -in client.csr -out client.pem -config openssl.cnf (输入根证书保护码)

6. 证书撤销:

+ openssl ca -keyfile ca.key -cert cacert.crt -revoke client.pem -config openssl.cnf
# 这时数据库被更新证书被标记上撤销的标志,需要生成新的证书撤销列表
+ 证书撤销列表文件要在WEB站点上可以使用,必须将crldays或crlhours和crlexts加到证书中:
# openssl ca -gencrl -config openssl.cnf -crldays 7 -crlexts crl_ext -out crl/sopac-ca.crl

7.3.4 证书的使用

* 证书的使用
o 文件传输
o Web浏览
o 电子邮件发送
+ 例outlook express使用证书签名、解密邮件
+ 步骤
# 配置outlook express收发邮件

第一步:设置邮件账号

第二步:导入证书

* 双击存在磁盘上.p12文件,导入证书。
* 在outlook express窗口“工具”/选项/安全/数字标识à导入个人证书,根据步骤执行

第三步:将证书赋给帐号

* Outlook express窗口中à工具/帐号à选中一账号/属性à服务器(选中“我的服务器要求身份验证”)à安全(分别在签署证书、加密首选项/选择

思考题

* 在openssl中实现对称加密/解密的命令是什么?
o 对于DES加密,有哪几种形式
* 利用哪些常用命令可产生不对称密钥对?
o 用来管理私有密钥文件的命令是什么?
* 进行数据加/解密、签名和验证用的命令是?
* 生成证书常用的有关命令是?
* 证书生成步骤有什么?
* 根据实验要求验证各命令的使用,并提交实验结果。

Reg命令参数说明:

* -inform DER|PEM :指定输入的格式是DEM还是DER. DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式.你去看看你做出来的那些.key, .crt文件一般都是PEM格式的,第一行和最后一行指明内容,中间就是经过编码的东西。
* -outform DER|PEM : 和上一个差不多,不同的是指定输出格式
* -in filename : 要处理的CSR的文件名称,只有-new和-newkey俩个option没有被set,本option才有效
* -passin arg : 查看有关CA中关于这个option的解释。
* -out filename : 要输出的文件名
* -passout arg : 参看dsa指令里的passout这个option的解释.
* -text : 将CSR文件里的内容以可读方式打印出来
* -noout : 不要打印CSR文件的编码版本信息.
* -modulus : 将CSR里面的包含的公共米要的系数打印出来
* -verify : 检验请求文件里的签名信息
* -new : 本参数产生一个新的CSR, 它会要用户输入创建CSR的一些必须的信息.至于需要哪些信息,是在config文件里面定义好了的.如果-key没有被set, 那么就将根据config文件里的信息先产生一对新的RSA密钥
* -rand file(s) : 产生key的时候用过seed的文件,可以把多个文件用冒号分开一起做seed.
* -newkey arg :同时生成新的私有密钥文件和CSR文件. 本option是带参数的.如果是产生RSA的私有密钥文件,参数是一个数字, 指明私有密钥bit的长度. 如果是产生DSA的私有密钥文件,参数是DSA密钥参数文件的文件名
* -key filename : 参数filename指明私有密钥文件名.允许该文件的格式是PKCS#8
* -keyform DER|PEM :指定输入的私有密钥文件的格式是DEM还是DER. DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式..key, .crt文件一般都是PEM格式的,第一行和最后一行指明内容,中间就是经过编码的东西。
* -outform DER|PEM : 和上一个差不多,不同的是指定输出格式
* -keyform PEM|DER : 私有密钥文件的格式, 缺省是PEM
* -keyout filename : 指明创建的新的私有密钥文件的文件名. 如果该option没有被set, 将使用config文件里面指定的文件名.
* -nodes : 本option被set的话,生成的私有密钥文件将不会被加密
* -[md5|sha1|md2|mdc2] : 指明签发的证书使用什么哈希算法.如果没有被set, 将使用config文件里的相应item的设置. 但DSA的CSR将忽略这个option, 而采用SHA1哈希算法.
* -config filename : 使用的config文件的名称. 本option如果没有set, 将使用缺省的config文件
* -x509 : 本option将产生自签名的证书. 一般用来错测试用,或者自己玩下做个Root CA.证书的扩展项在 config文件里面指定
* -days n : 如果-509被set, 那么这个option的参数指定自己的CA给人家签证书的有效期.缺省是30天
* -extensions section -reqexts section : 这俩个option指定config文件里面的与证书扩展和证书请求扩展有关的俩个section的名字(如果-x509这个option被set).这样你可以在config文件里弄几个不同的与证书扩展有关的section, 然后为了不同的目的给CSR签名的时候指明不同的section来控制签名的行为.

  1. 还没有评论
评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks