openssl之openssl实现加密解密及CA与密码基础

openssl
提问的智慧

passwd:
   加密方式:
       对称加密、公钥加密、单向加密
    加密、解密
    明文:plaintext,cleartext -->密文 -->

    对称加密:
       加密算法+口令
          明文 --> 密文

          字典攻击
          加密方,解密方使用同一个口令
          DES(56bits):数据加密标准
          3DES
          AES(128bits):高级加密标准
          Blowfish
          Twofisha
          IDEA
          RC6
          CAST5
          Serpent
          特性:
          1.加密/解密使用统一口令
          2.将原文分割成固定大小的数据块,对这些块进行加密
            ECB,CBC

          1.口令传输
          2.密钥太多

        密钥交换:
        用户认证:
        数据完整性:

   密钥交换(IKE:Inernet Key Exchange):DH算法

   非对称加密
      加密算法:RSA,EIGmal,DSA
      1.密钥交换
      2.用户身份认证
    单向加密:
     抽取数据特征码:
       MD5,SHA1,SHA512,CRC-32(循环冗余校验码)
      1.完整性,

      消息认证算法:MAC(Message Authenntication Codes)
        CBC-MAC
        HMAC

        雪崩效应
        定长输出:


 PKI:Pubile key Infrastucture 公钥基础设施

 openssl gpg

 openssl:套件,开源程序
     libcrypto:通用功能的加密库
     libssl:用于实现TLX/SSL的功能
     openssl:多功能命令工具
         生成密钥,创建数字证书,手动加密解密数据
 加密解密技术常用的功能及算法:
   对称加密:
     工具:gpg openssl enc
     加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
     解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher  -out 文件

   单向加密:
     特性:One-Way
           Collision-free:
     算法
      md5:128bits
      sha1:160bits
      sha512:512bits
     工具:sha1sum,md5sum,openssl dgst
      openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
   MAC:信息摘要码,单向加密的延伸应用
       应用:用于实现在网络通信中保证所传输的数据完整性
       机制:
           CBC-MAC
           HMAC:使用md5和sha1算法
   用户认证:
       工具:passwd openssl passwd
 
    公钥加密:公钥加密,私钥解密
       密钥对:
          公钥:pkey
          私钥:skey

       算法:RSA,EIGamal

       工具:gpg openssl rsautl

    数字签名:私钥加密,公钥解密
       算法:RSA,EIGamal,DSA

       DSA:Digital Signature Algorithm
       DSS: Digital Signature standard
    密钥交换:IKE
       算法:DH(Diffie-Hellman),公钥加密

    数字证书:
    第三方机构使用一种安全的方式把公钥分发出去
       证书格式:x509,pkcs家族
         x509格式:
           公钥和有效期限:
           持有者的个人合法身份信息;(主机名)
           证书的使用方式
           CA的信息
           CA的数字签名

        谁给CA发证:自签署证书
   用户
    1.生成一对密钥
    2.把所需信息和公钥按固定格式制作成证书申请
   CA机构
    1.自签证书
    2.签署证书
    3.传给用户
    4.维护吊销列表
    OpenCA
用openssl实现是有CA
配置文件/etc/pki/tls/openssl.cnf
命令:
谁给CA发证:自签署证书

 用openssl实现私有CA:
   配置文件:/etc/pki/tls/openssl.cnf

  生成密钥对儿:
   # (umask 077; openssl genrsa -out private/cakey.pem 2048)
   
   如果想查看公钥:
    # openssl rsa -in private/cakey.pem -pubout -text -noout

  生成自签证书:
   # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

  创建需要的文件:
   # touch index.txt serial crlnumber


 用openssl实现证书申请:

  在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:
   # mkdir /etc/httpd/ssl
   # cd /etc/httpd/ssl
   # (umask 077; openssl genrsa -out httpd.key 1024)

  生成证书签署请求:
   # openssl req -new -key httpd.key -out httpd.csr

  将请求文件发往CA;

 CA签署证书:
  签署:
   # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

  将证书传回请求者

 吊销证书:
  # openssl ca -revoke /path/to/somefile.crt


第5次博客,加密、解密、openssl的基本应用及CA的实现过程


speed 测试当前系统上的加密算法的性能
version: 版本
s_client ssl/tls client program 测试连接性的
rand:用来生成伪随机数字
   openssl rand -hex #

openssl:私有CA
  证书格式
         公钥和有效期限:
         持有者的个人合法身份信息;(主机名)
         证书的使用方式
         CA的信息
         CA的数字签名


对称加密:数据私密性
公钥加密:密钥交换(对方的公钥)、数据加密(对方的公钥)、身份认证(自己的私钥)
单向加密:hash码,only-way hash
openssl补充材料:

  openssl中有如下后缀名的文件
  .key格式:私有的密钥
  .crt格式:证书文件,certificate的缩写
  .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
  .crl格式:证书吊销列表,Certificate Revocation List的缩写
  .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
  
  常用证书协议
  x509v3: IETF的证书标准
  x.500:目录的标准
  SCEP:  简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
  PKCS#7:  是封装数据的标准,可以放置证书和一些请求信息
  PKCS#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
  PKCS#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

 

ssl:网景公司开发
 Secure Scocket Layer
  安全的套接字层

TLS:Transport Layer Security
    安全的传输层

远程登录:
 telnet

telnet服务:明文传输
   监听tcp协议的23号端口
   ss -tan |grep 23

   禁止管理员直接登陆
      使用普通用户登录。而后su到管理员

ssh:Secure SHell
 监听tcp协议的22号端口
 /etc/services 解析库,进程<->端口
   ssh文本协议:字符通信

 sshv1,sshv2
    由于sshv1是居于CRC-32做MAC,因此,不安全,建议勿用
    sshv2 基于双发主机协商选择最安全的MAC实现机制
       加密机制和MAC机制是双方协商选定
       基于DH实现密钥交换,基于RSA或DAS实现身份认证
       客户端通过检查服务端的主机密钥来判断是否与其进一步通信

 OpenSSH(C/S)
   Server:监听tcp22
   Client:程序
 windows客户端:xmanager(xshell)、SecureCRT、putty、sshshellcilent

 openssh客户端组件:
    ssh
       ssh Username@HOST [command]
       ssh -l Username HOST [command]
          -p port:指定要连入端口

    ssh认证机制:
       基于口令
       基于密钥
          客户端在本地生成一对密钥
          客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
       配置过程:
         1.生成密钥对,客户端
            ssh-key -t rsa
             生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
          文件中
          2.复制密钥至远程主机:
             ssh-copy-id -i 公钥文件 登陆用户@远程ip地址
    scp:类cp命令,基于ssh协议跨主机复制
       scp SRC1 SRC2 .... DEST
       分两种情况:
         1.源文件在本机,目标为远程
         scp /path/to/somefile ....  Username@HOST:/path/to/somewhere
         2.源文件在远程,目标在本机
          scp Username@HOST:/path/to/somefile /path/to/somewhere

         -r当源文件为目录,以实现递归复制
         -p:保留源文件的复制及修改时间戳,以及权限
         -q:静默模式
         -P PORT:指定服务器端口

    sftp:是基于ssh的ftp协议
     只要OpenSSH的服务器端有以下项,则代表支持sftp
     Subsystem sftp /usr/libexec/openssh/sftp-server

     用法: sftp[username@]HOST

服务器端:sshd
   配置文件 /etc/ssh/sshd_config
   服务脚本 /etc/rc.d/init.d/sshd
   脚本配置文件:/etc/sysconfig/sshd

   查看config文件的帮助
       man sshd_config
       ListernAddress 当前主机的监听地址
       Protocol 协议版本
       # HostKeys for protocol version 2
       #HostKey /etc/ssh/ssh_host_rsa_key
       #HostKey /etc/ssh/ssh_host_dsa_key
       验证主机的公钥
       #KeyRegenerationInterval 1h  密钥的使用时间
       #ServerKeyBits 1024 密钥长度
       #LogLevel INFO 日志级别
       #LoginGraceTime 2m 登陆宽限期
       #PermitRootLogin yes root是否可以登录
       #StrictModes yes 严格模式,家目录 属主 属组
       #MaxAuthTries 6 最多可以承受的次数
       #MaxSessions 10
       最大的连接数
       PasswordAuthentication yes 是否使用用户名和密码的方式
       Kerberos集中认证管理
       X11Forwarding yes 是否转发图形窗口
       AllowUsers user1 user2
       用户白名单
       Allowgroups 组白名单
       DenyUser 用户黑名单
 
用户登录信息获取
  lastlog:显示用户最近一次的登录信息,成功的 /var/log/wtmp
  lastb:显示用户登录的信息,并尝试失败的 /var/log/btmp
  用户成功登陆的日志信息
  last


使用ssh的最佳实践
使用ssh的最佳实践
1)only use ssh protocol 2
2)limit users SSh access
 Allowusers root vivek jerry
 白名单
 denyUser saroj anjali foo
 黑名单
3)configure  Idle Log out timeout Interval 配置空闲超时长。
 ClientAliveCountMax 300
 ClientAliveInterval  0
4)Firwall SSH Port # 22
 使用iptables设置ssh服务安全访问策略
5)change ssh port and Limit IP binding
 port 300
 Listaddress 192.168.1.5
 ListenAddress 202.54.1.5
 勿使用默认22端口
6)use Strong SSH passwords and passphrase
 genpasswd(){
  local 1=$1
   [ "$1" == "" ]&& 1=20
   tr -dc A-Za-z0-9_</dev/urandom | head -c ${1} | xargs
 }
使用足够长足够复杂的密码,且定期更换。
7)use Public key Based AUthentication
使用公钥认证。
8)disable Empty password
9)thwart ssh crakers (Brute  Force attack)
google:ssh best practice
10)rate-limit incoming port # 22 COnnections
限制ssh访问频度
11)use log analyzer
 记录好日志,经常做日志分析。

总结:ssh,scp.sftp,sshd
      ssh /etc/ssh/ssh_config
      sshd /etc/ssh/sshd_config

练习:基于密钥的认证,并限定仅余下root和hadoop用户登录

 

bash编程的信号捕获
  trap 陷阱
  trap ‘command’ signal
  kill -l
  KILL无法捕捉

  信号捕捉用于:在中途中止时做一些清理操作

  • blogger

版权所有:oldboy ---- 《openssl之openssl实现加密解密及CA与密码基础
本文地址:http://www.bokeren.cc/post-101.html
除非注明,文章均为 《悠然生活的平淡博客-博客人linux运维之家》 原创转载请注明本文地址,谢谢。


相关推荐

评论

  1. 2018-01-25 18:27
    加密程序果然很重要,今天过后
    1. 2018-01-27 18:58
      @程序开发:是的。随着应用的广泛,安全更是重中之重

你肿么看?

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。