密钥和公钥

安全协议和搭建CA

安全协议

SSL:secure socket layer

TLS:transport layer security

功能:机密性,认证,完整性,重放保护

两阶段协议:分为握手阶段和应用阶段

握手阶段(协商阶段):客户端和服务端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MAstersecret生成。

应用阶段:在握手阶段完成后进入与,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

在实现通讯的时候,加密过程怎么来实现的,

客户端,发一个hello消息,我要和你通讯,服务器端也打声招呼hello,我收到你的消息了,双方开始一些数据交换,其中最重要的就是把服务器的证书发给他,证书包括CA签过名的公钥,一般来讲客户端信任CA,即客户端拿到了CA的公钥,服务器发过来的证书包括CA颁发给服务器的证书,即私钥签过名服务器的证书,客户端就可以拿CA的公钥把证书里面的签过名的私钥的信息解密,解密之后得到服务器的公钥,

 

京东向CA申请证书,证书包括,Sca(Pa)+CA+A+expire

 

客户端想访问京东,京东先把证书传给客户,客户端拿到证书,由于客户信任CA,即客户端拿到了京东的公钥Pca,

CA的公钥拿到了,我们就可以把CA签过名的私钥签名的东西给解开,就得到了A的公钥,

之后,客户端在自己的浏览器自动生成一把对称的密钥,用京东的公钥加密,再发回给京东,

Pjd(key)—–>jd.com   京东的公钥是证书里面包的,解开之后得到的,  京东有自己的私钥,就可以解开,拿到客户端的对称密钥,双方都有了对称密钥,以后就可以用对称数据加密传输

Key(data)—->

<—–key(data)   双方都有密钥,就可以通讯,

访问HTTPS网站的原理

 

https:

1 client hello—> server   客户端发消息连一下

2 server cert:Sca(Pserver)—>client   服务器把自己的证书传给客户端

3 client Pca[Sca(Pserver)]=Pserver 客户端事先有ca的公钥,就可以解开,得到服务器的公钥

4 client key  随机生成,对称公钥

5 client Pserver(key)—>server 用刚才解密出来的服务器公钥加密,

6 server Sserver[Pserver(key)]=key 服务器用自己的私钥解密,得到key

7 client<—key(data)—>server

 

CA证书 格式

PKI:

X.509:定义了证书的结构以及认证协议标准

支持ssl的功能的开源项目:openssl

三个组件:OpenSSL:多用途的命令行工具

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

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

Openssl命令:

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

Openssl version:程序版本号

标准命令、消息摘要命令、加密命令

标准命令:enc,ca,req

查看帮助,man dgst

Man enc

Openssl命令实现对称密钥加密

[root@centos7 app]# openssl enc -e -des3 -a -salt -in fstab  -out fstab.des3

Enc对称密钥加密,-e表示要加密,-des3加密算法,-in表示对哪个文件操作-out输出文件名,

-a是一种格式,base64 编码   A-Za-z0-9+/  共64个  000000-111111

[root@centos7 app]# scp fstab.des3 192.168.27.120:/app/   传到另一个主机

 

[root@Centos6 app]# openssl enc -d -des3 -a -salt -in fstab.des3    解密

 

Hash运算 支持hash运算  和md5运算一样

[root@centos7 app]# openssl dgst -md5 fstab

MD5(fstab)= 5ee6b24e978dd663a191a50d7b36eb81

[root@centos7 app]# md5sum fstab

5ee6b24e978dd663a191a50d7b36eb81  fstab

 

生成用户密码:passwd命令

帮助:man sslpasswd

[root@centos7 app]# openssl passwd -1 -salt

生成随机数

帮助:man sslrand

Openssl rand -base64|-hex NUM

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

[root@centos7 app]# openssl rand -base64 10

0sVbokguIMl55g==

[root@centos7 app]# openssl rand -hex 2  两个字节

f1ef  两个字节占四位十六进制数,一个十六进制数相当于四位,

 

打包 tar jcvf script27.tar.xz /home/wang

Sz script27.tar.xz

Rz

公钥加密

算法:RSA.  ELGamal

工具:gpg,openssl   rsautl(man rsautl)

数据签名:

算法:RSA,DSA,ELGamal

密钥交换

算法:df

DSA

DSS

RSA

生成密钥对:man genrsa

生成私钥

[root@centos7 app]# openssl genrsa -out centos6.key 1024  私钥文件不安全

[root@centos7 app]# (umask 066;openssl  genrsa -out centos6.key 1024)  066对文件最大权限666,减去066,600都是偶数也不用加1

[root@centos7 app]# (umask 066;openssl  genrsa -out centos6.key2 -des3 4096)  对称加密,即加上密码(只有root权限)

[root@centos7 app]# openssl rsa -in  centos6.key2 -out centos6.key2.out  将加密key解密

从私钥文件中,把公钥提取出来

[root@centos7 app]# openssl rsa -in  centos6.key -pubout -out centos6.key.pub

[root@centos7 app]# openssl rsa -in  centos6.key2 -pubout -out centos6.key.pub2

随机数生成器:

键盘和鼠标,块设备中断

/dev/random 仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom从熵池返回随机数;随机数用尽,会利用软件生成伪随机数非阻塞

[root@centos7 ~]# cat /dev/urandom |tr -dc ‘[:alnum:]’ |head -c 10

[root@centos7 ~]# openssl rand -base64 12 |head -c 10

Head 用于显示文件的开头的内容,-c 指定显示头部内容的字符数

 

Tr用来自标准输入的字符进行替换、压缩和删除、

-c 取代所有不属于第一字符集的字符(即取补集)

-d 删除所有属于第一字符集中的字符

 

PKI: Public Key Infrastructure  公共密钥架构

CA 证书的颁发机构

RA 证书的申请机构

CRL 证书吊销列表

证书的存取库

建立私有CA

OpenCA

Openssl

证书申请及签署步骤

  1. 生成申请请求
  2. RA核验
  3. CA核验
  4. 获取证书

搭建CA

搭建ca时,需要自己建立私钥,需要有根ca,第一个ca,就相当于根ca,根ca的证书是自己给自己颁发的,自签名的证书,建立公钥私钥对,通过私钥来自己向自己颁发证书,,,第一步,建立自己的ca,客户端向ca申请证书,

生成文件,填写必要信息,国家,省,域;RA检查信息,收集请求,没问题之后;CA签署,客户端获取证书后就

可以使用了,可以放在web服务器上将来实现web https的应用程序加密

 

创建私有CA

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

Centos7  改ip地址

看ip地址,nmcli connection

改ip地址,nmcli connection modify ens33 ipv4.addresses 192.168.27.7 /24

让该地址生效,nmcli connection up ens33

三种策略:匹配、支持和可选

匹配指要求填写的信息跟CA设置信息必须一致,支持指必须填写这项申请信息,可选指可有可无

1创建所需要的文件

touch  /etc/pki/CA/index.txt  生成证书索引数据库文件

echo 01 > /etc/pki/CA/serial   指定第一个颁发证书的序列号

2CA自签证书

生成私钥

cd /etc/pki/CA  CA工作的主目录

(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)     私钥文件/private/cakey.pem

生成自签名证书,从私钥下生成自签名证书

[root@centos7 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

(证书里面是放公钥的)

Openssl req -new -x509 -key

/etc/pki/CA/private/cakey.pem -days  7300  -out            7300有效期

/etc/pki/CA/cacert.pem

-new 生成新证书签署请求

-x509 专用于CA生成自签证书

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

-days n 证书的有效期限

-out 证书的保存路径

-x509 加这个,表示自己给自己颁发证书    不加,表示向CA申请证书,

查看证书信息

[root@centos7 CA]# openssl x509 -in cacert.pem -noout -text

 

客户端centos6向centos7申请证书

第一步,自己有私钥,比如将来给http服务用的,我们要生成私钥文件,利用私钥文件生成证书申请,也是一个文件,拷贝到centos7上,CA颁发证书,也生成一个文件,复制回到centos6,意味着centos6有三个文件,私钥文件,请求文件,最终的证书文件,   其中搭建http的加密应用,需要用到两个文件,私钥文件和证书文件

第一步,生成私钥文件

(umask 066;openssl genrsa -out app.key 1024)

第二步,利用私钥文件生成证书申请请求

[root@Centos6 ~]# openssl req -new -key app.key -out app.pem   生成证书申请文件

[root@Centos6 ~]# mv app.pem app.csr        改名字

[root@Centos6 ~]# scp app.csr 192.168.27.8:/etc/pki/CA      传递给centos7 证书申请,等待颁发

[root@centos7 CA]# openssl ca -in app.csr -out certs/app.crt -days 730  对申请,颁发证书,,对申请生成证书文件

[root@centos7 CA]# touch index.txt

[root@centos7 CA]# echo  0F > /etc/pki/CA/serial  序列号

[root@centos7 CA]# openssl ca -in app.csr -out certs/app.crt -days 730

[root@centos7 CA]#  scp certs/app.crt 192.168.27.120:/app   导入centos6

 

在客户端查看证书

[root@Centos6 app]# openssl x509 -in /app/app.crt -noout -text

吊销证书

Openssl ca -revoke newcerts/11.pem

生成证书吊销列表

第一步Echo 0F > /etc/pki/CA/crlnumber 生成相关文件

第二步Openssl ca -gencrl -out crl.pem  生成证书吊销列表

 

 

总结创建CA

搭建根CA ,根CA的创建有两步

第一步,建立两个必要的文件,

第二步,生成私钥给自己签名 ;生成私钥文件,生成自签名文件

 

在另外一台机器上,生成私钥, 向CA申请证书,填写信息 生成请求文件csr,复制到CA,然后CA颁发证书

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90993

(0)
sunchunjiangsunchunjiang
上一篇 2018-01-09 17:59
下一篇 2018-01-10

相关推荐

  • Centos7 服务器部署ssh证书授权登录

    在当前服务器生成密钥对 ssh-keygen –t rsa –P ” ssh-keygen –t rsa –P ''[root@localhost ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key …

    Linux干货 2016-12-05
  • Shell脚本编程基础中() (()) [ ] [[ ]] 的使用

    Shell脚本编程基础中() (()) [ ] [[ ]] 的使用 () 生成子进程,括号内的命令将会在子进程中运行,父进程不能够读取在子进程中创建的变量 例: 新建个脚本文件,写入 则执行结果为 $()相当于 ` `  ,返回括号内命令执行结果 (( )) 用作四则运算和逻辑运算,并且支持多个表达式 例: 当 (( )) 加$,则是将获得表达式值,赋值给左…

    2017-11-26
  • 马哥教育网络班22期+第1周课程练习

    一、计算机组成部分及其功能:硬件系统和软件系统     1、计算机的硬件系统组成及其功能:         运算器:处理数据的算术运算及逻辑运算即数据加工处理;         控制器:根据…

    Linux干货 2016-08-15
  • 认识DNS

    DNS全称是Domain Name System的简称,即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP/TCP协议之上,使用端口号53。 认识DNS 安装 创建一台DN…

    Linux干货 2016-12-07
  • Linux shell之bash特性大全详解(持续更新ing)

    一、shell是什么?     Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中…

    Linux干货 2016-03-09
  • 第六周:vim编辑器和cron计划任务的使用练习

    查看vim编辑器的使用介绍另见:http://afterdawn.blog.51cto.com/7503144/1855557 at及cront计划任务介绍见:http://afterdawn.blog.51cto.com/7503144/1864365 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件…

    Linux干货 2016-10-26