0


OpenSSL

OpenSSL
一、概念类
传输层协议:TCP,UDP,SCTP
port:进程地址,进程向内核注册使用某端口(独占)
同一主机上的进程间通信:IPC,message queue,shm,semephor
不同主机上的进程间通信:socket(也可用于同一主机间通信),
socket=ip:port
cip:port -- sip:port,已建立连接的套结字都是一对socket
监听模式:listen(ip:port)
SSL:Secure Sockets Layer
http -> ssl ->https
安全的通信目标:
1.保密性:confidentiallity
2.完整性:integrity
3.可用性:availabilty
攻击类型:
威胁保密性攻击:窃听,通信量分析
威胁完整性攻击:更改,伪装,重放,否认
威胁可用性攻击:拒绝服务(DoS)
针对攻击的解决方案
技术:加密解密
服务:用于抵御攻击的服务,安全服务

加密和解密:
     传统加密方法:替代加密方法,置换加密方法
     现代加密方法:现代块加密方法,
 服务:
     认证机制
     访问控制机制

二、密钥算法和协议
密钥算法和协议
对称加密
公钥加密
单向加密
密钥交换
对称加密:加密和解密使用同一个密钥,(解决保密性问题)
DES(data encryption standard)des算法_百度百科 (baidu.com)
3DES:Triple DES,三轮DES加密
AES:Advanced Encryption Standard(密钥长度128bit,192bit,256bit)

特性:
1.加密解密使用同一个密钥
2.将原始数据分割为固定大小的块,逐个进行加密
缺陷:
1.密钥过多
2.密钥分发困难
公钥加密(非对称加密),身份认证,密钥交换,数据加密(比对称加密慢3个数量级,10的3次幂)
密钥成对出现,密钥分为:公钥,私钥
公钥:可以公开给所有人,pubkey,公钥从私钥中提取产生
私钥:通过工具创建,使用者自己留存,必须保证其私密性,secret key,skey
特点:
用公钥加密的数据,只能使用与之配对的私钥解密,反之亦然
用途:
数字签名:主要用于接收方确认发送方身份,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名
密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
数据加密:通常不用于数据加密,效率低
点对点模型示例:client A, sever B
加密过程:
1. B将data1通过<单向加密>算法,提取特征码(如MD5),通过自己私钥对特征码进行加密(数字签名,用以完成身份认证),生成数字签名,附加在数据后,称为data2,保证发送方身份和数据完整性
2.B生成一次性<对称加密>密码,将data2通过对称加密对整段数据进行加密(保密性),称为data3
3.B将data3通过A的公钥对一次性对称加密密码进行加密(密钥交换),附加在数据后,成为data4(保证其保密性),发送给A

解密过程:

  1. A获取data4,先用自己的私钥对对称加密密码进行解密,获得data3+对称密码
  2. A用对称密码对data3解密,获得data2和MD5
  3. A用B公钥对特征码进行解密(身份认证),用MD5验证data1完整性

缺点:容易受到中间人攻击,进而需要CA
CA:保证通信双方能够拿到正确公钥的公信机构

算法:RSA,DSA,ELGamal
DSA:digital signature algorithm,仅能用于签名,而不能用于加解密
DSS:digital signature standard
RSA:即能签名也能用于加解密
单向加密:只能加密,不能解密,只能提取数据特征码md5等(保证数据完整性)
特点:
定长输出
雪崩效应(加密数据的微小改变,导致密码巨大变化)
功能:用于验证数据完整性
算法:
1.MD5:Message-Digest Algorithm 5,128bit信息摘要算法
2.sha1:Secure Hash Algorithm 1,160bit,安全散列算法
sha224,sha256,sha384,,sha512

            centos6,7用户密码加密:sha512

cenots5用户密码加密:md5
密钥交换:IKE :Internet key exchange互联网密钥交换协议
RSA(公钥加密)
DH:deffie-hellman(迪菲-赫尔曼)
优势在于让双方不用发密码就可以得到密码
模型:
A:p,g
B:p,g

                 A:x    
                     p^x%g==>B
                     A:(p^y%g)^x
                 B:y
                     p^y%g==>A
                     B:(p^x%g)^y
                 (p^y%g)^x = (p^x%g)^y
                 
                 (p^x%g)^y为密码
         ECDH:椭圆曲线DH
         ECDH:临时椭圆曲线DH
     
 三、实现

PKI: public key infrastructure,公钥基础设施
签证机构:CA(市公安机关)
注册机构:RA(派出所)
证书吊销列表:CRL
证书存取库:
互联网通信强依赖PKI

    X.509v3:定义了证书的结构以及认证协议标准
         版本号:用来区分X.509的不同版本号
         序列号:由CA给予每一个证书的分配唯一的数字型编号,当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中;这也是序列号唯一的原因。
         签名算法ID:用来指定用CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法,须向国际指明标准组织(如ISO)注册。
         发行者名称(认证机构):即发出该证书的机构唯一的CA的x.500名字;
         有效期限:证书有效的时间包括两个日期:证书开始生效期和证书失效的日期和时间。在所指定的这两个时间之间有效;
         主体名称:证书持有人的姓名、服务处所等信息;
         主体公钥:包括被证明有效的公钥值和加上使用这个公钥的方法名称; 
         发行者唯一标示
         主体的唯一标识
         扩展
         发行者签名:以确保这个证书在发放之后没有被撰改过;
 
     CA使用模型:
         Clinet C,Server S
             C获取S证书,验证证书:
             用CA的公钥去解密CA签名,能解密说明证书来源可靠
             用同样的加密算法去加密证书取得特征码,和解密证书特征码比较,说明完整性可靠
             检查证书有效期限
             验证主体名称和通信人是否一致
             检查证书是否被吊销

    SSL:secure socket layer
         安全套接层是Netscape公司率先采用的网络安全协议
         v1.0(1994),v2.0,v3.0
     TLS:transport layer security
         安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性
         IETF研发:1999
         v1.0,v1.1,v1.2,v1.3
         我们统称的SSL,实际是指SSL或TLS

    TLS分层设计:
         1.最底层:基础算法原语实现aes,rsa,md5
         2.向上一层:各种算法实现
         3.向上一层:组合算法实现的半成品
         4.用各种组件拼装而成的各种成品密码密码学协议软件

    协议开源实现:openssl

四、SSL handshake
OpenSSL由三部分组成:

  1. libencrpt库:加密解密库
  2. libssl库,实现SSL功能,用于通信加密的库
  3. openssl:多用途命令行工具

SSL主要简化有3步:

  1. 客户端向服务器端索要并验证对方证书
  2. 双方协商生成会话密钥
    前两部合成握手阶段,handshake
  3. 双方采用会话密钥进行加密通信
  4. 断开

    --------ssl handshake 流程------------
    第一阶段:客户端通过浏览器向服务器发出加密通信请求:
    clinethello:
  5. 向服务器发送自己支持的协议版本,比如TLS1.2
  6. 客户端生成的随机数,稍后用于生成会话密钥
  7. 支持的加密算法,比如AES,3DES,RSA
  8. 支持的压缩算法
    第二阶段:服务器端回应客户端
    Serverhello:
  9. 确认使用的通信加密协议版本,比如TLS1.2
  10. 服务器端生成一个随即数,稍后用于生成会要密钥
  11. 确认使用的加密算法
  12. 发送服务器证书;
  13. 索要客户端证书(如果需要)
    第三阶段:客户端收到服务器端的回应
  14. 验证服务器证书(发证机构,证书签名,证书完整性,证书持有者,证书有效期,吊销列表等等),确认无误后,取出服务器公钥
  15. 发送以下信息给服务器端:
    a) 一个随机数(第三个随即数),用服务器公钥对这个随机数加密
    b) 编码变更通知(随后信息,用双方商定的加密算法进行发送)
    c) 客户端握手结束通知
    第四阶段:服务器回应
  16. 收到客户端发来的第三个随机数pre-master-key,计算生成本次会话所用的“会话密钥”
  17. 向客户端发送如下信息:
    a) 编码变更通知,表示随后的信息都将用双方商定的加密算法和密钥发送
    b) 服务器握手结束通知

---------ssl handshake-----------------

五、OpenSSL
组件:
Libcrypto,libssl主要由开发者使用
openssl:多用途命令行工具

openssl命令分类:
     standard commands:标准命令
     message digest:消息摘要命令
     cipher commands:加密命令
  ![](https://img-blog.csdnimg.cn/4e32790e11124795a3079013ff0ad455.png)

标准命令:enc,ca,req,genrsa

对称加密,使用openssl完成对称加密:
     工具:openssl enc
     算法:3des,aes,blowfish

    enc命令:
         enc - symmetric cipher routines
         openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P][-bufsize number] [-nopad] [-debug] [-none] [-engine id]
         
         -e加密,-d解密,-a(-base64)文本加密
         
         实例:
             加密:
         openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
             解密:
         openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

单向加密:
     工具:openssl dgst,md5sum,sha1sum,sha224sum
     dgst:
         提取摘要
         openssl dgst -md5 fstab
         openssl dgst -md5 -out fstab.md5 fstab
         验证摘要:
         

生成用户密码的命令:
工具:passwd, openssl passwd
openssl passwd:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

         openssl passwd -1 -salt 123456
         -1(一)标示MD5加密,-salt不变,密文不变
 生成随即数,salt
         工具:openssl rand
         openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
         
         openssl rand -base64 10
                     L4JQf3hy3RdPtQ==
                     使用时需要删除==
         openssl rand -hex 10
                     f858abb49c1b72e5188d
         
         openssl passwd -1 -salt $(openssl rand -hex 4)
         $1$7d20e521$fp7jFdPa8IRTqjx1FbKHL/

公钥加密:
     三种功能:
         加密解密:
                 算法:rsa,elgamal
                 工具:openssl rsautl,gpg
         数字签名
                 算法:rsa, dsa, elgamal
                 工具:openssl rsautl,gpg
         密钥交换
                 算法:dh
     生成密钥对
  1. 生成私钥
    openssl genrsa [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

openssl genrsa -out ./mykey3.private 1024
openssl genrsa 1024 > mykey.private
openssl genrsa 1024

修改为仅自己能读能写
(umask 077; openssl genrsa -out mykey4.private 1024)
使用()表示启用子shell启动进程,主进程不受影响

  1. 提取公钥
    openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

openssl rsa -in mykey.private -pubout -out mykey.pub

  1. linux系统上的随机数生成器:
    a) /dev/random:仅从熵池中返回随机数,随机数用尽,阻塞
    b) /dev/urandom:从熵池中返回随机数,随即数用尽,会利用软件生成伪随即数,非阻塞
    伪随即数不安全,熵池:内核在内存中维护的一个空间,空间内存储大量随机数,
    熵池中的随机数来源:
    硬盘IO中断时间间隔
    键盘IO中断时间间隔
    如果随机数用尽,可以拷贝大数据到硬盘,产生大量IO

CA:
分为两类:
公共信任的CA,
私有CA

    建立私有CA:
     openssl
     OpenCA(图形界面工具)

    openssl命令:
     其配置文件/etc/pki/tls/openssl.cnf

构建私有CA:在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需的目录及文件即可
 步骤:
  1. 生成私钥,默认要求生成在/etc/pki/CA/private/
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
  2. 生成自签证书,要配置在/etc/pki/CA/cacert.pem
    req - PKCS#10 certificate request and certificate generating utility.
    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
    -new 生成新证书签署请求
    -x509 生成自签格式证书,专用于创建私有CA时
    -key 生成请求时用到的私有文件路径
    -days 证书有效时长
    -out 输出路径
    1. 为CA提供所需的目录及文件
      mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
      touch /etc/pki/CA/{serial,index.txt}
      echo 01 > /etc/pki/CA/serial
 某用到证书安全通信的服务器,需要向CA请求签署证书:
     步骤:以httpd为例
  1. 用到证书的主机生成私钥
    mkdir /etc/httpd/ssl
    (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
    cd /etc/httpd/ssl

  2. 生成证书签署请求
    openssl req -new -key httpd.key -out httpd.csr -days 365

  3. 将请求通过可靠方式发送给CA
    a) 把httpd.csr拷贝给CA
    cp httpd.csr /tmp/
    ------------以上在请求主机作,以下在CA主机---------------

  4. 在CA主机签署证书
    openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
    查看证书信息
    openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

serial=01
subject= /C=CN/ST=Liaoning/O=tianlang/OU=Ops/CN=k8s-node-02
5. CA给客户提供认证
cp certs/httpd.crt /etc/httpd/ssl/

吊销证书:
     步骤:
  1. 客户端获取要证书吊销的serial
    openssl x509 -in certs/httpd.crt -noout -serial -subject
  2. CA主机吊销证书
    先根据客户提交的serial和subject信息,对比其与本机index.txt中信息是否一致
    吊销:
    openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    其中serial.pem要换成证书真正的序列号
    3.生成吊销证书的吊销编号(第一次吊销证书执行)
    echo 01>/etc/pki/CA/crlnumber
    4.更新证书吊销列表
    openssl ca -gencrl -out thisca.crl
    查看crl文件
    openssl crl -in /path -noout -text

OpenSSH 和 OpenSSL 并不是直系亲属,顶多算有共同志向的兄弟!
它们是由不同的团队开发,有不同的目的,但是都开放源码,为安全通信提供支持。
一、OpenSSH
OpenSSH 是使用 SSH 协议进行远程登录的连接工具。 它加密所有通信讯息以消除窃听、连接劫持和其他攻击。 此外,OpenSSH 提供了大量的安全隧道功能、多种身份验证方法和复杂的配置选项。
OpenSSH 包含的组件如下:

(1)ssh

OpenSSH 远程登录客户端,作为 rlogin 和 Telnet 的替代方案。

(2)scp

OpenSSH 安全文件复制,作为 rcp 的替代方案,将文件复制到其他电脑上。

(3)sftp

OpenSSH 安全文件传输,类似于 scp。

(4)sshd

OpenSSH 守护进程。

(5)ssh-keygen

OpenSSH 身份验证密钥实用程序,产生RSA或ECDSA密钥,用来认证用。

(6)ssh-agent

OpenSSH 身份验证代理,用于帮助用户不需要每次都要输入密钥密码的工具。

(7)ssh-add

向 OpenSSH 身份验证代理添加私钥身份,用于帮助用户不需要每次都要输入密钥密码的工具。

(8)ssh-keyscan

从服务器收集 SSH 公钥,并记录公钥。

在类 Unix 系统中的远程登录就采用了 SSH 协议,只有安装了相应软件包才能实现远程登录。
二、OpenSSL
OpenSSL 是一个开源的软件库,使用包含了众多加解密算法,用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的强大、商业级和功能齐全的工具包。
主要库是以 C 语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。

标签: 网络 安全 ssl

本文转载自: https://blog.csdn.net/u010230019/article/details/127736167
版权归原作者 壹只菜鸟 所有, 如有侵权,请联系我们删除。

“OpenSSL”的评论:

还没有评论