1. 概念

1.1. SSL(Secure Sockets Layer安全层套接字)/TLS(Transport Layer Security传输层套接字)。

  最常见的应用是在网站安全方面,用于http数据传输的加密。

1.2. 安全的目标:保密性(confidentiality),完整性(integrity),可用性(availability)

1.3. 攻击的类型:

    威胁保密性的攻击:窃听、通信量分析;
    威胁完整性的攻击:更改、伪装、重放、否认
    威胁可用性的攻击:拒绝服务(DoS)

1.4. 解决方案:技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)

  加密和解密:
    传统加密方法:替代加密方法、置换加密方法
    现代加密方法:现代块加密方法

  服务:
    认证机制
    访问控制机制

1.5. 在linux系统上的实现:OpenSSL(ssl), GPG(pgp)

1.6. 加密算法和协议:

1.6.1. 对称加密:加密和解密使用同一个密钥;
      DES:Data Encryption Standard;
      3DES:Triple DES;
      AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
      Blowfish
      Twofish
      IDEA
      RC6
      CAST5

  特性:
    加密、解密使用同一个密钥;
    将原始数据分割成为固定大小的块,逐个进行加密;

  缺陷:
    密钥过多;
    密钥分发困难;

1.6.2. 公钥加密:密钥分为公钥与私钥
    公钥:从私钥中提取产生;可公开给所有人;pubkey
    私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
    特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
    用途:
      数字签名:主要在于让接收方确认发送方的身份;
      密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
      数据加密

    算法:RSA, DSA, ELGamal
      DSS: Digital Signature Standard
      DSA:Digital Signature Algorithm

1.6.3. 单向加密:即提出数据指纹;只能加密,不能解密;
    特性:定长输出、雪崩效应;
    功能:完整性;
    算法:
      md5:Message Digest 5, 128bits
      sha1:Secure Hash Algorithm 1, 160bits
      sha224, sha256, sha384, sha512

1.6.4. 密钥交换: IKE(Internet Key Exchange)
    公钥加密算法:RSA

    DH(Deffie-Hellman),ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH)

1.7. PKI:Public Key Infrastructure

  公钥基础设施:
    签证机构:CA
    注册机构:RA
    证书吊销列表:CRL
    证书存取库:

  X.509v3:定义了证书的结构以及认证协议标准
    版本号
    序列号
    签名算法ID
    发行者名称
    有效期限
    主体名称
    主体公钥
    发行者的惟一标识
    主体的惟一标识
    扩展
    发行者的签名

1.8. 设计模式:分层设计

    最底层:基础算法原语的实现,aes, rsa, md5
    向上一层:各种算法的实现;
    再向上一层:组合算法实现的半成品;
    用各种组件拼装而成的各种成品密码学协议软件;

2. 传输过程:

2.1 SSL会话主要三步:
    客户端向服务器端索要并验正证书;
    双方协商生成“会话密钥”;
    双方采用“会话密钥”进行加密通信;

2.2. SSL Handshake Protocol:

  第一阶段:ClientHello:
    支持的协议版本,比如tls 1.2;
    客户端生成一个随机数,稍后用户生成“会话密钥”
    支持的加密算法,比如AES、3DES、RSA;
    支持的压缩算法;

  第二阶段:ServerHello
    确认使用的加密通信协议版本,比如tls 1.2;
    服务器端生成一个随机数,稍后用于生成“会话密钥”
    确认使用的加密方法;
    服务器证书;

  第三阶段:
    验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
    发送以下信息给服务器端:
      一个随机数;
      编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      客户端握手结束通知;

  第四阶段:
    收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
    向客户端发送如下信息:
      编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      服务端握手结束通知;

3. OpenSSL

3.1. 组件:libcrypto, libssl(主要由开发者使用),openssl(多用途命令行工具)

3.2. opensll命令:

  从多子命令,分为三类:
    标准命令
    消息摘要命令(dgst子命令)
    加密命令(enc子命令)

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

3.2.1. 对称加密:
    工具:openssl enc, gpg
    支持的算法:3des, aes, blowfish, towfish

    enc命令:
      加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
      解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext

3.2.2. 单向加密:
    工具:openssl dgst, md5sum, sha1sum, sha224sum, ...

    dgst命令:
      ~]# openssl dgst -md5 /PATH/TO/SOMEFILE

3.2.3. 生成用户密码:
    工具:passwd, openssl passwd

      ~]# openssl passwd -1 -salt SALT

3.2.4. 生成随机数:
    工具:openssl rand

      ~]# openssl rand -hex NUM
      ~]# openssl rand -base NUM

3.2.5. 公钥加密:
    加密解密:
      算法:RSA,ELGamal
      工具:openssl rsautl, gpg
    数字签名:
      算法:RSA, DSA, ELGamal
      工具:
    密钥交换:
      算法:DH

3.2.6. 生成密钥:
    生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
    提出公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout

4. CA:公共信任的CA,私有CA;

4.1. 公共CA:买买买
4.2. 建立私有CA工具:openssl/OpenCA

4.2.1. openssl命令:

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

4.2.1.1. 构建私有CA:
  在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;

  步骤:
    (1) 生成私钥;
      ~]# (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 3655
        -new:生成新证书签署请求;
        -x509:生成自签格式证书,专用于创建私有CA时;
        -key:生成请求时用到的私有文件路径;
        -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
        -days:证书的有效时长,单位是day;
    (3) 为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
      ~]# cd /etc/httpd/ssl
      ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
    (2) 生成证书签署请求
      ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
    (3) 将请求通过可靠方式发送给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

4.2.1.2. 吊销证书:
  步骤:
    (1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
      ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
    (2) CA主机吊销证书
      先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

    吊销:
      # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
      其中的SERIAL要换成证书真正的序列号;

    (3) 生成吊销证书的吊销编号(第一次吊销证书时执行)
      # echo 01 > /etc/pki/CA/crlnumber

    (4) 更新证书吊销列表
      # openssl ca -gencrl -out thisca.crl

      查看crl文件:
        # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

【Linux】【Service】【OpenSSL】原理及实现的更多相关文章

  1. [转载]Linux Bond的原理及其不足

    本文转自http://www.yunweipai.com/archives/1969.html 支持原创.尊重原创,分享知识! 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做 ...

  2. Linux Bond的原理及其不足

    http://www.tektea.com/archives/1969.html. 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故 ...

  3. Linux下OpenSSL的安装与使用

    Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS ...

  4. linux下的X server:linux图形界面原理

    linux下的X server:linux图形界面原理   Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开 ...

  5. Linux Kbuild工作原理分析(以DVSDK生成PowerVR显卡内核模块为例)

    一.引文 前篇博文<Makefile之Linux内核模块的Makefile写法分析>,介绍了Linux编译生成内核驱动模块的Makefile的写法,但最近在DVSDK下使用Linux2.6 ...

  6. [转帖]linux下的X server:linux图形界面原理

    linux下的X server:linux图形界面原理 https://www.cnblogs.com/liangxiaofeng/p/5034912.html linux下的X server:lin ...

  7. Linux 文件删除原理_009

    ***了解Linux文件删除原理先了解一下文件inode索引节点,每个文件在Linux系统里都有唯一的索引节点(身份证号) inode.如果文件存在硬链接,那这个文件和这个文件的硬链接的inode是相 ...

  8. Java网络编程和NIO详解6:Linux epoll实现原理详解

    Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...

  9. 转 Linux内存管理原理

    Linux内存管理原理 在用户态,内核态逻辑地址专指下文说的线性偏移前的地址Linux内核虚拟3.伙伴算法和slab分配器 16个页面RAM因为最大连续内存大小为16个页面 页面最多16个页面,所以1 ...

  10. ARM Linux系统调用的原理

    转载自:http://blog.csdn.net/hongjiujing/article/details/6831192 ARM Linux系统调用的原理 操作系统为在用户态运行的进程与硬件设备进行交 ...

随机推荐

  1. Linux mem 2.4 Buddy 内存管理机制

    文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...

  2. 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

    开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...

  3. C# 计算农历日期方法(2021版)

    解决问题 旧版农历获取方法报错,会有 到 2021年 m数组越界了 if (LunarData[m] < 4095) 此方法可以解决 主体代码 public static class China ...

  4. vue+node+mongondb实战之mongodb登陆操作

    页面搭建基本完成,只是样式还没有美化,由于采取的前后端分离开发,所有页面逻辑全部由vue来负责,后台采用express框架只用来提供 接口,注册就是讲数据存入数据库,比较简单,而登陆碰了一些小问题,发 ...

  5. Qt Creator 源码学习笔记02,认识框架结构

    阅读本文大概需要 6 分钟 在上一篇大概了解了关于Qt Creator 基础知识后[1],本篇先学习下框架基本结构,这样能够清晰的知道这个框架当中包含哪些文件.文件夹.工程文件,这些文件分别代表什么意 ...

  6. [atAGC054F]Decrement

    令$a_{i}$和$b_{i}$分别为$A_{i}$和$B_{i}$减少的值,考虑判定$\{a_{i}\},\{b_{i}\}$能否被得到 结论:$\{a_{i}\},\{b_{i}\}$能否被得到当 ...

  7. [bzoj1145]图腾

    如果将关系用一个数字来表示(相等表示不确定),那么题目相当于要计算$1324-1243-1432$=$(1323-1423)-(1233-1234)-(1322-1423)$=$1323+1234-( ...

  8. Elasticsearch分布式搜索和数据分析引擎-ElasticStack(上)v7.14.0

    Elasticsearch概述 **本人博客网站 **IT小神 www.itxiaoshen.com Elasticsearch官网地址 https://www.elastic.co/cn/elast ...

  9. Ubuntu 18.04 WMware 编译 AOSP android-7.1.2_r33 笔记

    0 前言 问:都快2022年了,为什么还要编译 android 7.1.2 ? 答:某脱壳机特征修改或移植到其他机型(此处省略1000字...) 笔者在编译之前并没有加入专有二进制文件(后续加入了再补 ...

  10. Linux基础——常用命令

    find /grep /xargs /sort /uniq /tr /cut /paste /sed /awk......待续...... 1.find 名字查找: find . -name file ...