加密与解密、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,运行于前台

时间: 2024-08-07 04:31:20

加密与解密、OpenSSL(SSL/TLS)、OpenSSH(ssh)、dropbear的相关文章

开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵盖了在Ubuntu系统上利用OpenSSL和Libevent如何创建一个支持SSL的服务端.文章中介绍的知识点并未全部在SMSS项目中实现,因此笔者会列出所有相关源码以方便读者查阅.提醒:由于知识点较多,分享涵盖了多种语言.预计的学习时间可能会大于3小时,为了保证读者能有良好的学习体验,继续前请先安

如何通过抓包查看客户端https连接中ssl/tls加密所采用的秘钥位数

在https传输的过程中,我们底层的加密传输协议是ssl/tls.这里所使用的加密算法的秘钥位数(也就是服务器所使用的https证书的位数)可能是1024/2048或者更高,目前1024位的证书已经被证实是不安全的,需要逐步替换掉. 那么如何通过抓包来查看当前连接所采用的实际加密位数呢(注意,这里是抓包查看,如果是网页我们用浏览器直接访问,点击那个小锁然后进行一系列的操作就可以查看到连接信息了,如果有兴趣查看以下链接内容:http://www.wosign.com/FAQ/how_to_chec

HTTPS详解二:SSL / TLS 工作原理和详细握手过程

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTPS 和 HTTP的区别 显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transp

加密、解密的原理及Openssl创建CA和ssh的基础应用

加密.解密的原理及Openssl创建CA和ssh的基础应用 随着互联网的不断发展和技术的不断成熟,在互联网上传输文件不在安全,在需要传送重要的数据时就必须加密处理. 密码算法分为三种:分别是对称加密,公钥加密,单向加密:以及需要对加密算法的认证,叫做认证协议.下面为大家概述对称加密,公钥加密,单向加密及认证协议 对称加密: 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性

linux基础学习第二十三天linux安全和加密之SSL\TLS协议、CA、openssl

内容: 1.通信加密类型及算法 2.TLS/SSL协议的引入及其通信过程 3.CA.数字签名的引入 4.一个安全的数据通信交换过程 5.openssl工具的使用 6.自制私有根CA过程 一.通信加密类型及算法 数据加密通信的重要性不言而喻,美国NIST,为了保证计算机的安全,提出了几个要求: (1).数据要有保密性:数据保密性和隐私性:确保信息不被别人获取,个人存储的信息不能被别人收集到: (2).完整性:包括数据完整性和系统完整性:数据完整性确保数据和程序只能以特定权限的进行授权和改变,只能授

系统安全之数据的加密和解密、CA的介绍、SSL或TLS协议简介及握手过程

网络通信需要安全                所谓的网络通信就是进程与进程之间的通信                        然而进程的通信一般可以分成两类:1.同一主机之间的进程通信                                                                              2.不同主机之间的进程通信                                                              

加密、解密,以及OpenSSL建立私有CA

概述: 理论部分主要介绍了: 对称加密.非对称加密.单向加密.密钥交换.CA.PKI 操作部分主要有: 对称加密.非对称加密.单向加密的实现,已经openssl常用功能,生成密码.生成随机数已经使用openssl创建私有CA 系统环境说明: [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.6 (Final) [[email protected] ~]# uname -rm 2.6.32-504.el6.x86_64

加密和解密技术基础与OpenSSL

加密和解密技术基础与OpenSSL 加密和解密技术基础(01) 1.了解Linux  service  and  securityOpenSSL:为网络通信提供安全及数据完整性的一种安全协议 2.一般都是C/S通信,此种通信客户端有什么特性?服务端有什么特性呢?(1)两台主机上的通信方式?主机通信实际是进程间通信.通信方式:socket (套接字)ip:port          客户端cip:port<-->服务器端 scip:port(2)如何让客户知道自己的主机和端口呢?把某些众所周知的

加密、解密 &nbsp; 以及OpenSSL建立私有CA

加密.解密,以及OpenSSL建立私有CA 加密技术是互联网最常用的安全保密手段,其利用技术手段把重要的数据加密后传送,到达目的地后再用相同或不同的手段进行解密. 加密技术包括两个元素:算法和密钥 常用的加密技术:对称加密.非对称加密.单向加密 以上几种加密技术各有千秋,经常组合起来使用 1.对称加密 加密和解密使用同一个密钥,将明文分隔成固定大小的块,逐个进行加密: 常见算法:DES  3DES  Twofish  IDEA  IDEA  CAST5  RC6 Blowfish 2.非对称加密