Linux之加密(基于key认证、建立私有云CA)

对称加密:
一般的加密是用一个密码加密文件,解密用同样的密码,加密解密用一把密钥

非对称加密:
一个密码加密文件,解密却用另外一组密码,意思就是加密解密的密码不一样,其结果就是用这一组密钥中的一个来加密数据,可以用另一个解开。四把密钥(两对公钥和私钥成对出现),有公钥(pub)不能推出私钥(key)的内容,私钥不能推出公钥内容,能确认数据来源,效率低

公钥加密数据,然后私钥解密的情况被称为加密解密
私钥加密数据,公钥解密一般被称为签名验证签名

因为公钥加密的数据只有它相对应的私钥可以解开,所以你可以把公钥给任何人,让他加密他想要传送给你的数据,这个数据只有到了有私钥的你这里,才可以解开成有用的数据,其他人就是得到了,也看不到内容.同理,如果你用你的私钥对数据进行签名,那这个数据就只有配对的公钥可以解开,有这个私钥的只有你,所以如果配对的公钥解开了数据,就说明这数据是你发的,相反,则不是.这个被称为签名.
实际应用中,一般都是和对方交换公钥,然后你要发给对方的数据,用他的公钥加密,他得到后用他的私钥解密,他要发给你的数据,用你的公钥加密,你得到后用你的私钥解密,这样最大程度保证了安全性.

一般的公钥不会用明文传输给别人的,正常情况下都会生成一个文件,这个文件就是公钥文件,然后这个文件可以交给其他人用于加密,但是传输过程中如果有人恶意破坏,将你的公钥换成了他的公钥,然后得到公钥的一方加密数据,不是他就可以用他自己的密钥解密看到数据了吗,为了解决这个问题,需要一个公证方来做这个事,任何人都可以找它来确认公钥是谁发的.这就是CA,CA确认公钥的原理也很简单,它将它自己的公钥发布给所有人,然后一个想要发布自己公钥的人可以将自己的公钥和一些身份信息发给CA,CA用自己的密钥进行加密,这里也可以称为签名.然后这个包含了你的公钥和你的信息的文件就可以称为证书文件了.这样一来所有得到一些公钥文件的人,通过CA的公钥解密了文件,如果正常解密那么机密后里面的信息一定是真的,因为加密方只可能是CA,其他人没它的密钥啊.这样你解开公钥文件,看看里面的信息就知道这个是不是那个你需要用来加密的公钥了.
实际应用中,一般人都不会找CA去签名,因为那是收钱的,所以可以自己做一个自签名的证书文件,就是自己生成一对密钥,然后再用自己生成的另外一对密钥对这对密钥进行签名,这个只用于真正需要签名证书的人,普通的加密解密数据,直接用公钥和私钥来做就可以了.
密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式,PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件,直接打开,你可以看到........你什么也看不懂!.X509是通用的证书文件格式定义.pkcs的一系列标准是指定的存放密钥的文件标准,你只要知道PEM DER X509 PKCS这几种格式是可以互相转化的.
SSH:
  SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
可以实现ssh安全登陆有两个软件可以实现:
  openssh:是ssh协议的开源实现,
  dropbear:小型的远程登陆工具。
从客户端来看。SSH有两种基于用户的登陆验证方式:
   1、基于口令的安全验证
   2、基于密钥的安全验证
  第一种,基于口令的安全验证,实现原理是:只要你知道账号和口令,就可以登陆到远程主机,所有传输的数据都被加密,每次登陆输入账号口令即可;但是不能保证你连接的服务器是你所想连接的服务器,可能会出现服务器冒充的情况;
  第二种,基于密钥的安全验证,实现原理是:
1、首先客户端会生成一对公钥和私钥,并将自己的公钥发送给服务器并重命名为authorized_keys,存放在服务器的~/.ssh/目录下;
2、然后再向服务器端发送一个连接请求,信息包括IP地址、用户名等;
3、服务器收到公钥和请求后,会到authorized_keys中查找,如果有响应的IP地址、用户名,就会随机生成一个字符串,并使用客户端的公钥加密后发送回去;
4、客户端收到服务器的消息,使用私钥进行解密,并将解密后的字符串发送给服务器;
5、服务器收到客户端的回应,将客户端发来的字符串与之前的字符串进行比对,如果一致,就允许免密码登陆。这就是基于key的验证,在生产中多用到这种方式。

centos7a为客户端(ip:192.168.141.171),centos7b为服务端(ip:192.168.141.172)
[root@centos7a ~]#ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mCFcAKLvUgaYzB25K8F2V/NtMOZhQ/su6mC0lmYKX68 root@centos7a.Duanxin.com
The key's randomart image is:
+---[RSA 2048]----+
|. .oo.. ..       |
|=o.o.. o B.      |
|*o .+ o *.*      |
| * o o + o.o     |
|. * o.o S ..     |
| = .. o   .      |
|..o  X   . .     |
| .o B o . .      |
|   o Eo+         |
+----[SHA256]-----+
[root@centos7a ~]#ls .ssh/
id_rsa  id_rsa.pub
[root@centos7a ~]#ssh-copy-id root@192.168.141.172
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.141.172 (192.168.141.172)' can't be established.
ECDSA key fingerprint is SHA256:RC2V+21XsUaWjZ7ddmnQsyGHZ2EmoiGD/Qw+iC0o6Qs.
ECDSA key fingerprint is MD5:24:54:14:03:db:86:2e:5a:70:91:bd:ab:07:e1:9d:82.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.141.172's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.141.172'"
and check to make sure that only the key(s) you wanted were added.
[root@centos7b ~]#ls .ssh/
authorized_keys
[root@centos7a ~]#ssh 192.168.141.172
Last login: Mon Sep 24 22:21:14 2018 from 192.168.141.1


 创建CA和证书申请步骤:
    1、服务端建立CA并自签认证
    2、客户端申请证书并发送请求至CA
    3、CA颁发证书给客户端
创建私有CA: 
    openssl的配置文件:/etc/pki/tls/openssl.cnf 
    三种策略:匹配、支持和可选 
    匹配指要求申请填写的信息跟CA设置信息必须一致,支持指必须填写这项申请信息,可选指可有可无 

1、创建所需要的文件 
    touch /etc/pki/CA/index.txt 生成证书索引数据库文件 
    echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号 
2、 CA自签证书 
    生成私钥 
    cd /etc/pki/CA/ 
    (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 
3、颁发证书 
    在需要使用证书的主机生成证书请求 
    给web服务器生成私钥 
    (umask 066; openssl genrsa -out 
    /etc/pki/tls/private/test.key 2048) 
    生成证书申请文件 
    openssl req -new -key /etc/pki/tls/private/test.key 
    -days 365 -out etc/pki/tls/test.csr 
    将证书请求文件传输给CA 
    CA签署证书,并将证书颁发给请求者 
    openssl ca -in /tmp/test.csr –out 
    /etc/pki/CA/certs/test.crt -days 365 
    注意:默认国家,省,公司名称三项必须和CA一致 
4、验证证书
	openssl verify -CAfile cacert.pem certs/app.crt certs/app2.crt
	OK
5、查看证书内容
	openssl x509 -in certs/app.crt -noout -text 

scp:
    复制文件夹-r 
    scp将本地复制至目标:scp /path1 IP:/path2
    将目标复制到本地:scp IP:/path2 /path1
    将目标1复制到目标2 scp IP1:/path1 IP2:/path2输两次密码
rsync: 
    高效传输复制文件,适合更新文件
sftp:
依赖于ssh
pssh:
基于key的验证
pscp.pssh推;pslurp拉
pathyon编写的工具,依赖于epel源,批量远程管理,配合基于Key验证

原文地址:https://www.cnblogs.com/duanxin1/p/9979003.html