信息安全防护的目标
安全防护环节
安全攻击: STRIDE
安全设计基本原则
常用安全技术
加密算法和协议
对称加密:加密和解密使用同一个密钥
对称加密的特性:
对称加密的缺陷:
公钥加密:密钥是成对出现
非对称加密算法特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
非对称加密算法功能:
非对称加密算法缺点:密钥长,加密解密效率低下
非对称加密算法算法:
基于一对公钥/密钥对
实现加密:
实现数字签名:
结合签名和加密
分离签名
将任意数据缩小成固定大小的“指纹”
功能:数据完整性
常见算法
常用工具
对称加密:效率高、但无法确认数据来源
非对称加密:可以确定数据来源但效率低
Alice == Bob
其中Alice的公钥PubA,私钥PriA
其中Bob的公钥PubB,私钥PriB
(data) --> PubB{PriA[hash(data)]+data} == data’ ==>to Bob
–> PriB(data’)–>PubA{PriA[hash(data)]+data}
–> hash(data) == hash(data)? :确认数据是否被篡改
–> 安全通信
但是:使用Bob公钥加密数据若太大,则解密时间消耗比较长
综合hash、对称、非对称三种通信:
(data) —> hash(data)
–> PriA[hash(data)] + key(data) + PubB(key) ==data’ ==>to Bob
–> PriB(PubB(key))==key 提取非对称加密数据的钥匙
–> PubA([hash(data)])==hash(data)提取data的digest 并验证data来源
–> key(key(data))==data 提取data
–> hash(data)=? hash(data) 确认data传输过程未被修改
密钥交换:IKE( Internet Key Exchange )
方法一:公钥加密
方法二:DH (Deffie-Hellman):生成会话密钥
参看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
使用gpg实现对称加密
使用gpg工具实现公钥加密
PKI:Public Key Infrastructure
X.509:定义了证书的结构以及认证协议标准
证书类型:
获取证书两种方法:
使用证书授权机构
生成证书请求(csr)
将证书请求csr发送给CA
CA签名颁发证书
自签名的证书
自已签发自己的公钥
SSL:Secure Socket Layer,TLS: Transport Layer Security
功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
TLS(or SSL) 工作在应用层和传输层之间,对应用层数据进行加密。
OpenSSL:开源项目
openssl命令:
对称加密:
单向加密:
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
帮助:man dgst
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现
网络通信中保证所传输数据的完整性机制
生成用户密码:
生成随机数:
公钥加密:
数字签名:
密钥交换:
生成密钥对儿:man genrsa
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)
openssl rsa -in test.key –out test2.key 将加密key解密
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
随机数生成器:伪随机数字
base64编码:[ 字母 | 数组 | + | / ]
因为ASCII码128中具有不可见字符,使用文本工具打开将乱码,base64编码字符 可见,因此base64可以将二进制文件用可见字符表示。
一个字节: 8bit
ASCII 8bit
base64 6bit
base64编码编码与ascii编码转换:<>
以ab、abc为例
~]# echo -n ab|base64
YWI=
a ascii 97
b=98
c=99
ascii 01100001 01100010
base64 011000 | 01 0110 | 001000 <不够6位末尾添0补足>
Y | W | I =表示有用0补位
~]# echo -n abc|base64
YWJj
ascii 01100001 01100010 01100011
base64 011000 | 01 0110 | 001001 | 100011
Y | w | J | j
因此输出要为完整的base64编码时,24的倍数字节即为3的倍数
使用openssl生成随机数作口令:
~]# openssl rand -base64 9<此处9表示9字节 72 bite >
6ptxyuxOKs6L <因此对应base64位12字符>
生成8位随机数做密码
~]# openssl rand -base64 6
6qTJ19ag
使用随机数8个字符串口令:
~]# cat /dev/urandom | tr -dc '[[:alnum:]]' |head -c 8
~]# openssl rand -base64 6
创建私有CA必须满足以下条件:
创建私有CA:
openssl配置文件/etc/pki/tls/openssl.cof详解:
#######################
[ ca ] 一台主机可以搭建多个CA,此处设置的是默认CA
default_ca = CA_default
#######################
[ CA_default ] 定义默认CA的相关信息
dir = /etc/pki/CA <默认CA相关数据的存放路径>
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt <颁发的证书的索引数据库>
默认index.txt在/etc/pki/CA目录下不存在,需要手动创建
new_certs_dir = $dir/newcerts <新证书存放路径>
certificate = $dir/cacert.pem <根CA证书自签证明>
serial = $dir/serial <当前序列号><颁发的证书有序列号>
<当前编号表示下一个颁发的证书的编号><刚开始需要手动创建并指明初始编号>
crlnumber = $dir/crlnumber <证书吊销列表的编号>
crl = $dir/crl.pem <证书吊销列表存放路径>
private_key = $dir/private/cakey.pem <私钥存放路径>
...
#######################
##没有特别指定时的默认设置项
default_days = 365 <颁发证书的默认有效期>
default_crl_days= 30 <吊销列表有效期>
default_md = sha256
preserve = no
#######################
# 需要遵守的策略 match,optional,supplied
policy = policy_match
# For the CA policy
[ policy_match ] <搭建CA需要提供的相关信息>
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
....
[ policy_anything ] <另一个策略>
证书申请及签署步骤
创建私有CA:
生成自签证书的相关选项:
私有CA使用场景:企业内部使用与安全通信相关时,需要搭建私有CA;eg:https
===============================================
创建私有CA<创建CA主机>:
~]# cd /etc/pki/CA/ <先进入/etc/pki/CA/此目录>
①CA的私钥文件:/etc/pki/CA/private/cakey.pem
CA]#(umask 066; openssl genrsa -out private/cakey.pem -des 2048 )
-des <使用对称加密设置密码,防止私钥被盗用>
②生成自签名证书
CA]# openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem
填写相关信息:
:CN <国家>
:BJ <省份>
:BJ <城市>
:xixi.com <组织/公司>
:ops <部门>
:ca.xixi.com<网站的哪个主机>
注意:创建CA时并没创建/etc/pki/CA/index.txt和/etc/pki/CA/serial文件
因此CA此时直接给其他主机颁发证书会报错。
③创建/etc/pki/CA/index.txt 颁发证书的索引文件
CA]# touch index.txt
④创建/etc/pki/CA/serial 颁发证书的当前序号 (两个数字表示16进制)
CA]# echo 0F > serial
至此私有CA创建完成,可以给其他主机颁发证书。
++++++++++++++++++++++++++++++++++++++++++++++++
当有主机向CA主机发来证书申请请求时:
一、同意证书申请:
1)CA主机向请求证书颁发证书:颁发证书存放路径:/etc/pki/CA/certs/file.crt
CA]# openssl ca -in app.csr -out certs/app.crt -days 100
此时:/etc/pki/CA/index.txt和/etc/pki/CA/serial 默认会添加记录
对应我此处使用的记录:
CA]# cat index.txt
V 191208123005Z 0F unknown /C=CN/ST=BJ/O=xixi.com/OU=ops/CN=app.xixi.com
CA]# cat serial
10 则下一个颁发的证书编号为10,16进制数字
── certs
│ └── app.crt
├── newcerts <自动生成app.crt的拷贝文件放置于newcerts目录>
│ └── 0F.pem
2)将颁发的证书传给请求主机
CA]# scp certs/app.crt [email protected]:/data/app
================================================
此时另一主机某服务使用加密时向CA申请证书:
①新建文件夹:/data/app --> 此处仅参考使用<对应于某一服务目录下的配置文件>
~]# mkdir /data/app; cd /data/app<进入新建目录>
②生成对应服务的私钥文件
app]# (umask 077; openssl genrsa -out app.key 1024)
③生成证书申请文件<此文件为证书申请文件文件后缀一般为:filename.csr>
app]# openssl req -new -key app.key -out app.csr
填写相关信息:
:CN <国家>
:BJ <省份>
:BJ <城市>
:xixi.com <组织/公司>
:ops <部门>
:app.xixi.com<网站的哪个主机>
<因为采取的默认policy_match策略需要保持三项相同>
countryName = match <国家>
stateOrProvinceName = match <省份>
organizationName = match <组织/公司>
④将证书申请文件传给CA主机、等待CA主机颁发证书
app]# scp app.csr [email protected]:/etc/pki/CA/
##############################################
# 创建CA主机的脚本?
# CA主机给服务主机颁发证书脚本?
# 合并两个脚本至同一脚本中