zoukankan      html  css  js  c++  java
  • 加密与安全传输

    一、加密算法

    1、对称加密

    概念:加密和解密使用同一个秘钥

    算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等

    优点:效率高;将数据分割成固定大小的块,逐个进行加密

    缺点:每一个通信就需要一个秘钥;秘钥传递不安全;无法确定数据来源

    2、非对称加密

    公钥与私钥:公钥是公开给所有人的;私钥是只有自己知道;通过私钥可以推算出公钥,但是通过私钥无法退出公钥;使用公钥加密必须使用私钥解密,或者使用私钥加密必须使用公钥解密;公私钥必须成对出现

    算法:RSA、DSA、ELGamal

    优缺点:可以实现数字签名来验证数据来源;可以安全的交换对称秘钥;可以实现时间加密,但是对应大的数据解密时效率太低,适合加密少量数据

    3、单向散列(hash)

    特性:

    1)雪崩效应:数据不同,摘要一定大不同

    2)单向:不可反推数据

    3)摘要长度固定大小

    算法:md5:128、sha1:160、sha224、sha256、sha384、sha512

    功能:用来验证数据的完整性

    4、秘钥交换算法(DH)

    1)A和B协商生成公开的整数a,大素数p

    2)A:生成隐私数据 :x(x<p),计算得出 a^x%p,发送给B;B:生成隐私数据 :y(y<p),计算得出 a^y%p,发送给A

    3)A:计算得出 [(a^y%p)^x] %p = a^xy%p,生成为密钥;B:计算得出 [(a^x%p)^y] %p = a^xy%p,生成为密钥

    5、在安全通信过程中:

    爱丽丝:

    1)原数据通过hash算法得出一个摘要;

    2)用爱丽丝的私钥加密摘要;

    3)将加密的摘要和原数据一块使用对称秘钥加密;

    4)再用鲍勃的公钥将对称秘钥加密;

    5)密文数据发送————>

    鲍勃:

    1)<————接受密文数据;

    2)使用鲍勃的私钥解密对称秘钥;

    3)使用对称秘钥解密原数据和加密后的摘要;

    4)使用爱丽丝的公钥解密摘要;

    5)计算原数据的hash摘要并和解密后的摘要进行比较,从而确定原始数据的完整性。

    二、传输层安全协议TLS

    TLSTransport Layer Security及其前身安全套接层SSL是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。

    特性:可以保证数据传输的机密性、完整性,可实现认证,重放保护(重放:由中间人捕获到加密的数据再次传输到目的服务器,有可能会影响账户的安全)等功能。

    TLS协议分俩个阶段:握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。

    1. Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
    2. ChangeCipherSpec 协议:一条消息表明握手协议已经完成
    3. Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,
    4. atal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
    5. Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
    6. HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

    三、CA和证书

    数字证书认证机构(Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

    PKI:公开密钥基础建设,包括签证机构(CA)、注册机构(RA)、证书吊销列表(CRL)以及证书存取库。

    X.509:定义了证书的结构以及认证协议标准,包括版本号、序列号、签名算法、颁发者、有效期限、主体名称、主体公钥、CRL分发点、扩展信息、发行者签名等信息

    ca证书颁发机构分根ca和子ca,根ca的证书为自签证书,然后再为子ca颁发证书;用户只要信任了根ca的证书则就是信任了子ca颁发的证书。

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

    ####################################################################
    [ ca ]
    default_ca      = CA_default            #默认CA,在一台服务器可以搭建多个CA
    [ CA_default ]                #默认CA的配置
    dir             = /etc/pki/CA           #工作目录
    certs           = $dir/certs            #存放证书
    crl_dir         = $dir/crl              #存放证书吊销列表
    database        = $dir/index.txt        #数据库索引文件,需要手动创建
    new_certs_dir   = $dir/newcerts         #新证书的路径
    certificate     = $dir/cacert.pem       #CA的证书文件
    serial          = $dir/serial           #下一个要颁发的证书序列号,16进制
    crlnumber       = $dir/crlnumber        #下一个要吊销的证书序列号
    crl             = $dir/crl.pem          #证书吊销列表
    private_key     = $dir/private/cakey.pem#CA的私钥文件
    RANDFILE        = $dir/private/.rand    #生成私钥需要用到的随机数文件
    default_days = 365 #默认颁发证书的有效期 default_crl_days= 30 #30天发布一次证书吊销列表 default_md = sha256 # preserve = no # policy = policy_match      #策略匹配,定义客户端和服务端申请证书时的信息匹配策略 [ policy_match ] countryName = match      #必须匹配 stateOrProvinceName = match organizationName = match organizationalUnitName = optional   #不要求必须匹配 commonName = supplied    #必须提供 emailAddress = optional

    示例:搭建一个私有CA

    服务端搭建:

    1、生成CA的私钥

    # (umask 066; 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 3650
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:beijing
    Locality Name (eg, city) [Default City]:beijing
    Organization Name (eg, company) [Default Company Ltd]:test
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:ca.test.com 
    Email Address []:
    • -new: 生成新证书签署请求
    • -x509: 专用于CA生成自签证书
    • -key: 生成请求时用到的私钥文件
    • -days n:证书的有效期限
    • -out /PATH/TO/SOMECERTFILE: 证书的保存路径

    3、创建必要的文件

    # touch /etc/pki/CA/index.txt
    # echo 01 >/etc/pki/CA/serial
    # openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates]  查看证书信息

    客户端生成注册申请请求:

    1、生成私钥

    # (umask 077; openssl genrsa -out app.key 1024)

    2、生成签署请求

    # openssl req -new -key app.key -out app.csr
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:beijing
    Locality Name (eg, city) [Default City]:beijing
    Organization Name (eg, company) [Default Company Ltd]:test
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:app.test.com
    Email Address []:
    A challenge password []:
    An optional company name []:

    3、将签署请求发送给CA

    # scp app.csr 192.168.0.7:/etc/pki/CA/

    服务器端签署:

    1、签署颁发

    # openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100

    2、将签署后的证书发回客户端

    # scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root

    CA吊销证书的管理

    生成吊销列表
    [root@centos7 CA]# echo 01 >/etc/pki/CA/crlnumber
    [root@centos7 CA]# openssl ca -gencrl -out crl.pem
    
    查看吊销列表
    [root@centos7 CA]# openssl crl -in crl.pem -noout -text
    
    查看证书状态
    [root@centos7 CA]# cat index.txt
    V(正常证书)       180826054533Z           01      unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
    [root@centos7 CA]# openssl ca -status 01
    Using configuration from /etc/pki/tls/openssl.cnf
    01=Valid (V)(正常证书)
    
    吊销证书
    [root@centos7 CA]# openssl ca -revoke newcerts/01.pem 
    [root@centos7 CA]# cat index.txt
    R  (已被吊销)     180826054533Z   180518060712Z   01      unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com

    四、管理工具

    md5sum、sha1sum、sha224sum、sha256sum 、sha384sum 、sha512sum:计算散列值

    • --check:检查md5值是否正确

    gpg:GunPG

    • -c file:加密文件
    • -o file -d file.gpg:解密文件
    • --gen-key:生成非对称秘钥
    • --list-keys:查看已有公钥
    • -e -r keyname file:使用指定公钥加密文件
    • --import filename.pubkey:导入公钥
    • -a --export -o filename.pubkey:导出公钥
    • --delete-secret-keys keyname:删除私钥
    • --delete-keys keyname:删除公钥
    # rngd -r /dev/urandom  #提供随机数来生成秘钥

    openssl多用途的工具集

    组件:

    openssl: 多用途的命令行工具,包openssl

    libcrypto: 加密算法库,包openssl-libs

    libssl:加密模块应用库,实现了ssl及tls,包nss

    子命令:

    enc

    # openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher  使用-des3加密算法对称加密testfile文件
    # openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile 解密
    • -e 加密
    • -d 解密
    • -des3 | -des | -des 加密算法
    • -a 表示使用base64编码
    • 编码:base64 === a-z A-Z 0-9 / + 64个字符
    • -salt 加盐

    dgst  -md5 | -hex  单向加密

    passwd -1 -salt  生成MD5加密密码

    rand -base64 | -hex # 生成随机数

    genrsa:

    # (umask 066; openssl genrsa -out test.key -des 2048)  生成私钥并且使用des加密

    rsa:

    # openssl rsa -in test.key -out test2.key  将加密的私钥解密
    # openssl rsa -in test2.key -pubout -out test2.key.pub  从私钥中提取对应的公钥

    个人学习笔记  记录于22:16

  • 相关阅读:
    Thinkphp3.2 cms之角色开发
    说几个你知道的设计模式?
    9种实现点击一个链接弹出一个小窗口的代码
    分享自己作为一个程序员的找工作经历
    网页设置锚点
    博客园网摘地址
    PHP面试总结
    简单的10秒倒计时
    PHP测试题目
    关键字搜索内容总结
  • 原文地址:https://www.cnblogs.com/L-dongf/p/9047846.html
Copyright © 2011-2022 走看看