SSL/TLS:

SSL:安全的套接字层;1.0 2.0 3.0

TLS:传输层安全;1.0 1.1 1.2 1.3

SSL会话过程四个阶段:

SSL Handshake Protocol:

第一阶段:ClientHello

1.协商所支持的协议的版本,如tls1.2;

2.客户端生成一个随机数,稍后用于生成会话密钥;

3.协商支持的加密算法,如:RSA,AES;

4.协商压缩算法;

第二阶段:ServerHello

1.确认此次通信所使用的协议的版本;

2.服务器端生产一个随机数,稍后用于生成会话密钥;

3.确认此次通信所使用的加密算法;

4.确认压缩算法;

第三阶段:

客户端验证服务器证书:

验证CA

验证证书的完整性;

验证证书持有者信息;

验证证书的有效期限;

验证证书的吊销列表;

确认证书无误之后,取出其中的公钥;发送下列信息到服务器:

一个随机数,用于服务器上的公钥加密;

编码格式的变更;

客户端握手结束通知;

第四阶段:

服务器收到客户端发送来的此次握手的第三阶段中的Pre-Master_key;计算生成本次会话所用到的会话密钥,向客户端发送相关信息:

编码格式的变更通知;

服务器端握手结束通知;

PKI:公钥基础设施,保证服务器向客户端发送的证书的可靠性;

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:CAB

威瑞信——verisign

GlobalSign

赛门铁克

AsiaCOM

国际标准化组织定义了证书的标准结构,X.509协议标准:

证书的内容:

证书的版本号;

证书的序列号;

签名算法ID;

证书拥有者的信息;

证书有效期;

主体名称;

主体公钥;

主体的唯一标识;

发证者的唯一标识;

发证者的数字签名;

扩展信息;

能够实现SSL/TLS安全协议的应用程序:

OpenSSL(SSL/TLS),gpg(PGP,TLS)

OpenSSL及其组件:

OpenSSL是一个开源实现SSL/TLS的标准;

libcrypto:实现加解密的算法的库;

libss:实现SSL功能的库;

openssl:多用途命令行工具;

openssl命令行工具:

众多的子命令实现各种安全加密功能;

标准命令:

dgst, enc, ca, req, genrsa, rand, crl, passwd, x509,...

消息摘要命令:

使用dgst子命令来调用,为dgst子命令提供加密算法(单向加密算法);

加密命令:

使用enc子命令来调用,为enc子命令提供加密算法(对称加密算法);

项目案例:

1.使用openssl加密:

对称加密: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 -des3 -a -salt -in /PATH/TO/SOME_FILE -out /PATH/TO/SOME_ENCRYPTED_FILE

~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.des3

解密示例:

~]# openssl enc -d -des3 -a -salt -in /PATH/TO/SOME_ENCRYPTED_FILE -out /PATH/TO/SOME_FILE

~]# openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab

单向加密:openssl dgst

openssl dgst -ciphername /PATH/TO/SOME_FILE

示例:

openssl dgst -md5 fstab

2.使用openssl生成随机数:

openssl rand命令:

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

openssl rand -base64|-hex LENGTH(bytes)

3.生成用户密码:

openssl passwd命令:

openssl passwd [-1] [-salt string]

~]# openssl passwd -1 -salt $(openssl rand -base64 5)

4.公钥加密算法:RSA,ELGamal;

openssl genrsa命令:生成RSA算法的私钥

openssl rsa命令:从私钥中提取RSA公钥

openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]

示例:

~]# (umask 077; openssl genrsa -out myp.key2 4096) 建议使用

~]# (umask 077; openssl genrsa 4096 > myp.key3)

openssl rsa

openssl rsa [-in filename] [-out filename] [-pubout]

示例:

openssl rsa -in myp.key2 -out mykey.pub

5.建立私有CA:(OpenCA)

1.创建CA所在主机的私钥文件;

2.生成自签证书;

3.为CA提供必要的目录级文件及文本格式的文件;

目录级文件:

/etc/pki/CA/certs

/etc/pki/CA/crl

/etc/pki/CA/newcerts

文本格式文件:

/etc/pki/CA/serial

创建serial文件的时候,需要给该文件提供一个初始序列号,一般01;

/etc/pki/CA/index.txt

CA的专有配置文件:/etc/pki/tls/openssl.cnf

CA公钥保存位置:/etc/pki/CA/cacert.pem

CA私钥保存位置:/etc/pki/CA/private/cakey.pem

创建私有CA的步骤:

1.创建CA的私钥文件:

~]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2.生成自签证书:

~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out /etc/pki/CA/cacert.pem -days 3653

-new:生成新证书签署请求;

-x509:生成自签证书,专用于私有CA的自签证书的颁发;

-key:指定CA的私钥文件的路径

-out:生成的自签证书所保存的路径

-days:设置证书有效期限;单位是天;

3.满足CA所必须的目录级文件和文本文件的布局:

~]# touch /etc/pki/CA/index.txt

~]# echo 01 > /etc/pki/CA/serial

SSL:https --> http over ssl

全栈HTTPS机制;

https实现方式:

1.在某台服务器上安装了httpd程序;

2.创建服务器的私钥文件:

~]# mkdir /etc/httpd/conf/ssl

~]# cd /etc/httpd/conf/ssl

ssl]# (umask 077 ; openssl genrsa -out /etc/httpd/conf/ssl/httpd.key 4096)

3.生成证书请求文件:

ssl]# openssl req -new -key /etc/httpd/conf/ssl/httpd.key -out /etc/httpd/conf/ssl/httpd.csr -days 3653

4.由CA签发证书:在CA所在的服务器上完成;

~]# openssl ca -in /tmp/csrs/httpd.csr -out /tmp/csrs/httpd.crt -days 365

5.在CA上查看证书内容:

~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial -subject

吊销证书:需要在CA上执行;

1.获取客户端证书相应的序列号:

~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial

2.吊销证书:

~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

注意:SERIAL应该换成对应证书的序列号;

3.生成吊销证书的吊销编号:第一次吊销证书的时候,必须做此步骤;

echo "SERIAL" > /etc/pki/CA/crlnumber

注意:SERIAL应该换成对应证书的序列号;

4.更新证书吊销列表:

~]# openssl ca -genctl -out /etc/pki/CA/ca.crl

使用gpg实现对称加密

对称加密file文件

gpg -c file

ls file.gpg

解密file

pgp -o file2 -d file.gpg

使用gpg工具实现公钥加密

在hostA主机上生成公钥/私钥对

gpg --gen-key

在hostA主机上查看公钥

gpg --list-keys

在hostA主机上导出公钥到link.pubkey

gpg -a --export -o link.pubkey

从hostA主机上复制公钥文件到需加密的B主机上

scp link.pubkey hostB:

在需加密数据的hostB主机上生成公钥/私钥对

gpg --list-keys

gpg --gen-key

注意:如果系统提醒熵池中随机数不够用,可以使用下列命令:

~]# rngd -r /dev/urandom

在hostB主机上导入公钥

gpg --import link.pubkey

gpg --list-keys

用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

gpg -e -r link.pubkey file

file file.gpg

复制加密文件到hostA主机

scp fstab.gpg hostA:

在hostA主机解密文件

gpg -d file.gpg gpg -o file -d file.gpg

删除公钥和私钥

gpg --delete-secret-keys qhdlink

gpg --delete-keys qhdlink

注意:应该先删私钥,再删公钥;

OpenSSH:

实施远程登录的服务器端应用程序;

什么是登录?

在分时系统中,允许多个用户同时使用一台计算机的资源,为了保证安全以及更方便的记录不用用户的操作行为,系统为每个用户建立一个逻辑身份,即用户的账户标识;为了对用户进行身份核实,还为用户指定了口令。用户在使用该系统之前需要输入这个逻辑标识以及口令,这个验证过程就叫"登录"。

远程登录:

Telnet:

C/S: 默认不允许管理员直接远程登录;

Client:telnet

Server:telnet-server

Socket Pair:23/TCP

安装telnet-server:本地光盘yum源中;

CentOS 6:关闭防火墙和SElinux

~]# chkconfig telnet on

~]# service xinetd start

CentOS 7:关闭防火墙和SElinux

~]# systemctl start telnet.socket

注意,telnet默认不允许root用户直接登录;

SSH: Secure SHell,安全的shell;

用于取代较早的非常不安全的telnet协议;

C/S:22/TCP

Client:OpenSSH(ssh,scp,sftp),Xshell,SecureCRT,sshsecureshellclient,putty

Server:OpenSSH(sshd), dropbear(dropbear)

SSH协议:

V1:不安全,禁用;

V2:当前安全的应用协议;

SSH提供的认证方式:

基于口令的认证;

基于密钥的认证;

用户提供一对儿密钥,私钥保存在客户端,公钥保存在远程服务器端某个用户的家目录下;

OpenSSH应用程序具体使用

Openssh的组成:

服务端程序:sshd,/etc/ssh/sshd_config

客户端程序:ssh,/etc/ssh/ssh_config;scp,sftp

客户端程序:

ssh命令:

ssh — OpenSSH SSH client (remote login program)

ssh [options]... [user@]hostname [command]

常用选项:

-l user:指定此次使用哪个用户进行远程登录;如果使用了此选项,则ssh命令中的主机名前面的用户名需要省略;

注意:如果没有使用-l选项指定用户,又没有在主机名前面加用户名,则ssh客户端程序默认使用本地主机当前登录的用户的用户名作为此次远程登录的用户名;

-p port:指明用于访问远程服务器的目标端口号;

-b bind_address:指明此次访问的服务器的固定源IP地址;

-X:支持X11转发;

-Y:支持受信任的X1转发;

ssh远程连接服务器时的配置选项非常复杂,这些选项都可以定义在ssh的配置文件中:/etc/ssh/ssh_config

其格式:

HOST pattern

OPTION1 VALUE

OPTION2 VALUE

...

基于密钥的认证机制:

用户提供一对儿密钥,私钥保留在客户端,公钥分发并保留至远程服务器端某个用户的家目录中;

1.创建密钥对儿:

ssh-keygen命令:

ssh-keygen — authentication key generation, management and conversion

用法:

ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]

常用选项:

-q:静默模式;

-b bits:指定创建的密钥的长度;

RSA:最少768bits,默认2048bits;

DSA:明确指定1024bits

ECDSA:256bits,384bits,521bits;

ED25519:忽略-b指定的长度;

-t type:指明公钥加密算法的类型

在ssh协议V2中可以使用:“dsa”, “ecdsa”, “ed25519”, or “rsa”

-f output_keyfile:指定生成的密钥文件的路径;

-P passphrase:指明私钥的加密密码;

ssh-copy-id命令:

ssh-copy-id — use locally available keys to authorise logins on a remote machine

用法:

ssh-copy-id [-i [identity_file]] [-p port] [user@]hostname

常用选项:

-i:指定要复制的公钥文件;

-p port:指定连接到的服务器端的端口;

常用的ssh密钥验证的操作过程:

1.生成密钥对

ssh-keygen -t rsa -P 'passphrase' -f /PATH/TO/KEY_PAIR

2.发送公钥到目标服务器某个用户的家目录:

ssh-copy-id -i /PATH/TO/PUBLIC_KEY user@HOSTNAME

3.远程登录:

ssh -l user HOSTNAME

ssh user@HOSTNAME

scp命令:基于ssh连接完成的复制命令;

scp - secure copy (remote file copy program)

两种使用情形:

推送:Push

scp [options]... SRC HOST:/PATH/TO/DEST

拉取:Pull

scp [options]... HOST:/PATH/FROM/SRC DEST

常用选项:

-r:递归复制,复制目录内容;

-p:保留源文件的权限信息;

-q:静默模式

-P port:指明远程主机ssh协议监听的端口;

sftp:

ftp over ssh;

ftp over ssl(ftps);

C/S架构

S:sftp-server,有sshd服务进程管理的一个子服务项目,是sshd的一个子系统;在CentOS系统中默认是启用的;

C:sftp命令

sftp [user@]HOSTNAME

sftp> help 获取帮助

ssh协议客户端工具:ssh,scp,sftp

ssh协议的服务器端工具:

sshd程序:/etc/ssh/sshd_config

格式:

配置指令 值

常用的指令:

Port 22:指明sshd服务要监听的端口号;一般在生成环境的服务器端,需要修改这个指令的值为非22号端口;

ListenAddress 0.0.0.0:指明sshd服务进程要监听的IP地址;建议监听某个特定的IP地址,以提高安全性;

Protocol 2:选择ssh协议的版本;

PermitRootLogin yes:是否允许使用root直接完成远程登录;在生产环境的服务器中,应该禁用此功能;

UseDNS yes:是否允许使用DNS反向解析主机名;建议关闭此功能;

AllowUsers user1 user2 ...:设置登录用户的白名单;

AllowGroups group1 group2 ...:设置组的白名单;

DenyUsers user1 user2 ...:设置登录用户的黑名单;

DenyGroups group1 group2 ...:设置组的黑名单;

注意:对于/etc/ssh/sshd_config配置文件做出修改之后,必须让sshd服务器进程重新读取该配置文件,才能使新配置生效;

# systemctl reload sshd.service

# service sshd reload

ssh服务的最佳实践方案:

1.不要使用默认的22号端口;

2.禁止使用sshv1;

3.设置可登录的白名单或黑名单;

4.设置空闲会话的超时时长;

5.利用防火墙来设置ssh访问安全策略和规则;

6.仅监听特定IP地址,不要设成0.0.0.0;

7.如果必须使用口令认证,则使用复杂密码;

8.建议最好使用基于密钥的认证;

9.禁止使用空密码;

10.禁止root用户直接远程登录;

11.限制ssh的访问频度和并发数;

12.做好日志,经常分析;

dropbear

ssh协议的另一种实现

轻量级的实现方案,多用于嵌入式环境;

dropbear的rpm包,在EPEL源中;

mirrors.sohu.com/fedora-epel/$releasever/$basearch

mirrors.aliyun.com

mirrors.163.com

mirrors.tsinghua.edu.cn

可以使用dropbear源代码包进行编译安装;

源代码包可以在https://matt.ucc.asn.au/dropbear/dropbear.html下载;

编译环境:

yum groupinstall "Development tools" "Server Platform Development"

yum install zlib-devel(可选)

如果选择了编译源代码的方式进行安装:

1.解压之后的目录中,有一个INSTALL的文件,查看该文件以获得安装方法

2.~]# ./configure

3.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert"

4.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert" install

启动dropbear:

dropbear -h

dropbearkey -h

获取相应的帮助信息;

1.创建保存密钥文件的目录:

~]# mkdir /etc/dropbear

2.创建对应密钥:

~]# 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

3.启动dropbear服务,并使其运行于前台;

~]# dropbear -p IP:PORT -F -E

选项含义:

-p IP:PORT:指定此次启动的dropbear服务进程监听的套接字;

-F:将dropbear服务进程运行于前台;

-E:将dropbear服务进程运行期间产生的信息从标准错误输出而不是写入到系统日志文件(syslog, /var/log/messages);

-w:禁止root用户直接登录到dropbear服务器;

客户端访问:

~]# ssh -p PORT user@host

~]# dbclient -p PORT user@host

DNS and Bind

BIND:Berkeley Internet Name Domain,伯克利互联网名称域;

名称域——名字空间:

倒置的树

根域(.)

顶级域(Top Level Domain,TLD)

组织域:com, org, edu, gov, mil, net, ...

info, cc, 中国, ...

地理域:cn, tw, hk, jp, iq, ...

反向域:in-addr.arpa

DNS的名称解析方式:

正向解析:名称 --> IP地址

反向解析:IP地址 --> 名称

注意:正向解析和反向解析所使用的名称非同一空间,非同一棵树;也就是非同一数据库;

DNS查询类型:

递归查询

迭代查询

DNS服务器的分类:

至少负责一个域的数据库:

主DNS服务器

辅助DNS服务器(从DNS服务器)

不负责任何域的数据库:

缓存DNS服务器(存根DNS服务器)

一次完整的DNS查询请求流程:

Client --> hosts --> Local Cache --> first DNS(recursive) -->

--> 服务器本地缓存或本地数据库中有结果,直接响应客户端;

--> ROOT(iteration) --> TLD_DNS_SERVER --> 二级域DNS_SERVER --> ... --> ns.xxx. --> 解析结果;

查询得到的解析答案:

权威答案:由直接负责管理对应信息的DNS服务器返回的答案;

非权威答案:由指定的服务器从缓存中或者利用迭代的方式查询到的答案;

还有两种可能:

肯定答案:能够按照客户端请求完成正确的名称解析的答案;

否定答案:无法安装客户端的请求完成正确的名称解析所返回的答案;即客户端所请求的解析内容,不存在或无法找到映射资源;

转载于:https://blog.51cto.com/12453570/1979963

OpenSSH dropbear相关推荐

  1. openssh 虚拟机linux_Alpine Linux虚拟机安装过程

    Alpine Linux介绍 Alpine Linux就是一个很适合运行在虚拟机或Docker中的Linux系统,它有以下优点: 轻量.没有自带很多软件,安装完虚拟磁盘才150M. 快速.没有图形界面 ...

  2. 嵌入式linux安装dropbear

    Dropbear是由Matt Johnston所开发的Secure Shell软件(包括服务器端与客户端).期望在存储器与运算能力有限的情况下取代OpenSSH,Dropbear特别用于"嵌 ...

  3. Android下常见终端模拟器和SSH客户端感受及几个Tips

    之前用Linux Deploy 部署了Kali Linux .让我这阵子拿到平板有一半的时间是在用终端模拟器(Terminal Emulator)连接. 安卓的终端模拟器,对我来说有3个比较重要的用途 ...

  4. Android安卓拖拉机版Docker

    Android安卓拖拉机版Docker 为什么说是拖拉机,因为性能真的狠拖拉机- 各种嵌套安装才能垃起docker termux → qemu → alpine linux → docker 一:安装 ...

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

    下面介绍的是Linux的加密与解密.OpenSSL(SSL/TLS).OpenSSH(ssh).dropbear. 一.数据的加密与解密 1.进程间通信基础 (1).进程间通信方式 同一主机间进程间的 ...

  6. Dropbear替代Openssh-ssh client使用

    替代纯属无奈之举,本来安装了一个Manjaro Linux桌面版本尝鲜,但在使用其ssh远程访问其他服务器和网络设备时发现失败报错,重装了openssh,问题依然存在 选择Dropbear替代方案 D ...

  7. openwrt 替换Dropbear by openssh-server

    转自: http://wiki.openwrt.org/inbox/replacingdropbearbyopensshserver Replacing Dropbear by openssh-ser ...

  8. CentOS6下ssh简介及openssh的应用

    1. ssh及openssl简介: SSH: ssh是secure shell,是用来通过网络来提供安全的远程访问的工具,C/S结构,在ssh之前,最早的远程计算机连接工具是telnet telnet ...

  9. 编译内核,busybox,dropbear组装linux小系统

    应用程序使用以下软件 busybox提供命令环境 dropbear提供ssh服务实现远程管理. 查看本物理机的硬件,来确认编译内核时选择相应的驱动.硬件信息获取方法: cat /proc/cpuinf ...

最新文章

  1. 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法
  2. [2017.02.23] Java8 函数式编程
  3. 剑指offer22:栈的压入、弹出序列
  4. MySQL自增长主键探究
  5. openlayers5之完整文档v5.1.3.zip下载
  6. 手机版本高于xcode,xcode的快速升级
  7. 装好了ubuntu,w2k却无法启动了,:(
  8. pythonrecord 51 net_python与c#的交互模块pythonnet
  9. 工作琐事太多怎么办_东莞夫妻感情不合怎么办 东莞专业离婚咨询
  10. EXCEL根据条件随机内插若干行及对应数据
  11. Postfix+Dovecot+LAMP+Extmail搭建web邮件系统(二)
  12. LaTeX 技巧 802:国内期刊 CCT 模板编译经验
  13. Python 刷访问量
  14. DICOM协议学习笔记(二)
  15. 港科夜闻|罗康锦教授获委任为香港科大工学院院长
  16. 一个域名可以对应多个ip地址的案例
  17. 维天运通(路歌)招股书失效:毛利率波动明显,冲刺上市遇挫?
  18. 数据结构实验——实验二链表实验
  19. 洛谷P1088 火星人
  20. 计算机时代杂志,计算机时代杂志

热门文章

  1. 【计几】闵可夫斯基和 二分判断点是否在凸包内
  2. 多个DHL快递物流怎么同时查询最方便
  3. Netscape浏览器
  4. 堃博医疗创上市以来新低:年内跌幅超八成,市值累计蒸发90亿港元
  5. HDC.Cloud 2021|华为云数据使服务DAYU,加速数据价值释放
  6. 浅谈算法和数据结构: 哈希表
  7. 微信企业邮箱服务器配置错误,解决腾讯企业邮箱smtp.exmail.qq.com发邮件错误
  8. 拿命 3 天肝出来的计算机考研数据结构与算法复习笔记(超详细教程,更新中)
  9. realloc函数UAF利用|攻防世界pwn进阶区supermarket
  10. 零基础学商业插画难吗?新手画插画必备技巧指南