加密和安全,加密 利用openssl搭建CA体系 ssh基于密钥登陆 scp

发送冒充邮件

首先telnet 到 邮件服务器的25端口

EHLO(有些需要输入)

mail  from:

rcpt to:

data 邮件正文

subject  标题

. 邮件结束

quit 退出

查询邮件服务器地址

dig  -t  mx  magedu.com

 

通过抓包,可以抓到数据,所以学好wireshark

黑掉http服务,使其资源耗尽,拒绝服务  flood_connect.c    ./doc XXXX

 

 

对称算法   DES  3DES  AES

非对称算法   RSA  DSA

单向散列  md5: 128bits、sha1: 160bits、sha1sum    sha224sum  sha256sum  sha384sum  sha512sum 

  常用工具

md5sum | sha1sum  [ --check  ]  file 

openssl、gpg 

rpm  -V 

我们也可以用 对称秘钥或非对称秘钥 来对文件进行加密

gpg工具 可以用来加密文件,可以用对称或非对称算法来加密文件

对称加密file文件 

gpg -c file 

ls file.gpg

在另一台主机上解密file

  gpg -o file -d file.gpg 

  gpg使用非对称加密

  首先在双方都生成公私钥      gpg --gen-key   ////在家目录的这里,公钥和私钥

 查看本机公钥    gpg --list-keys   

gpg  -a --export -o  XXX   //////把公钥导出 /data/meaged.pubkey 证书文件,因为原来生成的公私钥  是二进制文件

 

计算机安装的时候一般会安装了 一些大厂的根CA,这些证书可是要掏钱的啊,所以有些公司内部为了使用,节约成本没必要掏钱买证书,可以企业内部自建CA,

https底层依赖  tls协议

http+tls=https

ftp+tls=ftps

而OpenSSL 就是tls的具体实现的组件

  openssl 

  三个组件:

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

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

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

openssl命令

    两种运行模式:交互模式和批处理模式

    openssl version:程序版本号 

     openssl ?  //显示所有子命令

  加密:  openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher  解密:  openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile     ////对称算法

   //使用MD5算法 对这个文件做哈希运算

 

生成用户密码:

  passwd命令: 

   帮助:man sslpasswd

    openssl passwd -1 -salt SALT(最多8位)     ///意思是把一个口令通过md5哈希出来 加密,加密的时候 加盐

    openssl passwd -1 -salt  centos              ///意思是把一个口令通过md5哈希出来 加密,加密的时候 加盐

生成随机数:

    帮助:man sslrand

           openssl rand -base64|-hex NUM

      NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制, 出现的字符数为NUM*2 

base64是一种编码方式,用64个字符,表示数据,既把原来的ASCII编码(8位),改成(6位)编码,

利用openssl 生成 rsa的 公钥私钥

生成密钥对儿:man genrsa

生成私钥

  openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS  2048(也可以不加数字,表示位数)   ////这样就直接生成私钥了,没有加密

   (umask 077; openssl genrsa –out test.key –des 2048)     ///-des 选项就是 使用对称算法対生成的私钥加密

   openssl rsa -in test.key –out test2.key 将加密key解密

            $ openssl rsa -text -in fd.key    ////对私钥以格式查看,也可以直接cat,但是cat 只能看到杂乱的数据

从私钥中提取出公钥

  openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE

     例子 :  openssl rsa –in test.key –pubout –out test.key.pub 

 

利用openssl 搭建CA体系  CA模式分为 私有CA  公有CA,私有CA是给企业内部用的,公有CA是面向互联网的。私有CA的申请证书时有三项都要填写一样,因为策略选择的是私有ca

作为CA 生成私钥的文件名叫什么   私钥公钥文件分别放在什么地方,颁发证书的时候,每个证书的编号是几,这么都需要事先准备好,而这些准备存放在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.    ///给下面颁发证书的 记录信息
#unique_subject	= no			# Set to 'no' to allow creation of
					# several ctificates with same subject.
new_certs_dir	= $dir/newcerts		# default place for new certs.

certificate	= $dir/cacert.pem 	# The CA certificate   ///ca自签名的证书
serial		= $dir/serial 		# The current serial number   ////下一个颁发证书的编号
crlnumber	= $dir/crlnumber	# the current crl number     ///下一个吊销证书的编号
					# must be commented out to leave a V1 CRL
crl		= $dir/crl.pem 		# The current CRL     ////证书吊销列表
private_key	= $dir/private/cakey.pem# The private key     ///私钥文件

这个配置文件定义了很多规则,比如文件路径策略,policy = policy_match 这个表示默认的策略是什么 policy_match(私有ca)还是 policy_anything (公有ca)

  根据CA配置文件 在对应的位置生成对应的文件

1。建立CA,首先要自己有一个证书,因为是ca所以要自己给自己颁发证书,所以首先自己生成公私钥,先生成私钥,根据私钥生成公钥。Linux下生成的证书文件是.pem,根据配置文件 指定了私钥文件是

cd   /etc/pki/CA

(umask 077;openssl genrsa -out private/cakey.pem 4096)     ////生成私钥
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 <<EOF
CN
beijing
beijing
magedu
devops
ca.magedu.com
admin@magedu.com
EOF

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。

touch /etc/pki/CA/index.txt
echo 0F > /etc/pki/CA/serial    //存放下一个证书编号,以十六进制,必须是整字节

查看证书 ,,,也可以传到windows下查看,但是要改后缀,.crt格式的

2 申请证书
  (umask 066;openssl genrsa -out app.key 1024 )     ////在客户端,生成自己私钥
  openssl req -new -key app.key -out app.csr    //根据自己的私钥,生成申请文件

       $ openssl req -text -in fd.csr -noout    ///查看申请文件的内容
当然也可以 使用非交互式方式  创建申请文件
     
    例如我们想自动生成www.feistyduck.com的CSR文件,可以先创建一个fd.cnf文件:
    [req]
  prompt = no
  distinguished_name = dn
  req_extensions = ext
  input_password = PASSPHRASE
  [dn]
  CN = www.feistyduck.com
  emailAddress = webmaster@feistyduck.com
  O = Feisty Duck Ltd
  L = London
  C = GB
  [ext]
  subjectAltName = DNS:www.feistyduck.com,DNS:feistyduck.com
  然后使用下面的命令直接创建CSR文件:
  $ openssl req -new -config fd.cnf -key fd.key -out fd.csr

上面已经提到了,默认是私有ca,所以申请的三个信息要和根ca保持一直。
  scp  /data/app/app.csr  CAServer:/data/         //将自己的申请文件,传给CA。

3 颁发证书
  openssl ca -in /data/app.csr -out /etc/pki/CA/certs/app.crt -days 100   ////根据客户的申请文件,生成客户对应的证书,100天有效期,然后再给客户就可以了

=======================================================================================

 

针对于一个申请文件 是不能多次申请证书的,对于/etc/pki/CA/index.txt.attr 设置了唯一性,修改为no时,就可以允许多个了

吊销证书:  openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem 

openssl  ca -status SERIAL    ////查看指定编号的证书状态   V是正常,R是吊销    查看index.txt也是可以看到证书的状态

撤销证书 本质是生成CRL吊销列表,也是有个文件要去指定下一个吊销列表的编号

指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行

  echo 01 > /etc/pki/CA/crlnumber 

更新证书吊销列表  openssl ca -gencrl -out /etc/pki/CA/crl.pem   ///更新成功后, crl.pem这个里面就存放着 证书吊销列表。

 

ssh

相关包: openssh       openssh-clients      openssh-server

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

  基于password 

  基于key 

客户端组件:  客户端 配置文件:/etc/ssh/ssh_config 

  客户端配置文件

      StrictHostKeyChecking no 首次登录不显示检查提示 ,默认就是yes

       当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub (CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的 ~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接

  格式:ssh [user@]host [COMMAND]     可以后面跟命令  直接在远程机器上运行一个命令,然后退出    

 

   服务端组件 服务端配置文件  /etc/ssh/sshd_config    sshd

 

限制用户SSH登录

PermitRootLogin no  进制root用户ssh登录

只允许指定用户进行登录(白名单):

在/etc/ssh/sshd_config配置文件中设置AllowUsers选项,(配置完成需要重启 SSHD 服务)格式如下:

AllowUsers    aliyun test@192.168.1.1            
# 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。

只拒绝指定用户进行登录(黑名单):

在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,(配置完成需要重启SSHD服务)格式如下:   

DenyUsers    zhangsan aliyun    #Linux系统账户        
# 拒绝 zhangsan、aliyun 帐户通过 SSH 登录系统

重启SSH

ssh连接特别慢 在sshd_config 配置文件中把这两个参数改了,    Usedns yes  ,把这两个改为no

登录的日志 在 /var/log/secure中 记录 

 

ssh服务基于密钥登录验证 

前期工作就这两步,把自己的公钥拷贝过去就OK了,后面就不用了密码了,把公钥给那个机器,你就可以访问到那个机器

ssh-keygen   //对于ssh服务生成自己的公私钥 就是在 /root/.ssh/生成 id_rsa  id_rsa.pub

然后把公钥拷贝过去,传过去也行
ssh-copy-id -i /home/wang/.ssh/id_rsa root@192.168.37.6  //这里是把公钥拷贝过去,但是你如果写错成私钥,也没关系,人家考的还是公钥,这里本质就是公钥文件 id_rsa.pub的内容复制到 远程机器的 /root/.ssh/authorized_keys 中

     你把 公钥给了谁 你就可以远程登录谁        但是这种方式你如果私钥被别人拿走了,那人家就可以伪装你 也可以访问那个机器了

       

修改 root的密码 

 

expect 实现自动基于秘钥登录的脚本,可以让一个机器,不用登录密码,管理多个主机,就是循环 手动做的事

#!/bin/bash

PASS=magedu
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa &> /dev/null && echo "ssh key is created"    //生成自己的公钥私钥,-t指定加密算法  -P 指定密码  -f 指定生成的文件
rpm -q expect &> /dev/null || yum -y install expect &> /dev/null
while read IP ;do
expect <<EOF
set timeout 20
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$IP
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$PASS\n" }
}
expect eof
EOF
echo $IP is ready
done < hosts.txt
hosts.txt
192.168.12.1
192.168.34.2

我们上面讲的都是Linux ssh Linux ,我们更多的是在Windows中 用xhell,去ssh Linux的,所以Xhell也是可以基于key登录的,我们在Xhell中生成公私钥,把公钥拷到Linux中,我们在Windows中使用私钥就可以直接登录到Linux中,这个时候你只要有私钥就可以登录到Linux,你可以随身携带私钥,在任何一台电脑都可以连接Linux中。Xhell生成公私钥 在工具中

 先在xshell中生成秘钥 (工具==》新建用户秘钥)

SCP

scp [options] /sourcefile  [user@]host:/destpath 

  • -C 压缩数据流 
  • -r 递归复制   就是拷贝文件夹
  • -p 保持原文件的属性信息 
  • -q 静默模式 
  • -P PORT 指明remote host的监听的端口 

scp /data/dpt 192.168.37.1:/data //把我这个文件拷贝到 另外一台电脑的data目录下
scp 192.168.37.1:/data/opt . //把远程主机上的这个文件拷贝到自己电脑上

 

rsync 可以完成类似于scp一样的功能,但是不一样的是,rsync是很聪明的 他可以判断如果两个文件一样,他就不复制,可以基于增量的复制,而scp是全部都复制

rsync 也是基于ssh协议的,要注意 带/ 和不带/的区别

rsync -av /etc server1:/tmp 复制目录和目录下文件 

rsync -av /etc/ server1:/tmp 只复制目录下文件

posted @ 2020-08-05 23:55  我才是酷酷的飞  阅读(430)  评论(0编辑  收藏  举报