2023年12月18日发(作者:)
一、 一、环境
操作系统:Windows XP,开发环境Visual C++ 2008;
类库支持:Win32OpenSSL_Light-1_0_
,vcredist_x86,
二、 二、Openssl工具库的安装和编译
直接安装:
(1)安装VC++2008环境支持(vcredist_x86),使系统能够运行VC++2008编译形成的Win32OpenSSL_Light-1_0_1f;
(2)安装Win32OpenSSL_Light-1_0_1f;
(3)配置系统环境变量,把Win32OpenSSL的安装目录添加到系统路径里面,重启系统;
(4)安装;
openssl源代码开始编译安装:
(1)安装Visual Studio 2008,将安装目录下的bin目录添加到系统路径下;
(2)解压缩openssl,C:OpenSSL。
(3)进入到openssl, 比如C:OpenSSL。
(4) 配置WIN32环境, 打开CMD命令行,进入C:OpenSSL目录,执行命令perl Configure
VC-WIN32;
(5)进入VCBIN目录,配置VC环境变量,进入VS安装路径的VC/Bin目录下,运行:,设置环境变量。
(6)返回OpenSSL目录,创建makefile文件,执行msdo_ms;
(7)在Openssl目录下,执行编译nmake -f
编译动态库:
nmake -f
编译静态库:
nmake -f
测试动态库:
nmake -f test
测试静态库:
nmake -f test
安装动态库:
nmake -f install
安装静态库:
nmake -f install
清除上次动态库的编译,以便重新编译:
nmake -f clean
清除上次静态库的编译,以便重新编译:
nmake -f clean
如果第7步编译报错,据说解决办法是修改ms目录下文件,去掉/WX 编译选项,然后重新执行nmake -f 命令。
(8)最终编译动态库完成后,输出都在out32dll目录下:包括可执行文件、两个dll 和两个lib文件: , , , ,如果需要使用openssl命令,还需要在系统环境变量path中增加c:opensslout32dll路径,因为就在该目录下,
声明后可以直接在命令行中使用openssl命令。
(9)出现WARNING: can't open config file: /usr/local/ssl/错误是由于系统找不到文件,在编译完成后,该文件出现在c:opensslapps下。通过在系统环境变量中添加一个OPENSSL_CONF,取值为c:,重启后即可解决该问题。
注意:第4-7步操作需要在同一个命令窗口下完成,因为设置环境变量只对当前的命令窗口起作用。
Openssl编程设置:
1、 1、配置包含文件
在Include files中增加C:opensslinc32目录,假设openssl安装目录为C:openssl。
在Libray files中增加C:opensslout32dll。
将头文件所在的路径包括进去,即添加包含(include)文件目录。依次打开“项目——属性——配置属性——C++——常规——附加包含目录”中加入所有的路径。这里需要注意的是(1)路径必须指向头文件所在的子文件夹,而不能直到父文件夹就结束(2)每个路径不需要加上双引号,输入了之后,vs2008会自动加上双引号,如果自己加可能vs2008无法识别双引号(3)如果是多个路径,路径直接用“;”隔开。
添加库(libs)文件目录。依次打开“项目——属性——配置属性——链接器——常规——附加库目录”中加入链接库的路径。
2、 包含头文件,导入LIB库
在源程序中包含以下三个头文件并加入LIB:
#include
#include
#include
#pragma comment(lib, "")
#pragma comment(lib, "")
#pragma comment(lib, "ws2_")
2、 2、更多OpenSSL编程参考:
/woomsg/archive/2008/11/03/
/1228348/325483
三、Openssl工具的使用---命令台下直接使用openssl命令
(1)直接运行openssl的完整命令,如openssl dgst -md5 -c -d
Win32OpenSSL_Light-1_0_;
(2)两大命令openssl gdst和openssl enc都支持多种加密算法;
四、Openssl工具的消息摘要命令(openssl gdst)
openssl gdst -[md5|md2|sha1|sha|mdc2|ripemd160] [-c] [-d] [file….]
Options:
选项 意义
md5|md2|sha1| sha|mdc2|ripemd160
-c
-d
file
消息摘要函数;
打印出哈希结果的时候用冒号分隔开;
详细打印出调试信息;
要hash的文件,没有则表示使用标准输入;
举例:openssl dgst -md5 –c –d Win32OpenSSL_Light-1_0_
五、Openssl工具的数据对称加密和解密功能(openssl enc)
(1)加密命令: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]
OPTIONS:
选项 意义
-in filename
要加密/解密的输入文件,缺省为标准输入。
-out filename
-pass arg
-salt
要加密/解密的输出文件,缺省为标准输出。
输入文件如果有密码保护,在这里输入密码。
为了和openssl0.9.5以后的版本兼容,必须set这个大概又是密码学里的一个术语,具体是做什么的我也没弄的很明白。就我的理解,这是加密过后放在密码最前面的一段字符串, 用途也是为了让破解更难。
想和openssl0.9.5以前的版本兼容,就set这个option。
一个缺省会set的option, 把输入数据加密。
解密输入数据。
用base64编码处理数据。set了这个option表示在加密之后的数据还要用base64编码捏一次,解密之前则先用base64编码解码。
一个过时了的项,为了和以前版本兼容。现在用-key代替了。
同上,被passin代替。
以16进制表示的密码
作用完全同上。
打印出使用的密码。
作用同上,但打印完之后马上退出。
设置I/O操作的缓冲区大小。
打印调试信息。
-nosalt
-e
-d
-a
-k password
-kfile filename
-K key
-iv IV
-p
-P
-bufsize number
-debug
本指令支持的加密算法:
base64:Base 64
bf-cfb:Blowfish in CFB mode
cast-cbc:CAST in CBC mode
des-cbc:DES in CBC mode
des-ofb:DES in OFB mode
des-ede:Alias for des-ede
bf-cbc:Blowfish in CBC mod
cast:Alias for cast-cbc
des:Alias for des-cbc
des-ecb:DES in ECB mode
bf:Alias for bf-cbc
cast5-cbc:CAST5 in CBC mode
des-cfb:DES in CBC mode
des-ede-cbc:Two key triple
DES EDE in CBC mode
bf-ecb:Blowfish in ECB mode bf-ofb:Blowfish in OFB mode
cast5-cfb:CAST5 in CFB mode cast5-ecb:CAST5 in ECB mode cast5-ofb:CAST5 in OFB mode
des-ede-cfb:Two key triple des-ede-ofb:Two key triple
DES EDE in CFB mode DES EDE in OFB mode
Alias for des3:Alias for des-ede3-cbc des-ede3-cbc:Three key triple des-ede3:DES EDE in CBC mode des-ede3-cbc
des-ede3-cfb:Three key triple des-ede3-ofb:Three key triple desx:DESX algorithm.
DES EDE CFB mode DES EDE in OFB mode
idea-cbc:IDEA algorithm in idea:same as idea-cbc
CBC mode
idea-ecb:IDEA in ECB mode
rc2:Alias for rc2-cbc
idea-ofb:IDEA in OFB mode
idea-cfb:IDEA in CFB mode
rc2-cbc:128 bit RC2 in CBC
mode
rc2-cfb:128 bit RC2 in CBC rc2-ecb:128 bit RC2 in CBC
mode mode
rc2-ofb: 128 bit RC2 in CBC rc2-64-cbc: 64 bit RC2 in CBC rc2-40-cbc:40 bit RC2 in CBC
mode mode mode
rc4:128 bit RC4 rc4-64:64 bit RC4 rc4-40:40 bit RC4
rc5-cfb:RC5 cipher in CBC
mode
rc5-cbc:RC5 cipher in CBC rc5:Alias for rc5-cbc
mode
rc5-ecb:RC5 cipher in CBC rc5-ofb:RC5 cipher in CBC
mode mode
举例:
(a)把二进制文件 数据编码成base64,生成file.b64文件;
openssl enc -base64 -in -out file.b64
(b)把base64编码的数据文件file.b64转换成二进制文件;
openssl enc -base64 -d -in file.b64 -out
六、利用Openssl工具生成数字证书和密钥
(1) (1)当前目录下创建ca, server, client目录;
(2) (2)创建ca的私钥和证书; (ca的创建也可以用命令 –newca, 在当前目录下demoCA/private/是CA根证书的私钥;demoCA/是CA的根证书文件,需要导入到服务器和浏览器里面);
1. 1.生成ca的私有密钥文件,比如叫;
openssl genrsa -out ca/ 1024
2. 2.创建ca的证书请求文件,比如叫;
openssl req -new -out ca/ -key ca/
3. 3.创建自签名证书,比如叫;
openssl x509 -req -in ca/ -out ca/ -signkey ca/ -days
365
(3) (3)创建server的私钥和证书;
1. 1.生成server的私有密钥文件,比如叫server-key .pem;
openssl genrsa -out server/ 1024
2. 2.创建server的证书请求文件,比如叫;
openssl req -new -out server/ -key server/
3. 3.创建ca签名的server证书,比如叫;
openssl x509 -req -in server/ -out server/ -signkey
server/ -CA ca/ -CAkey ca/ -CAcreateserial -days
365
4. 4.将证书导出成浏览器支持的.p12格式:
openssl pkcs12 -export -clcerts -in server/ -inkey server/
-out server/server.p12
(4) (4)创建client的私钥和证书;
1. 1.生成client的私有密钥文件,比如叫client-key .pem;
openssl genrsa -out client/ 1024
2. 2.创建client的证书请求文件,比如叫;
openssl req -new -out client/ -key client/
3. 3.创建ca签名的client证书,比如叫;
openssl x509 -req -in client/ -out client/ -signkey
client/ -CA ca/ -CAkey ca/ -CAcreateserial -days
365
4. 4.将证书导出成浏览器支持的.p12格式:
openssl pkcs12 -export -clcerts -in client/ client - -inkey client / client -
-out client / client.p12
查看证书命令:openssl x509 -in -noout -text
genras表示生成RSA私有密钥文件, 1024是我们的key的长度。一般用512就可以了,784可用于商业行为了,1024可以用于军事用途了。
给一个CSR签名: openssl ca -in -out
给一个CSR签名, 产生x509v3证书: openssl ca -in -extensions v3_ca -out
同时给数个CSR签名:openssl ca -infiles
七、Openssl的x509命令
openssl x509 [-inform DER|PEM|NET] [-outform DER|PEM|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|-sha1|-mdc2]
[-clrext] [-extfile filename] [-extensions section]
本指令是一个功能很丰富的证书处理工具。可以用来显示证书的内容,转换其格式,给CSR签名等等。
选项 意义
-inform DER|PEM|NET
指定输入文件的格式。
-outform DER|PEM|NET
-in filename
-out filename
-md2|-md5|-sha1|-mdc2
-text
-noout
-modulus
-serial
-hash
-subject
-issuer
-nameopt option
-startdate
-enddate
-dates
-fingerprint
指定输出文件格式;
指定输入文件名
指定输出文件名
指定使用的哈希算法。缺省的是MD5
用文本方式详细打印出该证书的所有细节。
不打印出请求的编码版本信息。
打印出公共密钥的系数值。没研究过RSA就别用这个了。
打印出证书的系列号。
把证书的拥有者名称的哈希值给打印出来。
打印出证书拥有者的名字。
打印证书颁发者名字。
指定用什么格式打印上俩个option的输出。后面有详细的介绍。
如果有,打印出证书申请者的email地址
打印证书的起始有效时间
打印证书的到期时间
把上俩个option都给打印出来
打印DER格式的证书的DER版本信息。
-C
用C代码风格打印结果。
打印出证书的内容: openssl x509 -in -noout -text
打印出证书的系列号:openssl x509 -in -noout -serial
打印出证书的拥有者名字:openssl x509 -in -noout -subject
以RFC2253规定的格式打印出证书的拥有者名字:openssl x509 -in -noout -subject
-nameopt RFC2253
在支持UTF8的终端一行过打印出证书的拥有者名字:openssl x509 -in -noout
-subject -nameopt oneline -nameopt -escmsb
打印出证书的MD5特征参数:openssl x509 -in -noout -fingerprint
打印出证书的SHA特征参数:openssl x509 -sha1 -in -noout -fingerprint
把PEM格式的证书转化成DER格式:openssl x509 -in -inform PEM -out
-outform DER
把一个证书转化成CSR:openssl x509 -x509toreq -in -out -signkey
给一个CSR进行处理,颁发字签名证书,增加CA扩展项:openssl x509 -req -in
-extfile -extensions v3_ca -signkey -out
给一个CSR签名,增加用户证书扩展项:openssl x509 -req -in -extfile
-extensions v3_usr -CA -CAkey -CAcreateserial
Power by YOZOSOFT


发布评论