一,SSL简介

   SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

    通过以上叙述,SSL协议提供的安全信道有以下三个特性:

       1、数据的保密性 信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。

       2、数据的完整性 加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。

       3、安全验证 加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。

二,openSSL简介

   具体作者为:Eric A. Young和Tim J. Hudson,他们从1995年开始编写OpenSSL软件包为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

   openSSL特点:

   众多的密码算法、公钥基础设施标准以及SSL协议

   通常称openSSL为套件,或开源套件,开源程序。主要包括三个部分:

       密码算法库:libcrypto

       SSL协议库:libssl

       应用程序:openssl

三,加密解密常用的功能和算法特点

    小知道:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程

   1,加密算法按对称性可分为三类:

     1.1对称加密算法:主要包括,DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES

           其功能特点描述:指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。

     1.2,非对称加密算法:主要包括,RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

           其功能特点描述:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

     1.3,Hash算法:主要包括,MD2、MD4、MD5、HAVAL、SHA

            其功能特点描述:Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

  2,常见的加密算法特点及用途

     2.1 DES加密算法(data encrytion standard)

          DES 算法的发明人是IBM公司的W.Tuchman和C.Meyer。是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据

     2.2 AES加密算法(advanced encrytion standard)

           AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

     2.3 RSA加密算法

           RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

     2.4 Base64加密算法

           Base64加密算法是网络上最常见的用于传输8bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在JAVAPERSISTENCE系统HIBEMATE中,采用了Base64来将一个较长的唯一标识符编码为一个字符串,用作HTTP表单和HTTPGETURL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

      2.5 MD5加密算法

           MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。简要描述:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成—个128位散列值。MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方。

      2.6 SHA1加密算法

           SHA1是和MD5一样流行的消息摘要算法。SHA加密算法模仿MD4加密算法。SHA1设计为和数字签名算法(DSA)一起使用。SHA1主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2“64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA1不可以从消息摘要中复原信息,而两个不同的消息不会产生同样的消息摘要。这样,SHA1就可以验证数据的完整性,所以说SHA1是为了保证文件完整性的技术。

SHA1加密算法可以采用不超过264位的数据输入,并产生一个160位的摘要。输入被划分为512位的块,并单独处理。160位缓冲器用来保存散列函数的中间和最后结果。缓冲器可以由5个32位寄存器(A、B、C、D和E)来表示。SHA1是一种比MD5的安全性强的算法,理论上,凡是采取“消息摘要”方式的数字验证算法都是有“碰撞”的——也就是两个不同的东西算出的消息摘要相同,互通作弊图就是如此。但是安全性高的算法要找到指定数据的“碰撞”很困难,而利用公式来计算“碰撞”就更困难一目前为止通用安全算法中仅有MD5被破解。

   注:以上部分内容整理摘录至夏冰加密软件技术博客

四,具体加密算法使用方法事例

   1,对称加密

       加密    # openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file
       解密    # openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out /path/to/plain)file

   事例:加密、解密fstab文件,事例中的盐为:123

openSSL的使用及私有CA的创建_自签


   解密文件fstab.encrypd

   openssl enc -d -des3 -a -salt -in fstab.encrypd -out fstab.plaind

openSSL的使用及私有CA的创建_私有CA_02

   2,单向加密

   openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] /path/to/somefile    

openssl dgst -sha1 -out fstab.sha1.encrypd fstab

openSSL的使用及私有CA的创建_自建CA_03    3,用户认证(手动生成用户密码)

   如下图所示

openSSL的使用及私有CA的创建_自签_04

五 CA证书的签发与自签

    1,什么是CA

       CA(Certificate Authority),认证授权机构,是一个组织机构,是公众认可的,可信任的。是证书的签发机构,它是PKI(public key infrastructure)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

   2,数字证书的格式

       常见的格式有:x509 ,pkcs12

       下面详细介绍证书x509的格式,主要包括的信息有:

            1),公钥和有效期限:
            2),持有着的个人合法身份信息:
            3),证书的使用方式:
            4),CA的信息:
            5),CA的数字签名:(前四项的加密特征信息)

   3,使用openSSL实现创建私有CA

       主要有以下几个具体步骤:

        1),服务器端        

               1,生成一对儿密钥

               2,把所需信息和公钥按照一定格式制作成证书并申请

               3,生成自签证书

        2), 客户端

               1,在主机上生成密钥

               2,生成证书签署请求

               3,将请求文件发往CA

        3),服务器端

               1,签署客户端的请求

               2,将证书回传给请求者

               3,客户端证书的吊销

        4),客户端

               1,证书的安装与使用

   根据以上描述的步骤,进行具体的操作

     1,服务器端,工作目录为(/etc/pki/tls/private)

          生成一对儿密钥

(umask 077;openssl genrsa -out cakey.pem 2048)

openSSL的使用及私有CA的创建_证书请求_05

   使用如下命令可以查看生成的密钥对儿

openssl rsa -in cakey.pem -pubout -text

2,根据生成的密钥生成自签证书

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

openSSL的使用及私有CA的创建_证书请求_06

   创建openssl默认要使用到的三个文件(目录为:/etc/pki/tls/private)

      (注:三个文件的具体作用,证书索引文件,证书序列号,及CA吊销的证书数)

touch index.txt serial crlnumber
echo 01 >serial

   2,客户端

          (注:创建要保存证书的路径,如在路径:/etc/httpd下)    

         1),先生成密钥  

(umask 077; openssl genrsa -out httpd.key 1024)

openSSL的使用及私有CA的创建_私有CA_07

           2),生成证书签署请求

openssl req -new -key httpd.key -out httpd.csr

openSSL的使用及私有CA的创建_证书请求_08

       3),将生成的证书签署请求发送给服务器端(CA)

openSSL的使用及私有CA的创建_证书请求_09

   3,对客户端发送过来的证书签署进行签署(在目录/tmp 下)


openssl ca -in httpd.csr -out httpd.crt -days 3655

    4,对已经签署的证书,发送到客户端即可,由于是实验环境,直接scp复制到客户端。

至此证书的签发工作已经完成。

    5,同是服务器端(CA)也可以吊销证书


openssl ca -revoke /path/to/somefile.crt

   这里不再做演示