Linux学习之路-OpenSSL和OpenSSH

OpenSSL和OpenSSH

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

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

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

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

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

单向加密
特点,定长输出:加密输出的结果长度都是一样。雪崩效应:原始数据只要发生一点微小改变就会导致结果巨大变化。不可逆:只能对数据进行加密,没有办法对加密以后的数据进行解密还原。通常用于文件或数据的完整性检验或用户密码保存。例如/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 连接)
        (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 握手结束,且可以发送加密的应用程序数据。

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

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在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也将围绕着这五大系统来着手构建。

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

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

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

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

应用接口(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文件

2.提取fstab的特征码

 

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进行生成密码串,手动输入密码后即生成

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的密码

用OpenSSL建立私有CA

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

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/pkiCA/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.conf里指定,一定要符合,否则报错

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

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 [email protected]:/path/to/somewhere
        pull: scp [-rp] [email protected]:/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方便

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

时间: 2024-10-29 19:13:30

Linux学习之路-OpenSSL和OpenSSH的相关文章

linux学习之路之创建私钥CA及使用CA为客户端颁发证书

创建CA(Certificate Authority) CA的储存格式主要有2种:x509和pkcs12 x509是目前最主流的CA储存格式,在x509格式的证书中,储存的内容主要有: 证书的公钥和使用期限 证书的合法拥有着 证书该如何被使用 CA的信息 CA签名的校验码 默认情况下,TCP/IP模型和OSI模型,并没有实现数据的加密,而要实现数据的加密需要使用TLS/SSL协议,TLS和SSL在有些Linux版本上实现的机制是相同的,因此在这里我们之介绍SSL协议 SSL(Secure Soc

linux学习之路之ssh协议

SSH协议 SSH英文全称Secure SShell,是一种安全的协议,也是用于远程登入的. SSH相比telenet而言,具有更高的安全性,使用telent远处登入某台主机,存在着以下两个隐患: 1.用户认证是明文的 2.数据传输也是明文的 因此,处于数据安全考虑,使用SSH来远处登入更安全. SSH有2个版本,SSHv1和SSHv2,SSH1由于无法抵挡中间人攻击,因此,现在很少使用SSHv1版了.所以使用更多的还是SSHv2版,毕竟它要安全多了. SSH是工作在TCP层,端口号是22:te

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

linux学习之路之LVM的快照功能

我们知道LVM可以弹性的调整文件系统的大小,其实LVM除了可以调整文件系统的大小之外,还有另一个功能就是系统快照. 所谓系统快照就是将某一时刻文件系统中的信息记录到快照区中,这里的某一时刻指的是在原始数据被改变的那一瞬间,原始数据会移到快照区里.而其他没有改变的数据,快照区和文件系统共享.所以刚建立快照时快照区内容和文件系统的内容一样. 由于我们知道只有改变的数据才会移动到快照区,因此快照区中保存的内容比较少. 快照区的原理图如下: 那么如何建立快照区呢? 使用lvcreate -s命令来创建快

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就

linux学习之路之vim编辑器的使用

本章将介绍vim编辑器的使用 vim编辑器是vi编辑器的增强版 vim是一种全屏的编辑器,是一种模式化的编辑器,之所以称为模式化的编辑器,因为vim有多种模式. 接下来将介绍vim主要的三种模式: 编辑模式(也叫命令模式):在该模式下你可以完成字符串跳转,字符串删除,翻屏操作等操作 输入模式:在该模式下输入的任何字符都会保存在该文件中,作为文件的一部分 末行模式:在该模式下,可以实现字符串搜索,字符串替换等操作 vim编辑器的三种模式之间的相互转换 模式转换: 编辑模式-->输入模式 i:在当前

linux学习之路之文本的查找---find命令的使用

文本的查找可以使用两种方式来实现,即使用locate命令来查找和find命令来查找 那么这两种方式有什么区别呢? locate:是一种非实时查找,所谓非实时查找就是查找的不够实际,不够精确.因为locate查找是在 系统文件数据库中进行的,而数据库默认是一天更新一次,也就是说你查找的文件再数据库 更新之前查找的话,有可能找不到文件,因为那时数据库还没有去读取硬盘上的文件,所以 有些文件没有写入到数据库中. 可以收到更新数据库,使用命令updatedb 因为不上在硬盘上读取,因此速度快 locat

linux学习之路之sed命令使用

本章主要介绍sed的命令使用 sed(Stream Editor)是一种流编辑器,或者叫做行编辑器,以行为单位进行编辑处理,而后续会介绍的vi编辑器是一种全屏编辑器. sed的工作原理: 逐行读取文件中的每一行,并将其放在内存空间中,在对内存空间中的数据进行处理,将处理后的结果打印到屏幕上.而这种内存空间也叫做模式空间. 所谓模式空间:就是将放在内存空间的数据根据模式来匹配,匹配成功的数据进行相应的编辑处理,将处理后的数据打印到屏幕上去. 说明:sed命令默认将文件中所有的行打印到屏幕上去. s

linux学习之路之目录管理和文件管理

我们知道linux文件系统是一个树型结构,在最上层是'/'目录,根目录的下面就是其他目录,而这些目录下面又可以有多个子目录,这样一层一层的就形成一个树型结构图.那是不是我们查找某一个文件必须要从根目录开始往下查找的呢?当然不是,在这里我将会介绍两种路径方式:相对路径和绝对路径. 什么是相对路径和绝对路径? 绝对路径:就是从'/'根目录开始往下一级一级的查找,直到目的所经过的线路. 相对路径:就是相对当前位置而言来找到目的地所经过的线路. 目录的创建 mkdir:用于创建目录 语法格式:mkdir