加密和安全,加密 利用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 -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 //根据自己的私钥,生成申请文件
上面已经提到了,默认是私有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 只复制目录下文件