OpenSSL和OpenSSH

2015-09-24 07:16:32

标签:openssl Linux 互联网 电子商务 安全性

 

  现在电子商务、网络购物的火热现象,背后离不开各种加密技术的应用,各种加密技术的组合应用给互联网的交易带来安全的保障。下面我们来逐一了解这套安全体系。

 

 

互联网安全通讯基础:加密算法

  按类型可以分为对称加密、非对称加密、单向加密三种。

 

l  对称加密
 加密和解密使用同一个密码,安全性依赖于密钥而非算法。加密速度快,常用于大数据的加密。缺点是秘钥多的时候不方便记忆使用,秘钥传输也不安全。常见的算法有DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等

 

l  非对称加密
 功能特点:需要两个秘钥,公钥和私钥。如果用公钥对数据进行加密,只有用对应的私钥才能解密。如果用私钥进行加密,只有对应公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以叫非对称加密。优点:算法强度复杂,安全性依赖于算法与密钥,传输方便,只传输公钥即可。缺点:由于算法复杂,加密解密速度没有对称加密快
  机密信息交换基本过程:甲方生成一对密钥并将其中的一把作为公用密钥向外公开;得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方。甲方再用自己保存的对应的另一把私钥对加密后的信息进行解密。
  常用算法:RSA,DSA(数字签名算法,是一种标准的DSS),ECC

 

l  单向加密
  特点,定长输出:加密输出的结果长度都是一样。雪崩效应:原始数据只要发生一点微小改变就会导致结果巨大变化。不可逆:只能对数据进行加密,没有办法对加密以后的数据进行解密还原。通常用于文件或数据的完整性检验或用户密码保存。例如/etc/shadow里的密码。常用算法:MD5,SHA1,SHA256,SHA384,SHA512,CRC32

 

 

互联网安全通讯基础:协议

  SSL工作原理

   ssl是一个安全协议,提供使用TCP/IP的通信应用程序间的隐私与完整性。网站多使用SSL来实现安全的通信

ssl在客户端与服务器间传输的数据是通过使用对称算法(DES或RC4)进行加密的.公用密钥算法(通常为RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥加密。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。SSLv1 SSLv2只提供服务器认证。SSLv3添加了客户端认证,此认证同时需要客户端和服务器端的数字证书。

SSL握手

SSL连接总是由客户端启动的。在SSL会话开始时执行SSL握手。SSL的通信过程如下图所示。(此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接)
         加密算法和CA_第1张图片       

   (1) 客户端发送列出客户端密码能力的客户端“您好”消息(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的密
           码对和客户端支持的数据压缩方法。消息也包含 28 字节的随机数。

 

    (2) 服务器以服务器“您好”消息响应,此消息包含密码方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另
          一个随机数。

    注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

 

    (3) 服务器发送其SSL数字证书。(服务器使用带有 SSL 的 X.509 V3 数字证书。)

       如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要数字证书进行客户端认证,则客户端会发出“数字证
           书请求”消息。在 “数字证书请求”消息中,服务器发出支持的客户端数字证书类型的列表和可接受的CA的名称。

 

    (4) 服务器发出服务器“您好完成”消息并等待客户端响应。

 

    (5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你
          好”消息参数是否可以接受。

       如果服务器请求客户端数字证书,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发
          送“没有数字证书”警告。此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会
          话失败。

 

    (6) 客户端发送“客户端密钥交换”消息。此消息包含 pre-master secret (一个用在对称加密密钥生成中的 46 字节的随
          机数字),和 消息认证代码 ( MAC )密钥(用服务器的公用密钥加密的)。

       如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。通过验证此消
          息的签名,服务器可以显示验证客户端数字证书的所有权。

    注意: 如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且
        握手将失败。

 

    (7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret ,其中将派生出所有用于加密和消息认证的密
          钥。然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。客户端发出的下一个消息(“未完成”的
          消息)为用此密码方法和密钥加密的第一条消息。

 

    (8) 服务器以自己的“更改密码规范”和“已完成”消息响应。

 

    (9) SSL 握手结束,且可以发送加密的应用程序数据。

 

       简单来说,一次加密通信过程如下:

发送者:

1、使用单向加密算法提取生成数据的特征码;

2、使用自己的私钥加密特征码附加在数据后面;

3、生成用于对称加密的临时密钥;

4、用此临时密钥加密数据和已经使用私钥加密后的特征码;

5、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;

接收方:

1、使用自己的私钥解密加密的临时密钥;从而获得对称密钥;

2、使用对称密钥解密对称加密的 数据和私钥加密的特征码密文;从而获得数据和特征码密文;

3、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码;

4、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较;


 

互联网安全通讯基础:数字证书

 

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的***。它是由一个由权威机构——CA机构(如GlobalSign),又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。

n  CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权,CA是可以信任的第三方

 

n  数字证书的格式(x.509 v3):
    版本号(version)
    序列号(serial number):CA用于惟一标识此证书;
    签名算法标志(Signature algorithm identifier)
    发行者的名称:即CA自己的名称;
    有效期:两个日期,起始日期和终止日期;
    证书主体名称:证书拥有者自己的名字
    证书主体公钥信息:证书拥有者自己的公钥;
    发行商的惟一标识:
    证书主体的惟一标识:
    扩展信息:
    签名:CA对此证书的数字签名;

n  证书通常有两类用途:

        用户证书

        主机证书(httpd)


互联网安全通讯的最终体系:PKI(pubic key infrastructure)

 

  PKI(Public Key Infrastructure ) 即"公开密钥体系",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数
   字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。

   PKI的基本组成:
    完整的PKI系统必须具有权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应用接口(API)等基本构成部
     分,构建PKI也将围绕着这五大系统来着手构建。

u  认证机构(CA):即数字证书的申请及签发机关,CA必须具备权威性的特征;

u  数字证书库:用于存储已签发的数字证书及公钥,用户可由此获得所需的其他用户的证书及公钥;

u  密钥备份及恢复系统:如果用户丢失了用于解密数据的密钥,则数据将无法被解密,这将造成合法数据丢失。为避免这种情况,PKI提供备份与恢复密钥的机制。但须注意,密钥的备份与恢复必须由可信的机构来完成。并且,密钥备份与恢复只能针对解密密钥,签名私钥为确保其唯一性而不能够作备份。

u  证书作废系统:证书作废处理系统是PKI的一个必备的组件。与日常生活中的各种***件一样,证书有效期以内也可能需要作废,原因可能是密钥介质丢失或用户身份变更等。为实现这一点,PKI必须提供作废证书的一系列机制。

u  应用接口(API):PKI的价值在于使用户能够方便地使用加密、数字签名等安全服务,因此一个完整的PKI必须提供良好的应用接口系统,使得各种各样的应用能够以安全、一致、可信的方式与PKI交互,确保安全网络环境的完整性和易用性。。

 

通常来说,CA是证书的签发机构,它是PKI的核心。众所周知,构建密码服务系统的核心内容是如何实现密钥管理。公钥体制涉及到一对密钥(即私钥和公钥),私钥只由用户独立掌握,无须在网上传输,而公钥则是公开的,需要在网上传送,故公钥体制的密钥管理主要是针对公钥的管理问题,目前较好的解决方案是数字证书机制。

 

 

互联网安全通讯的具体实现

  OpenSSL

n  概述
 目前比较流行的认证服务器之一是OpenSSL认证服务器,是SSL的开源实现,是基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库。它还可以帮我们实现私有证书颁发等功能。OpenSSL项目在EricYoung开发的SSLeay包的基础上,开发一个健壮的、商业等级的、开放源码的工具包用强大的加密算法来实现安全的socket层和传输层安全性,这个项目由全世界的志源者管理和开发OpenSSL工具包和相关的文档。它提供了众多而且复杂的API函数,可惜的是,目前它的文档不全,只能够程序员自已多做工作。它的网址是:http://www.openssl.org  

 

n  对称加密算法:
 OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

 

n  非对称加密算法:
 OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

 

   OpenSSL命令行使用(man enc 或 man dgst)

    用途:对文件使用对称或非对称算法加密

    语法:

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

 

n  -chipername选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。

 

n  -in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。

 

n  -out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。

 

n  -pass选项:选择输入口令的方式,输入源可以是标准输入设备,命令行输入,文件、变量等。

 

n  -e选项:实现加密功能(不使用-d选项的话默认是加密选项)。

 

n  -d选项:实现解密功能。

 

n  -a和-A选项:对文件进行BASE64编解码操作。

 

n  -K选项:手动输入加密密钥(不使用该选项,Openssl会使用口令自动提取加密密钥)。

 

n  -IV选项:输入初始变量(不使用该选项,Openssl会使用口令自动提取初始变量)。

 

n  -salt选项:是否使用盐值,默认是使用的。

 

n  -p选项:打印出加密算法使用的加密密钥。

 

  例:

   1.使用对称加密des3 加密/etc/fstab文件,输出加密后fstab_enc_des3文件

        wKioL1YDMkLSKKRvAADXL_XaU30322.jpg

 

  2.提取fstab的特征码

wKioL1YDMk2DKr2tAACBN26djVw360.jpg

 

  passwd 命令语法

   用途:密码生成

   openssl passwd [-crypt] [-1] [-apr1] [-salt  string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password} 

 

   选项说明:

         

  n  -crypt:生成标准的unix口令密文。默认选项。

         

  n  -1:用MD5基于BSD的密钥算法。

         

  n  -apr1:Apache md5口令密文。

         

  n  -salt  string:用指定的字符串填充。当从终端读取一个密钥时,则填充它。

         

  n  -in file:从指定的文件中读取密钥。

         

  n  -stdin:从stdin中读取密钥。

         

  n  -noverify:当从终端读取口令时不去验证它。

         

  n  -quiet:当命令行提供的密钥是缩短了的,则不输出警告。

         

  n  -table:用户输入的口令和结果用缩进隔开。

         

  n  password:需要处理的密钥值

 

     例:使用openssl进行生成密码串,手动输入密码后即生成

    wKiom1YDMlaTikjzAABpin8O8Cs953.jpg

 

            OpenSSL rand 命令

         用途:随机数产生器

            语法:openssl rand [-out file] [-rand  file(s)] [-base64] [-hex] num 

 

            选项说明:

             

            n  -out file:结果输出到file中。

             

            n  -rand  file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS
                 用“,“,其他系统用“:”。

             

            n  -base64:输出结果为BASE64编码数据。

             

            n  -hex:输出结果为16进制数据。

             

            n  num:随机数长度。

 

        例:生成5位 base64的密码

   wKioL1YDMmOwR7_zAABZ4eca59Q839.jpg

 

 

    用OpenSSL建立私有CA

    引用别人的图说明整个流程:

加密算法和CA_第2张图片

 

1.   先在服务器端生成私钥和自签证书(这里用中括号的意思是在子进程中执行,修改的umask权限不会影响当前用户,注意私钥和证书的存放位置)
openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024
(umask 077;openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cakey.crt -days 365)
cd /etc/pki/CA
touch index.txt serial crlnumber 自建辅助文件
echo “01” > serial   证书初始编号

2.   用户主机生成私钥和申请证书文件
(umask 077:openssl genrsa -out mykey.pem 1024)
openssl req -new -key mykey.pem -out mykey.csr 这里不用写有效期-days,以CA签发日期为准
下面会让输入证书的一些信息:
1:国家的名称
2:省份名称
3:城市名称
4:公司名称
5:组织名称
6:主机名称
7:管理员邮件地址
再把mykey.csr传给CA

3.   CA签发证书
     openssl ca -in mykey.pem -out mykey.crt -days 365

4.   CA吊销证书
     openssl ca -revoke mykey.crt 这个mykey.crt证书一定要存在指定的位置哦,也就是说要把生成的用户证书保留一份
     echo > 01 crlnumber 接着还要生成吊销证书的编号
     openssl crl -gencrl -out THISCA.crl 更新证书吊销列表

 

    注意!CA的私钥、证书名称在/etc/pki/tls/openssl.cnf里指定,一定要符合,否则报错

 

 

OpenSSH

用途:安全登陆服务器终端

 

   服务器端配置

        l  修改服务器配置文件,启用证书登陆

        l  配置文件位于/etc/ssh/sshd_conf,定位到# Authentication:

        l  PermitRootLogin no 安全起见,当然要禁用root登陆啦

        l  MaxAuthTries 6 验证尝试次数

        l  MaxSessions 10 验证超时时间

        l  RSAAuthentication yes 是否允许用户自行使用成对的密钥系统进行登入行为

        l  PubkeyAuthentication yes 同上

        l  AuthorizedKeysFile  .ssh/authorized_keys 密钥名称和存放位置

        l  service sshd restart 修改完配置要重启下服务

            如果想更安全一点,还可以指定监听地址ListenAddress 0.0.0.0,修改默认端口Port 22和链接协议Protocol 2

 

     客户端配置

         1.ssh-keygen生成密钥对(id_rsa,id_rsa.pub),过程中可以输入密码和存放位置,默认存放自身家目录.ssh

        加密算法和CA_第3张图片

 

      2.然后利用ssh-copy-id拷贝公钥到目标服务器对应的用户上

          ssh-copy-id -i /home/dx2/.ssh/id_rsa.pub [email protected] 这里如果不加-i指定公钥的话,默认是当前用
          户.ssh/id_rsa.pub。 服务器地址一般都要写上对应的用户名,如果不写默认是以当前用户的身份登录

 

        3.也可以使用scp命令把公钥复制到服务器上

     l  命令格式:
        push: scp [-rp] /path/from/somefile user@host:/path/to/somewhere
        pull: scp [-rp] user@host:/path/from/somefile /path/to/somewhere
      例:scp -p 22 /home/dx2/.ssh/id_rsa.pub 
[email protected]:/home/dx2/.ssh/authorized_keys 这里的
         authorized_key是配置文件里指定名称,复制后还要修改authorized_keys的权限为600,不然无法正常使用,所以还是
         用ssh-copy-id方便

         

        然后就可以在各种终端使用自己的私钥去登录服务器了

转自:http://dengxi.blog.51cto.com/4804263/1697674