1、概念

PKI: Public Key Infrastructure

签证机构:CACertificateAuthority

注册机构:RA

证书吊销列表:CRL

证书存取库:

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

版本号        主体公钥

序列号          CRL分发点

签名算法        扩展信息

颁发者        发行者签名

有效期限

主体名称

2、证书获取

1)证书类型:

证书授权机构的证书

服务器

用户证书

2)获取证书两种方法:

使用证书授权机构

生成签名请求(csr    

csr发送给CA

CA处接收签名

自签名的证书

自已签发自己的公钥

3、安全协议

SSL: Secure Socket Layer

TLS: Transport Layer Security

1995SSL 2.0Netscape

1996: SSL 3.0

1999: TLS 1.0

2006: TLS 1.1IETF(Internet工程任务组) RFC 4346

2008TLS 1.2 当前使用

2015: TLS 1.3

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

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

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

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

 

4OpenSSL

1OpenSSL开源项目

三个组件:

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

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

libssl:加密模块应用库,实现了ssltls,包nss

openssl命令:

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

openssl version:查看程序版本号

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

标准命令:

enc, ca, req, ...

2)对称加密

工具:openssl enc, gpg

算法:3des, aes,blowfish, twofish

enc命令:

加密opensslenc -e-des3 -a -salt -in testfile -out testfile.cipher

CA和证书_第1张图片

#-des3为加密算法(可以根据自己需要选择)

   -a 对加密后的数据进行base64编码,或解密前先对数据进行base64解码

   -salt 加盐 加盐后,相同的明文可以得到不同的密文,默认情况下,盐值是随机生成的,可以使用-S选项明确制定盐值。

   -in 指定要加密的文件

   -out 指定加密后输出的文件

解密:openssl enc -d -des3-a -salt –in testfile.cipher -out testfile

CA和证书_第2张图片


3)单向加密:

工具:md5sum, sha1sum,sha224sum,sha256sumopenssl dgst

dgst命令:

加密:openssl dgst -md5 [-hex默认] [-out /path/to/filename]/PATH/SOMEFILE

-md5指定加密算法

-out filename:将加密的内容保存到指定文件中

单向加密除了openssl dgst还有md5summd5sum/PATH/TO/SOMEFILE

wKiom1nOPTvh3_YCAACLPoIo0lM380.png

MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制

CBC-MAC

HMAC:使用md5sha1算法

4)生成用户密码:

对用户密码进行hash

passwd命令:

帮助:man sslpasswd

openssl passwd -1 -salt SALT(最多8)

  -1:表示使用的bash算法是MD5

  -salt SALT:输入作为salt的字符串

CA和证书_第3张图片


5)生成随机数:

帮助:man sslrand

openssl rand -base64|-hex NUM

NUM: 表示字节数;

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

CA和证书_第4张图片

6)公钥加密:

算法:RSA, ELGamal

工具:gpg, openssl rsautlman rsautl

数字签名:

算法:RSA, DSA, ELGamal

密钥交换:

算法:dh

DSADigital Signature Algorithm

DSSDigital Signature Standard

RSADigital Signature Algorithm

生成密钥对儿:man genrsa

7)生成私钥

openssl genrsa -out /PATH/TO/PRIVATEKEY.FILENUM_BITS

(umask 077; openssl genrsa –out test.key –des 2048)

(命令):表示()里面的命令是在子shell中运行,不影响当前的shell

  NUM_BITS:秘钥长度(单位bit

CA和证书_第5张图片

CA和证书_第6张图片

CA和证书_第7张图片

8)从私钥中提取出公钥

openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE

Openssl rsa -intest.key –pubout –out test.key.pub

CA和证书_第8张图片

9)随机数生成器:伪随机数字

键盘和鼠标

块设备中断

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

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

 

5、创建CA和申请证书

/etc/pki/tls/openssl.cnf文件中定义了申请CA的各种配置,比如路径:

CA和证书_第9张图片

创建私有CA

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

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

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

1)创建所需要的文件

touch /etc/pki/CA/index.txt 生成证书索引数据库文件(必须是这个目录叫这个文件)

echo 01 >/etc/pki/CA/serial 指定第一个颁发证书的序列号(必须是这个目录叫这个文件)wKiom1nOPT-BIRPoAANGKZkbunA300.png

CA和证书_第10张图片

(如图,如果不创建的话会在生成证书时报错)

2CA自签证书

A生成私钥

cd /etc/pki/CA/

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

  作为CA 必须放在/etc/pki/CA/private/下且必须叫cakey.pem

wKioL1nOPP-QULXuAAJ7DZxdSJo599.png

CA和证书_第11张图片

B生成自签名证书

openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out/etc/pki/CA/cacert.pem

-new: 生成新证书签署请求

-x509: 专用于CA生成自签证书(如果是申请证书就不用加)

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

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE: 证书的保存路径,自签名必须放在/etc/pki/CA/cacert.pem

CA和证书_第12张图片

生成完之后我们可以将证书导出来到Windows里可以看一下(记得把后缀改为cer

wKioL1nOPQTSz4UhAAAv_E9PPF8916.png

查看一下证书

CA和证书_第13张图片

(有些时候需要我们把私钥和自签名证书合起来,就一起重定向到一个文件即可,我们在这就不弄了

wKiom1nOPUjjyWGZAACG529-xcE402.png

3)颁发证书

A在需要使用证书的主机生成证书请求

web服务器生成私钥

(umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)

  (这个私钥文件路径随意)

CA和证书_第14张图片

生成证书申请文件test.csr(文件路径也随意,文件后缀一般为csr

openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr  (此命令跟之前CA生成自签名证书只少了一个-x509)

这里的-days没有实际意义,即使你申请了10年,CA那边也不一定批,所以可以不写。

CA和证书_第15张图片

注意:默认国家,省,公司名称三项必须和CA一致,因为策略文件/etc/pki/tls/openssl.cnf中设定的这几项需要匹配,我们也可以修改它。

CA和证书_第16张图片policy改为anything策略的话,就可以都不匹配了。

wKiom1nOPU_TkJt8AAA3Ujdom2U392.png

B将证书请求文件传输给CA 

wKioL1nOPQ6B1EGwAAEGDa5JFig829.png

wKioL1nOPQ6C4GfsAACq8cnEvOc231.png

C CA签署证书,并将证书颁发给请求者

openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt-days 365

  -in 证书请求文件

  -out 输出生成crt证书文件

  -days 在这里就是你给指定它颁发的多长时间,如果不写就是默认值

CA和证书_第17张图片

  看看信息有没有问题,没有问题就可以输入y确认颁发了。

CA和证书_第18张图片

查看一下数据库,果然增加了(V表示有效)

然后把生成的文件发回去

wKiom1nOPVSBmajPAAFLg2ocHbA714.png

D查看证书中的信息:

opensslx509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates wKioL1nOPROQ-I2cAAL4lVDIbOg468.png

opensslca -status SERIAL查看指定编号的证书状态

CA和证书_第19张图片


·我们也可以导出windows查看

CA和证书_第20张图片

现在显示不能验证该证书,是因为我们CA自认证文件还没有安装

我们来安装一下:

CA和证书_第21张图片

CA和证书_第22张图片

CA和证书_第23张图片

CA和证书_第24张图片

安装完之后再看颁发的证书:

CA和证书_第25张图片

信息就显示了。

 

4)吊销证书

A在客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

BCA上,根据客户提交的serialsubject信息,对比检验是否与index.txt文件中的信息一致,吊销证书:

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

wKioL1nOQWSwjx9bAAFb43zI1DQ881.png

取消之后查看一下状态,变成R了。CA和证书_第26张图片

C指定第一个吊销证书的编号

注意:第一次更新证书吊销列表前,才需要执行

echo 01 >/etc/pki/CA/crlnumber (必须放在这个路径这个文件)

D更新证书吊销列表

openssl ca-gencrl -out /etc/pki/CA/crl/crl.pem   (必须放在这个路径这个文件)

wKiom1nOQaiCVRxXAAFjV6xpP9g759.png

查看crl文件:

openssl crl -in /etc/pki/CA/crl/crl.pem-noout -text