加密与解密OpenSSL(SSL/TLS)OpenSSH(ssh)dropbear

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密与解密OpenSSL(SSL/TLS)OpenSSH(ssh)dropbear相关的知识,希望对你有一定的参考价值。

下面介绍的是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]... [[email protected]]hostname [command]

  常用选项:

  -l user -----------指明登录的用户

  -p port ----------指明远程服务器目标端口

  -b bind_address -------------指明服务器ip地址

  -X -------------------X11转发

  -Y --------------受信任的X1转发

 客户端访问:

  # ssh -p PORT [email protected]

  # dbclient -p PORT [email protected]


(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] [[email protected]]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 [email protected] ----------发送公钥到目标服务器

  # ssh -l user HOSTNAME ------------远程登录(# ssh [email protected]


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的主要内容,如果未能解决你的问题,请参考以下文章

Linux_22 加密和解密及OpenSSL

使用 openssl 生成证书

Netty入门--使用SSL/TLS加密Netty程序

如何在没有 SSL/TLS 的情况下加密数据客户端并在另一个客户端解密?

使用OpenSSL创建CA和申请证书

SSL/TLS通信