CA搭建与证书申请
概述
- 需要掌握证书申请
- 了解证书吊销
- 用到的命令openssl
引言
前面提到的不对称加密时,将公钥传送给对方时,存在中间人攻击的隐患,如果接收方没有进行安全检测,贸然认可,那后续传输就谈不上安全了。
为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构
1. CA和证书
- 需要知道的名称
- PKI
Public Key Infrastructure公钥基础设施 - 发证机构(CA)
- 注册机构(RA)
- 证书吊销列表(CRL)
- 证书存取库
- X.509:定义了证书的结构以及认证协议标准
包括:版本号、序列号、签名算法、颁发者、有效期限、主体名称、主体公钥、CRL分发点、扩展信息、发行者签名
-
CA证书的作用
- 为实现双方安全通信提供了电子认证。
- 使用数字证书实现身份识别和电子信息加密。
- 数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。
-
证书获取
- 向证书授权机构申请
- 生成签名请求(csr),发送给RA,RA审核后发送给CA
- CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者
- 自签名的证书
自已签发自己的公钥,如建立根CA
-
安全协议
如下图所示,TLS工作在传输层与应用层之间,也就是用户只能看到传输层以下的数据
- Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
- ChangeCipherSpec 协议:一条消息表明握手协议已经完成
- Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
- Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
-
示例:
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
- 客户申请访问https网站
- 服务器接收到请求,服务器具备CA认证的密钥
- 将CA证书发给客户
- 客户用CA的公钥验证服务器证书,确认后,生成对称密钥key,用服务器的公钥加密key
- 将加密的key发送给服务器
- 服务器端用自己的私钥解密,得到key
- 服务器传输key加密信息
- 客户端接收加密信息,解密获取
-
命名
- SSL: 安全套接层(Secure Socket Layer)
早期名称,由Netscape公司开发的 - TLS: 传输层安全(Transport Layer Security)
由IETF(Internet工程任务组) 将SSL命名的国际标准名称,目前主流的为1.2版本
- SSL: 安全套接层(Secure Socket Layer)
-
功能
- 实现数据的加密
- 认证
- 完整性
- 重放保护 认证
- 基于重放攻击的保护手段,通过记录时间,只负责这一次的验证
- 所谓重放就是不解密数据,将为解密数据再去匹配
例如:登录时的账号与密码,不去破解,而是将其拿出来发给服务器,如果服务器校验成功,就会登录
-
安全协议实现
分为握手阶段和应用阶段- 握手阶段(协商阶段)
客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过主密钥生成。 - 应用阶段:
在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
- 握手阶段(协商阶段)
2. OpenSSL工具
证书的申请,需要用到开源项目OpenSSL
2.1 概述
- 主要组件
- openssl: 多用途的命令行工具,包openssl
- libcrypto: 加密算法库,包openssl-libs
- libssl:加密模块应用库,实现了ssl及tls,包nss
- 主要文件目录
/etc/pki/CA - 涉及名称:satl值
- 原理:
为用户密码添加Salt值,使得加密的得到的密文更加冷僻,不宜查询。即使黑客有密文查询到的值,也是加了salt值的密码,而非用户设置的密码。salt值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样。 - 用途
当用户首次提供密码时(通常是注册时),由系统自动添加随机生成的salt值,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的加盐值,然后散列,再比较散列值,已确定密码是否正确。
- 原理:
- openssl命令:
直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式(非交互式 )-
程序版本号
openssl version[root@hai7 ~/.gnupg]$openssl version OpenSSL 1.0.2k-fips 26 Jan 2017
-
获取帮助
openssl ?[root@hai7 ~/.gnupg]$openssl ? 标准命令 Standard commands asn1parse ca ciphers cms ...... 消息摘要命令(哈希运算) Message Digest commands (see the `dgst' command for more details) md2 md4 md5 rmd160 sha sha1 加密命令(各种加密算法) Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
-
2.2 对称加密
- 工具
- openssl enc
- gpg
-
算法
3des, aes, blowfish, twofish -
帮助
man enc -
格式
- 加密
openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher - 解密:
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
- 加密
-
选项
- -e:加密输入数据,默认值
- -d:解密输入数据
- -des3:加密类型,表示用des3加密
- -a:base64处理数据。这意味着,如果进行加密,数据将在加密后进行base64编码;
如果解密被设置,那么输入数据在被解密之前就被解码了 - -salt: 加盐,随机生成,或者提供-S选项
- -S : 指定salt值
- -in: 跟要加密的文件
- -out: 跟输出的文件
-
示例
示例1:为文件f1以des3算法加密,输出为f1.des3
1. 为文件f1以des3算法加密,输出为f1.des3
[root@localhost /data]$openssl enc -e -des3 -a -salt -in f1 -out f1.des3
enter des-ede3-cbc encryption password: <==输入2次密码
Verifying - enter des-ede3-cbc encryption password:
2. 查看生成文件,已转换成base64
[root@localhost /data]$cat f1.des3
U2FsdGVkX19KJwR5kcHwfvMkXiumg9uX/MnR9J5KnNPXa2H1OsMabw==
示例2:批处理模式解密示例1中生成的f1.des3
[root@localhost /data]$openssl enc -d -des3 -a -salt -in f1.des3 -out f2.des3 -pass pass:magedu
2.3 信息摘要算法
-
算法
md5sum, sha1sum, sha224sum,sha256sum… -
帮助
man dgst -
格式
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE -
选项
- -sign filename
用“文件名”中的私钥(DSA算法)对摘要进行数字签名
- -sign filename
-
示例
示例1:以md5算法计算文件f1哈希值,
[root@localhost /data]$openssl dgst -md5 f1
MD5(f1)= fda4e701258ba56f465e3636e60d36ec
[root@localhost /data]$md5sum f1
fda4e701258ba56f465e3636e60d36ec f1
示例2:用md5算法为文件f1签名,输出文件为mo.txt
注:签名私钥为rsa算法
$openssl md5 -sign moli.key -out mo.txt f1
示例3:用md5算法验证签名的文件mo.txt
[root@localhost /data]</