加载中…
个人资料
胖仔
胖仔
  • 博客等级:
  • 博客积分:0
  • 博客访问:531
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

OpenSSL

(2016-06-29 22:13:25)
标签:

杂谈

OpenSSL

传输层协议:TCP,UDP,SCTP
port:进程地址;进程向内核注册使用某端口(独占);

同一主机上的进程间通信:IPC,message queue,shm,semerphor
不同主机上的进程间通信:socket
cip:port <--> sip:port
   
    监听模式:LISTEN(ip:port)
   
SSL:Secure Socket Layer 安全套接字层
http --> ssl --> https

安全的目标:
保密性:confidentiality
完整性:integrity
可用性:availability

攻击类型:
威胁保密性的攻击:窃听,通信分析;
威胁完整性的攻击:更改,伪装,重放,否认;
威胁到可用性的攻击:拒绝服务(DoS,Denial of Service);

解决方案:
技术:加密和解密,服务(用于抵御攻击的服务,为了实现上述安全目标而特地设计的安全服务);

加密和解密:
    传统加密方法:替代加密方法,置换加密方法;
    现代加密方法:现代块加密方法;
   
服务:
    认证机制;
    访问控制机制;
   
密钥算法和协议:
    对称加密
    非对称加密(公钥加密)
    单向加密
    认证协议

linux系统:OpenSSL(ssl),GPG(pgp协议的实现)

OpenSSL由三部分组成:
    libencrypto,加密算法库;
    libssl,加密模块应用库;用来实现ssl,tls;
    openssl命令行工具:多用途命令行工具;
   
加密算法和协议:

    对称加密:
        加密和解密使用同一个密钥;(数据加密)
        DES:Data Encryption Standard
        3DES:Triple DES
        AES:Advanced Encryption Standard;(128bits,192bits,256bits,384bits)
        Blowfish
        Twofish
        IDEA
        RC6
        CAST5
       
        特性:
            1、加密,解密使用同一个密钥;
            2、将原始数据分割成为固定大小的块,逐个进行加密;
       
        缺陷:
            1、密钥过多;
            2、密钥分发困难;
           
    公钥加密:
        密钥分为公钥与私钥;
        公钥:从私钥中提取产生;可公开给所有人;pubkey;
        私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
       
        特点:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然;
       
        用途:
            数字签名:主要用于让接收方确认发送方的身份;(身份认证,加密特征码)
            密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;(加密密钥)
            数据加密(加密性能低,比对称加密慢3个数量级)
           
        算法:RSA(加密,数字签名),DSA(数字签名),ELGamal
            DSS:Digital Signature Standard
            DSA:Digital Signature Algorithm
                DSS和DSA实际上是指同一种东西;
           
    单向加密:提取数据指纹(特征码);只能加密,不能解密;
        特性:定长输出、雪崩效应;
        功能:完整性校验;
        算法:
            md5:Message Digest 5, 128bits(定长输出)
            sha1:Secure Hash Algorithm 1,160bits(定长输出)
                sha224,sha256,sha384,sha512
               
    密钥交换:IKE(Internet Key Exchange)
        公钥加密
        DH(Deffie-Hellman)
        ECDH(椭圆曲线DH)
        ECDHE(临时椭圆曲线DH)
       
PKI:Public Key Infrastructure
    公钥基础设施:
        签证机构:CA(Certificate Authority)
        注册机构:RA
        证书吊销列表:CRL
        证书存取库:颁发了哪些证书;
       
    X.509v3:定义了证书的结构以及认证协议标准;
        版本号
        序列号
        签名算法ID
        发行者名称
        有效期限
        主体名称
        主体公钥
        发行者的唯一标识
        主体的唯一标识
        扩展
        发行者的签名
   
SSL:Secure Socket Layer;安全套接字层
    Netscape:1994
    V1.0,V2.0,V3.0
   
    SSL会话主要三步:
        客户端向服务端索要并验证证书;
        双方协商生成"会话密钥";
        双方采用"会话密钥"进行加密通信;
       
TLS:Transport Layer Security;传输层安全;(SSL的继承版本)
    IETF:1999
    V1.0,V1.1,V1.2
       
    分层设计:
        1、最底层:基础算法原语的实现,aes,rsa,md5;
        2、想上一层:各种算法的实现;
        3、再向上一层:组合算法实现的半成品;
        4、用各种组件拼装而成的各种成品密码学协议软件;
       
协议的开源实现:OpenSSL
       
    libencrypto,libssl主要由开发者使用;
    openssl:多用途的命令行工具;
       
    子命令分为三类:
        标准命令(ca,req,genrsa...)
        消息摘要命令(dgst子命令)
        加密命令(enc子命令)
       
对称加密:
    工具:opensslenc,gpg
    支持的算法:3des,aes,blowfish,twofish
   
    enc命令:(加密解密)
        #man enc  帮助
        #openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext  加密
        #openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext  解密
            -salt:加盐,默认参数;
            -e:encrypt,加密;
            -d:decrypt,解密;
            -a,-base64:base64 process the data.
            -in filename:指定输入的文件;
            -out filename:指定输出的文件;
       
    单向加密:
        工具:openssl dgst,md5sum,sha1sum...
       
        dgst命令:
            #openssl dgst -md5 file  计算文件特征码
            #md5sum file  同上
           
    公钥加密:
        加密解密:
            算法:RSA,ELGamal
            工具:openssl rsautl,gpg
        数字签名:
            算法:RSA,DSA,ELGamal
        密钥交换
            算法:DH
       
        生成密钥:
            #(umask 066; openssl genrsa -out /tmp/mykey.private 2048)  生成私钥,小括号表示用子shell执行;
            #openssl rsa -in /tmp/mykey.private -pubout  提出公钥;
           
生成密码:
    #whatis passwd
    #man sslpasswd
    #openssl passwd -1 -salt SALT
        -1:使用md5算法;
        -salt string:指定盐;
           
生成随机数:
    #whatis rand
    #man sslrand
    #openssl rand -hex NUM
    #openssl rand -base64 NUM

linux系统上的随机数生成器:

    熵池:在操作系统上有一个叫做熵池的地方,用来保存硬件中断产生的随机数(每一次硬件中断都会产生一个随机数);           
    /dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
    /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;
        伪随机数不安全;
       
        熵池中的随机数来源:
            磁盘IO中断时间间隔;
            键盘鼠标IO中断时间间隔;
           
CA(Certificate Authority):证书授权
    公共信任CA;
    私有CA;
   
    建立私有CA:
        openssl
        OpenCA
       
    openssl命令:
   
        配置文件:/etc/pki/tls/openssl.cnf
       
            [ CA_default ]
            dir                 = /etc/pki/CA               # Where everything is kept
            certs               = $dir/certs                # Where the issued certs are kept
            crl_dir                 = $dir/crl                  # Where the issued crl are kept
            database            = $dir/index.txt            # database index file.
            new_certs_dir       = $dir/newcerts             # default place for new certs.
            certificate         = $dir/cacert.pem           # The CA certificate
            serial              = $dir/serial               # The current serial number
            crlnumber           = $dir/crlnumber            # the current crl number
            crl                 = $dir/crl.pem              # The current CRL
            private_key         = $dir/private/cakey.pem    # The private key
           
            [ new_oids ]
            default_days        = 365                       # how long to certify for
            default_crl_days    = 30                        # how long before next CRL
            default_md          = sha256                    # use SHA-256 by default

            [ policy_match ]
            countryName             = match
            stateOrProvinceName     = match
            organizationName        = match
           
            [ req ]
            default_bits            = 2048
            default_md              = sha256
            default_keyfile         = privkey.pem
       
    构建私有CA:
        在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;               
            (1)生成私钥:
                私钥保存在/etc/pki/CA/private/目录下;
                #(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
                    -new:生成新证书签署请求;
                    -x509:生成自签证书;专用于创建私有CA;
                    -key filename:指定生成请求时用到的私钥;
                    -out filename:输出文件保存位置;
                    -days:自签证书的有效时长;单位是天;默认是30天;
            (3)为CA提供所需的目录及文件:
                #mkdir -p /etc/pki/CA/{certs,ctl,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 066; openssl genrsa -out httpd.key 2048)
        (2)生成证书签署请求(csr):   
            #openssl req -new -key httpd.key -out httpd.csr -days 365
        (3)将签署请求文件(csr)发送到CA主机上:   
            #scp httpd.csr root@172.16.100.100:/tmp
        (4)在CA主机上签署证书(crt):
            #openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
            国家名,省名,公司名必须与CA一致;其它可以不同;
            #cd /etc/pki/CA
            #cat index.txt
        (5)将签好的证书(crt)发送回原主机:   
            #scp /etc/pki/CA/certs/httpd.crt root@172.16.100.6:/etc/httpd/ssl
        (6)查看证书中的信息:   
            #openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
            #man x509
                -noout:不显示请求的加密算法版本;
                -subject:显示请求主体;
                -serial:显示证书的序列号;
                -issuer:显示颁发者的名字;
                -text:以text格式显示证书;
                -dates:显示证书的开始和到期时间;
                                       
    吊销证书:
        (1)获取客户端要吊销的证书的serial和subject:
            #openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
        (2)在CA主机上吊销证书:
            先对比提交的serial和subject信息与CA主机数据库index.txt中存储的信息是否一致;
            #openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
        (3)生成吊销证书的吊销编号:(第一次吊销证书时才需要执行)
            #echo 01 > /etc/pki/CA/crlnumber
        (4)更新证书吊销列表:
            #openssl ca -gencrl -out httpd.crl
        (5)查看crl文件:
            #openssl crl -in httpd.crl -noout -text
               

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
前一篇:Systemd
后一篇:OpenSSH
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇Systemd
    后一篇 >OpenSSH
      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有