下面介绍的是Linux的加密与解密、OpenSSL(SSL/TLS)、OpenSSH(ssh)、dropbear。
一、数据的加密与解密
1、进程间通信基础
(1)、进程间通信方式
同一主机间进程间的通信方式:signal、shm、semaphore、message queue(MQ、RabbitMQ)。
不同主机进程间的通信方式:socket-pair。
(2)、套接字 -------IP:PORT
套接字Socket:IP:PORT
套接字,是进程的地址标识,一个套接字就是指特定主机上的特定应用程序。
三种套接字:流套接字(基于TCP协议)、数据报套接字(基于UDP协议)、裸套接字(基于底层协议)。
(3)、守护进程
对于服务器,对套接字有监听机制,即进程的监听模式。我们就把具有这种监听模式的进程,称为守护进程,也叫服务进程。其套接字是在启动之前,向内核注册得到的,即分配了端口号。对于端口号,分为了以下4类:0(默认没有被使用)、1~1023(固定的端口)、1024~49151(注册端口)、49152~65535(动态端口)。
2、数据加密、解密基础
数据安全的三个标志:机密性、完整性、可用性。
数据安全的三类威胁:威胁机密性(窃听、嗅探、扫描、信息量分析)、威胁完整性(更改、伪装、重放、否认)、威胁可用性(拒绝服务)。
数据安全的保护方法:加密解密技术。
3、加密算法
传统的两种加密方法,有替代、置换;现代的加密方法,有块加密算法。
常用的四种加密算法:对称加密算法、公钥加密算法、单向加密算法、密钥交换算法。
(1)、对称加密算法
特点:加密和解密使用同一秘钥、加密的速度较快、块加密。
缺点:对称加密,最大的缺点就是秘钥分发困难,容易泄露,其次,就是加密和解密保存的秘钥过多。
其 6 种主流算法为:DES(56bit密钥,64bit块)、AES(128bit)、Blowfish、Twofish、IDEA、RC4/RC6。
(2)、公钥加密算法
特点:秘钥由公钥和私钥组成、秘钥长度长(安全性高)。私钥,通过特定的工具创建生成(secret key/private key);公钥,从私钥中提取生成(public key)。
缺点:公钥加密,秘钥较长,加密数据的时候,消耗的系统资源和时间都较多,很少用来加密大批量数据,常用来加密小数据,如秘钥等。
用途:数字签名(身份确认)、秘钥交换、数据加密。
其 3 种主流算法为:RSA、DSA、ELgamal。
(3)、单向加密算法
特点:定长输出、雪崩效应。单向加密算法,只能加密,不能解密;可从数据中提取密码指纹。
功能:保证数据的完整性。
其 2 种主流算法为:md5(128bit定长输出)、sha系列。
(4)、秘钥交换算法 -----IKE
秘钥交换算法,用公钥进行加密,一对主机共有4个秘钥,有两个共有的公钥,每个主机还有一个单独的私钥。每个主机用两个公钥加自己的私钥进行数据加密,解密时,解密主机再加入自己的私钥,进行解密。即,只有4个秘钥齐全才能进行解密操作,加强了数据的可靠性。
四种加密算法的联合应用示例:
1)、通信双方互相交换证书,并到信任的CA(三方)进行证书验证;
2)、发送方使用某种对称加密算法对数据进行【加密】;
对加密后的数据使用【单向加密】计算其【特征值】;
发送方再用自己的【私钥加密此特征值】,以证明数据来源的可靠;
发送方使用接收方的证书加密对称密钥。
3.接收方在收到数据之后,先使用自己的私钥解密对称密钥;
然后使用发送方的公钥解密特征值;
再利用相同的单向加密算法,重新计算加密数据的特征值。比较两个特征值,如果特征值一致,则表明数据完整;
再用解密出来的对称密钥解密出原始数据。
CA发挥作用的步骤:
1)、双方【交换证书】
2)、双方协商【加密算法】
3)、双方验证【证书真伪】 ---------检查以下四个方面
用CA的公钥解密证书中CA的【签名】,能解密说明证书来源可靠。
用通用的加密算法加密证书,取得【特征值】;与解密出来的特征值比较,如果相同,说明证书完整性可靠。
检查证书的【有效期】是否在合法时间范围,如果过期则证书不被认可。
检查证书的【主体名称】和此次通信的目标是否能够对应。
二、OpenSSL(SSL/TLS)
1、ssl/tsl简介
ssl ---------叫做:安全的套接字层
tsl ---------叫做:传输层安全(采用分层设计)
ssl/tsl【握手】的四个阶段:
(1)、客户端向服务器索要证书,并验证证书。(版本、算法等)
-----------【客户端】生成一个随机数,用于生成会话秘钥。
(2)、双方协商生成会话秘钥。(版本、算法等)
-----------【服务器】生成一个随机数,用于生成会话秘钥
(3)、进行加密通信(已生成会话秘钥)
-----------【客户端】发送给服务器端一个随机数,用于服务器上公钥加密。
(4)、互相通告握手结束
-----------服务器端收到【客户端】发来的一个随机数,用于发送数据并结束。
2、openssl及其组件 --------------实现加密功能
openssl是一个开源实现ssl/tsl的标准。openssl是一个命令行工具,其使用多个子命令来实现加密解密的功能,其下的子命令有:dgst、enc、ca、req、genrsa、rand、crl、passwd、x509等。
dgst ---------使用单向加密算法
enc ----------使用对称加密算法
(1)、openssl enc 命令 ---------对称加密、解密
格式:openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]
常用选项:
-ciphername -------算法名称(des3、des、aes、rc4)
-e ----------加密
-d ----------解密
-a/-base64 ------------纯文本格式编码
-salt -------------盐随机
-in filename --------------加密的文件路径
-out filename -------------加密后的输出文件路径
# openssl enc -e -salt -in fatab -out fstab.des3 -des3 -a -----------加密
# openssl enc -d -in fstab.des3 -out fstab2 -des3 -a -----------解密
(2)、openssl dgst -----------单向加密(只能加密)
格式:openssl dgst -ciphername /PATH/TO/SOME_FILE
常用选项:
-ciphername ------------算法名称(des3、des、aes、rc4)
# openssl dgst -md5 fstab
(3)、openssl rand ------------生成随机数
格式:openssl rand [-out file] [-base64] [-hex] num
常用选项:
-base64 ---------纯文本格式
-hex ------------16进制
num ----------生成的随机数长度(单位:字节)
# openssl rand -base64 -hex 10
(4)、openssl passwd ------------生成用户密码
格式:openssl passwd [-1] [-salt string]
# openssl passwd -1 [-salt ‘openssl rand -base64 5’]
(5)、openssl genrsa -----------生成私钥
格式:openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [numbits]
# (umask 077;openssl genrsa -out myp.key 4096)
(6)、openssl rsa -----------生成公钥
格式:openssl rsa [-in filename] [-out filename] [-pubout]
# openssl rsa -in myp.key2 -out mykey.pub
(7)、openssl req ------------生成自签证书
格式:# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
常用选项:
-new ----------生成新证书签署请求
-x509 ----------生成自签证书,专用于私有CA的自签
-key ------------指定私钥路径
-out ------------自签证书保存路径
-days ------------证书有效期限(单位:天)
3、建立私有CA步骤
(1)、创建主机私钥,抽取公钥
(2)、服务器上生成自签证书
(3)、生成目录级文件、文本格式文件
三个【目录级】文件:cert、crl、newcerts。(/etc/pki/CA/cert /etc/pki/CA/crl /etc/pki/CA/newcerts)
两个【文本格式】文件:serial、index.txt。(/etc/pki/CA/serial /etc/pki/CA/index.txt)
专有配置文件:/etc/pki/tls/openssl.cnf
【公钥】保存位置:/etc/pki/CA/cacert.pem
【私钥】保存位置:/etc/pki/CA/private/cakey.pem
例:
# ( umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
# touch /etc/pki/CA/index.txt
# echo 01 > /etc/pki/CA/serial ----------创建serial文件时,需给定一个初始序列号,一般为01。
4、https 的实现步骤(生成证书):
#安装httpd程序
# mkdir /etc/httpd/conf/ssl
# cd /etc/httpd/conf/ssl
ssl]# (umask 077;openssl genrsa -out /etc/httpd/conf/ssl/http.key 4096) ---------创建私钥
ssl]# openssl req -new -key http.key -out httpd.csr -days 3653 --------生成自签证书
~]# openssl ca -in /tmp/csrs/httpd.csr -out /tmp/csrs/httpd.crt -days 365 ----------CA服务器签发证书
~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serila -subject ------查看证书
5、吊销证书步骤(在CA上执行):
~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serila ------获取客户端证书相应的序列号
~]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem --------吊销证书,注意相应的序列号
~]# echo 01 > /etc/pki/CA/crlnumber ----------生成吊销证书的吊销编号
~]# openssl ca -genctl -out /etc/pki/CA/ca.crl -----------更新证书吊销列表
三、OpenSSH(ssh)
1、openssh基础:
openssh 用于服务器端,远程登录。对于C/S架构,默认不允许管理员直接远程登录,在开启C/S服务之前,要先关闭防火墙和selinux。
CentOS 6开启C/S服务为:# chkconfig telenet on
# service xinetd start
CentOS 7开启C/S服务为:# systemctl start telnet.socket
2、ssh
ssh是安全的shell,当前使用的ssh协议是sshv2。ssh有两种认证方式,即基于口令、基于秘钥两种人认证方式。
openssh由两部分组成,即客户端(ssh)、服务器端(sshd)。
3、ssh客户端工具 --------------------------------- /etc/ssh/ssh_config
(1)、ssh命令 -------远程登录
格式:ssh [options]... [user@]hostname [command]
常用选项:
-l user -----------指明登录的用户
-p port ----------指明远程服务器目标端口
-b bind_address -------------指明服务器ip地址
-X -------------------X11转发
-Y --------------受信任的X1转发
客户端访问:
# ssh -p PORT user@host
# dbclient -p PORT user@host
(2)、ssh机制
ssh-keygen命令 ------------【创建秘钥对】
格式:ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
常用选项:
-q -----------静默模式
-b bits --------------密钥的长度(RSA、DSA、ECDSA、ED25519)
-t type --------------公钥加密算法类型(dsa、ecdsa、ed25519、rsa)
-f output_keyfile -------------生成密钥文件的路径
-P passphrase --------------私钥的加密密码
ssh-copy-id命令 -----------【复制秘钥】
格式:ssh-copy-id [-i [identity_file]] [-p port] [user@]hostname
常用选项:
-i ------------指定要复制的公钥文件
-p port ----------------服务器端的端口
scp命令 ----------------基于ssh连接完成【复制】
格式:scp [options]... SRC HOST:/PATH/TO/DEST ------------推送
scp [options]... HOST:/PATH/FROM/SRC DEST ----------拉取
常用选项:
-r ---------------递归复制
-p ---------------保留源文件的权限
-q ----------------静默模式
-P port -----------------指定监听端口
(3)、ssh秘钥验证步骤:
# ssh-keygen -t rsa -P ‘passphrase‘ -f /PATH/TO/KEY_PAIR ------------生成秘钥对
# ssh-copy-id -i /PATH/TO/PUBLIC_KEY user@HOSTNAME ----------发送公钥到目标服务器
# ssh -l user HOSTNAME ------------远程登录(# ssh user@HOSTNAME)
4、ssh的服务器端工具 -----------------------------------/etc/ssh/sshd_config
修改配置文件/etc/ssh/sshd_config后,必须读取配置文件,如下:
# systemctl reload sshd.service
# service sshd reload
四、dropbear -------------------用于嵌入式环境,实现ssh协议远程登录。
1、编译安装dropbear步骤:
(1)、解压
(2)、# ./configure
(3)、# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert"
(4)、# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert" install
2、dropbear命令
格式:# dropbear -p IP:PORT -F -E
常用选项:
-p IP:PORT -----------------启动dropbear服务进程监听的套接字
-F ----------------dropbear服务进程运行在前台
-E ---------------进程消息从标准错误输出,不写入日志
-w ----------------禁止root直接登录dropbear服务器
3、启动dropbear步骤:
# dropbear -h
# mkdir /etc/dropbear -------------秘钥文件目录
# dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key --------------创建秘钥
# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
# dropbearkey -t ecdsa -s 521 -f /etc/dropbear/dropbear_ecdsa_host_key
# dropbear -p IP:PORT -F -E ------------启动dropbear,运行于前台
加密与解密、OpenSSL(SSL/TLS)、OpenSSH(ssh)、dropbear
原文地址:http://12496428.blog.51cto.com/12486428/1965687