1、什么是OpenSSL?

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。


2、OpenSSL的组成


                OpenSSL三部分组成

                            1:libcrypto库

                            2:libssl库

                            3:openssl 多用途命令行工具


3、OpenSSL加密算法和协议

1)对称加密算法

算法种类:

    DES:现代加密算法;8个字节位一块儿,64位加密算法。已被破解

      3DES:DES升级版,三个数量级,千倍

 AES:高级加密标准:128bit位,192bits位,256bits位,384bits位

对称加密的特性:

     机密解密同一个秘钥

     加密原始数据分割成固定大小的块,逐个加密

对称加密的缺陷:

    秘钥过多

    秘钥分发困难

2)公钥加密算法

      秘钥的种类

               公钥:从私钥中提取产生,可公开给所有人

        私钥:通过工具创建,使用者自己留存,必须保证其私密性

        特点:用公钥加密的数据,只能使用与之对应的私钥解密,反之亦然

    用途:

        数字签名:主要用于让接收方确认发送放的身份

      密钥交换:发送发用对方公钥加密一段对称密钥,并发送给对方

  算法:

       RAS

            RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码***,已被ISO推荐为公钥数据加密标准。

  DAS 数字签名算法

3)单向加密

特性:

    只能加密不能解密,提取数据指纹(特征)

     定长输出;

     雪崩效应(数据微小变化,数据验证将会发生巨大变化)

算法:

    MD5 固定128位定长输出;

sha1 160位的定长输出

sha224

sha256

sha384

sha512

4)秘钥交换

公钥加密:获取对方公钥,只有对方私钥才能解密

算法采用 DH算法:deffie-hellman


4、公钥加密过程(snow-->bamboo)

snow给bamboo发送数据需要进行以下步骤:

1、snow首先使用单向加密算法算法算出这段数据的特征; 

2、并使用自己的私钥将这段特征码进行加密,生成数字签名。并把这段签名附加在数据后面;

3、然后snow使用对称加密算法将数据进行加密,(自己生成的一个一次性的对称秘钥)然后通过bamboo的公钥对对称加密码进行加密,并将其附加数据报文的后面


当bamboo收到snow传输过来的数据后会做如下解密和验证步骤:


1:bamboo使用自己的私钥进行对数据的密码进行解密,这种方法就叫做秘钥交换;

2:bamboo使用解密出来的密码将数据进行解密;

3:bamboo然后使用snow的公钥解密这段数据的加密后的特征码,然后使用同种加密算法算出这段数据的特征码与解密出来的特征码比较是否一致,如果一样,数据完整性得到了保证了;

以上既保证了数据的完整性,保密性,和唯一性,但是如果在网络中有人冒充bamboo,将其公钥给了snow,怎么来解决这一问题?CA第三方公钥合法性效验中心。


5、CA的出现!

            证书授证中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心GlobalSign)为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得***者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。


6、各加密算法命令

1)对称加密

 工具:opensslenc, gpg

算法:3des, aes, blowfish, twofish


enc命令:man enc

加密:

openssl enc -e -des3 -a -salt -in filename

-out filename.encryption

解密:

openssl enc -d -des3 -a -salt –in testfile.encryption

-out testfile

2)单向加密

工具:md5sum, sha1sum, sha224sum,sha256sum…

openssl  dgst

dgst命令:

openssl  dgst  -md5 [-hex默认] /PATH/SOMEFILE

openssl  dgst  -md5 testfile

md5sum /PATH/TO/SOMEFILE

3)生成用户密码

工具:passwd,openssl passwd

opensslpasswd-1 -salt SALT(最多8位)

opensslpasswd-1 –salt centos

[root@localhost testdir]# openssl passwd -1 -salt $(openssl rand -hex 10)

Password: 

$1$8e0dbb21$N4b97PdbzsQpBdw9zNcAU1

4)生成随机数:man sslrand

  openssl  rand -base64|-hex NUM

NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

[root@localhost testdir]# openssl rand -base64 10LMAeXPhRn3m3pg==

[root@localhost testdir]# openssl rand -hex 10

55f6e4a8c9c9ce58c1c0

5)公钥加密:

算法:RSA, ELGamal

工具:gpg, opensslrsautl(man rsautl)

数字签名:

算法:RSA, DSA, ELGamal

密钥交换:

算法:dh

DSA: Digital Signature Algorithm

DSS:Digital Signature Standard

RSA:

生成私钥: # (umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)

提出公钥: #  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout