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验证
Linux之加密(基于key认证、建立私有云CA)的更多相关文章
- 如何在 Linux 中配置基于密钥认证的 SSH
什么是基于 SSH 密钥的认证? 众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议.无论何时使用 SSH 在 ...
- (转)基于OpenStack构建企业私有云(1)实验环境准备
原文:https://www.unixhot.com/article/407 https://www.cnblogs.com/kevingrace/p/5707003.html-----完整部署Cen ...
- Linux中SSH服务基于key认证实践
众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear.ssh协议目前 ...
- 企业建立私有云的N个理由
简而言之,私有云意味着高效.安全.可控(技术路线是否可控另说了),也意味着高成本.有限弹性.(政绩工程不在讨论范围) 全面回答这个问题,其实包括两个部分:为什么要上云计算,以及为什么要采用私有化部署模 ...
- 私有云android客户端2.1.2最新版本(ownCloud简体中文优化版)
通过安装Ubuntu16.04+LAMP+ownCloud9.1+SSL建立私有云,下载ownCloud android客户端最新源码,针对国际语言简体中文化,修改部分代码,并进行补充.优化,编译生成 ...
- [加密]openssl之数字证书签名,CA认证原理及详细操作
转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...
- Kerberos认证原理及基于Kerberos认证的NFS文件共享
目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...
- iOS - HTTPS接口加密和身份认证
为什么要使用HTTPS代替HTTP HTTPS和HTTP的区别 https协议需要到CA申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https则是具有安全性的SS ...
- 基于daridus认证的openvpn部署
基于daridus认证的openvpn部署 安装openvpn 1.安装openvpn依赖包 #yum -y install gcc gcc-c++ #yum -y install openssl o ...
随机推荐
- wepack使用
当前使用的版本:webpack 4.5. ⚠️webpack 是需要有 node 环境的,所以在使用之前需要保证你当前安装的有 node. 安装 webpack: npm install webpac ...
- 大写金额换算器iOS版源码
大写金额换算器iOS版源码 人民币金额大写转换器输入数字就可以转换成相应的人民币大写金额,操作很easy,需一键点击,就可以复制. 是財务办公人员必备的小工具. 银行.单位和个人填写的各种票据和结算凭 ...
- Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
原因fragment必须先add(),才能remove(),故remove前先做判空操作 参考:http://www.cnblogs.com/hixin/p/4427276.html
- Linux gadget驱动分析3------复合设备驱动
windows上面对usb复合设备的识别需要下面条件. “ 如果设备满足下列要求,则总线驱动程序还会报告 USB\COMPOSITE 的兼容标识符: 设备描述符的设备类字段 (bDeviceClass ...
- Linux ALSA声卡驱动之四:Control设备的创建
声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! Control接口 Control接口主要让用户空间的应用程序(alsa-lib)可以访问 ...
- go语言笔记——append底层实现和Cpp vector无异,只是有返回值,double后返回了新的vector地址而已
切片的复制与追加 如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来.下面的代码描述了从拷贝切片的 copy 函数和向切片追加新元素的 append 函数. 示例 7.12 ...
- P2120 [ZJOI2007]仓库建设 斜率优化dp
好题,这题是我理解的第一道斜率优化dp,自然要写一发题解.首先我们要写出普通的表达式,然后先用前缀和优化.然后呢?我们观察发现,x[i]是递增,而我们发现的斜率也是需要是递增的,然后就维护一个单调递增 ...
- bzoj2752
线段树+概率 今天这道题爆零了,奥妙重重. 其实我们可以把式子化成这样:sigma((i-l+1)*(r-i+1)*ai) 这里r减了1 然后展开,(1-l)*(r+1)*ai+(r+l)*i*ai- ...
- 61.员工信息管理Extjs 页面
1.员工信息管理jsp <%@ page language="java" pageEncoding="UTF-8"%> <script typ ...
- js mvc框架
介绍 使用过 JavaScript框架(如 AngularJS, Backbone 或者Ember)的人都很熟悉在UI(用户界面,前端)中mvc的工作机理.这些框架实现了MVC,使得在一个单页面中实现 ...