zoukankan      html  css  js  c++  java
  • Linux:Day20(上) openssh、openssl及CA

    ssh:secure shell protocol,22/tcp,安全的远程登陆

    OpenSSH:ssh协议的开源实现;

      dripbear:另一个开源实现;

    SSH协议版本

      v1:基于CRC-32做MAC,不安全;man-in-mddle

      v2:双方主机协议选择安全的MAC方式

        基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证;

      两种方式的用户登录认证:

        基于password

        基于key

    OpenSSH:

      C/S  

        C:ssh,scp,sftp

          windows客户端:

            xshell,putty,securecrt,sshsecureshellclient

        S:sshd

      客户端组件:

        ssh,配置文件:/etc/ssh/ssh_config

        格式:ssh [user@] host [COMMAND]  # 在linux主机上,如果不指定用户,默认以当前系统登陆的用户名登陆;在windows上没有这个概念,不指定用户名会提示输入用户名。

           ssh [-l user] host [COMMAND]  # -l 为login,用法和上面没什么区别

            -p port:远程服务器监听的端口;

            -X:支持x11转发;

            -Y:支持信任的x11转发;

           Host PATTERN

            PARAMETER VLAUE

           基于密钥的认证:

            (1) 在客户端生成密钥对儿

              ssh -t rsa [-p ' '] [-f "~/.ssh/id_rsa"]

            (2) 把公钥传输至过程服务器对应用户的家目录

              ssh-copy-id [-i [identity_file]] [user@]machine

            (3) 测试

        scp命令:

          scp [options] SRC... DEST/

          存在两种情形:

            PULL:scp [options] [user@host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE

            PUSH:scp [options] /PATH/FROM/SOMEFILE [user@host:/PATH/TO/SOMEWHERE

              常用选项:

                -r:递归复制

                -p:保持原文件的属性信息;

                -q:静默模式

                -P PORT:指明remote host的监听的端口;

        sftp命令:

          stfp [user@] host

          stfp > help

       服务器端:

        sshd,配置文件:/etc/ssh/sshd_config 

        常用参数:

          Port:22022

          ListenAddress ip

          PermitRootLogin yes

          限制可登陆用户的办法:

            AllowUsers user1 user2 user3

            AllowGroups

    ssh服务的最佳实践:

      1、不要使用默认端口;

      2、禁止使用protocol verdion 1;

      3、限制可登录用户;

      4、设定空闲会话超时时长;

      5、利用防火墙设置ssh访问策略;

      6、仅监听特定的IP地址;

      7、基于口令认证时,使用强密码策略;

         ~]# tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs

      8、使用基于密钥的认证;

      9、禁止使用空密码;

      10、禁止root用户直接登录;

      11、限制ssh的访问频度和并发在线数;

      12、做好日志,经常分析;

     

    ssh协议的另一种实现:dropbear

      (1)dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048

       dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_kdy

       dropbear -p [ip:]port -F -E

    OpenSSL:

      三个组件:

        openssl:多用途的命令行工具;

        libcrypto:加密解密库;

        libssl:ssl协议的实现

       PKI:Public Key Infrastructure

        CA

        RA

        CRL

        证书存取库

      建立私有CA工具:

        OpenCA

        openssl

      证书申请及签署步骤:

        1、生成申请请求;

        2、RA核验;

        3、CA签署;

        4、获取证书;

      创建私有CA:

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

        (1) 创建所需要的文件

          # touch index.txt

          # echo 01 > serial

        (2) CA自签证书

          #  (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)  生成私钥

            # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem  生成证书签署请求并自签

            -new:生成新证书签署请求;

            -x509:生成自签证书;

            -key:生成请求时用到的私钥文件;

            -days n:证书的有效期限;

            -out /PATH/TO/SOMECERTFILE:证书的保存路径;

        (3) 发证

          (a) 用到证书的主机生成证书请求;

            # (umak 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)  在用到证书的主机上生成私钥

            # openssl req -new -key /etc/httpd/ssl/htppd.key -days 365 -out /etc/httpd/ssl/httpd.csr  生成证书申请请求

          (b) 把请求文件传输给CA;  把上面生成的csr文件传给CA,可以用scp,也可以是ftp等

          (c) CA签署证书,并将证书发还给请求者;

            # openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

            查看证书中的信息:

              openssl x509 -in /PATH/FROM/CERT_FILE -noout -text| -subject| -serial

        (4) 吊销证书

          (a) 客户端获取要吊销的证书的serial

            # openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

          (b) CA

            先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;

            吊销证书:

              # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

          (c) 生成吊销证书的编号(第一次吊销一个证书,如果已生成这个文件就不再需要了)

            # echo 01 > /etc/pki/CA/crlnumber

          (d) 更新证书吊销列表

            # openssl ca -gencrl -out thisca.crl

             查看crl文件:

              #openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

    从证书中提取公钥:openssl x509 -outform PEM -in /etc/httpd/ssl/httpd.crt -pubkey -out /etc/httpd/ssl/httpd.pubkey

    博客作业:加密解密基础、PKI及SSL、创建私有CA;

  • 相关阅读:
    Thrift中实现Java与Python的RPC互相调用
    Thrift介绍以及Java中使用Thrift实现RPC示例
    Netty中集成Protobuf实现Java对象数据传递
    ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化
    ProtoBuf在使用protoc进行编译时提示: Required fields are not allowed in proto3
    Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
    Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create() or register() directly instead.
    Windows下curl的下载与使用
  • 原文地址:https://www.cnblogs.com/sq5288/p/10783334.html
Copyright © 2011-2022 走看看