常用安全技术

3A:

  • 认证:身份确认
  • 授权:权限分配
  • 审计:监控做了什么

安全通信

加密算法和协议

  • 对称加密:

  • 非对称加密

  • 单向加密:哈希(hash)加密

  • 认证协议

对称加密:

  • 加密和解密使用的是同一个密钥

  • 是通过将原始数据分割成若干块来逐个进行加密

  • 特点:效率高、速度快

  • 缺点:加密解密使用的密钥相同,需要提前把密钥发给别人且不能确定数据来自于发送方。

常见的对称加密算法:

  • DES:56位加密,把数据切成56Bit一块来进行加密

  • 3DES:DES的方式加密三次

  • AES:高级加密标准,密钥长度是可变的。 (128, 192, 256bits)

  • Blowfish,Twofish

  • IDEA,RC6,CAST5

非对称加密算法:

  • 密钥成对出现,加密和解密用的密钥不相同

  • 通信双方都需要各自的密钥和私钥

  • 特点:公钥加密、私钥解密,可以确认数据的来源

公钥:public key,公开给所有人,

私钥:secret key,private key  私有的,必须保证其私密性,用于自已加密签名
可以使用私钥来加密、也可以使用公钥来加密。

公钥和私钥是成对的,需要使用同一个人的钥匙才能进行解密

数字签名:采用私钥来进行加密、使用公钥来进行解密。(其他人的到的数据只能使用他的公钥来解密,这样就能确定数据的来源性)
非对称加密的两种使用场景:
数据安全:加密的数据只有自己能解开 --- 公钥加密、私钥解密 数据来源确认:确定数据的来源性 --- 私钥加密、公钥解密(实现数字签名) 缺陷:复杂程度高

常见的非对称加密常见算法:

  • RSA:三个发明人首字母简称。加密和数字签名都可以实现

  • DSA(Digital Signature Algorithm):数字签名算法,只能做来源确认,不能做数据加密。

  • ECC:椭圆曲线密码编码学,比RSA加密算法使用更小的密钥,提供相当的或更高等级的安全

对称加密算法适合加密大的数据

非对称加密算法合适加密小的数据

哈希(hash)算法

  • 哈希算法又称为散列算法,是一种单向的加密算法,是不可逆的。

  • 哈希算法算出来的结果叫做摘要(digest)。

  • 哈希算法固定时,摘要的长度是固定的大小,内容不同。摘要的内容由数据决定。

  • 通过摘要无法推出原有数据的内容

使用场景:
哈希算法:用来确认数据的完整性
类似于指纹,人不同,指纹就不同。得到指纹但是不知道他是谁。
可以用来检查数据是否被篡改,因为数据不变,摘要也不会发生改变。

常用的哈希算法

  • md5: 摘要是128bits字符 已经被破解了

  • sha1: 摘要是160bits字符 已经被破解了

  • sha224、sha256、sha384、sha512

两个账号的密码一样,但是得到的哈希摘要不一样,这是因为为了保证信息的安全,在加密密码之前加盐(随机字符串)处理,然后再进行加密。这样就保证了同样的密码,生成的哈希摘要不一样的原因。1

算法的组合使用

数据加密的实现

  • 采用对称和非对称密钥的组合使用。

  • 实现数据加密,无法验证数据完整性和来源

张三先使用对称加密来加密数据文件,然后使用李四的公钥来加密这个对称加密的密钥文件。最后把这两个文件发给李四。

李四收到这两个文件后,先使用自己的私钥解密加密的密钥文件得到对称加密的密钥,最后使用这个密钥来解密数据。

数字签名的实现

不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性

张三先使用哈希算法得到一个摘要,摘要放在数据的后面,然后使用私钥来加密这个摘要信息(数据没加密)。然后把数据和数字签名发给李四。

李四通过张三的公钥来解密得到加密的摘要信息,然后再对数据使用相同的哈希算法来进行加密。

最后对比两个摘要是不是一样。一样就确定了数据是张三发来的。

加密和签名的实现

即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性

方法一:使用这种方法实现,如果数据很大的话。效率就会很低

张三加密过程:先把数据使用哈希算法得到一个摘要,然后使用私钥进行加密得到签名。把数据放在这个签名的后面。
然后再使用接受者的公钥将他们进行加密。 李四解密过程:首先使用自己的私钥进行解开得到里面的签名和数据。然后使用同样的哈希算法对数据进行加密,并且使用张三的公钥将张三发送过来的摘要解密 最后对比两个摘要是都相同。

方法二:三种加密算法的综合使用

张三先使用哈希算法将数据进行加密,将得到的摘要信息附加到数据后面,在使用自己的私钥加密摘要信息的到数字签名。
然后使用对称加密的方式将他们全部加密,再使用李四的公钥来加密这个对称密钥文件。 李四得到数据以后,首先通过自己私钥解密得到对称密钥,然后再进行对称解密得到数据和张三的数字签名。
再通过张三的公钥来解密这个签名得到张三生成的摘要信息。再通过同样的哈希算法生成一个摘要。对比两个摘要是否一样。

密钥交换

  • 方法一:对称密钥发给对方:使用对方的公钥加密,对方使用私钥来进行解密。

  • 方法二:DH算法:生成对称(会话)密钥

CA和证书

  • PKI:Public Key Infrastructure 公共密钥加密体系

  • 签证机构:CA(Certificate Authority),

  • 注册机构:RA

  • 证书吊销列表:CRL,存放被吊销了的证书

CA的证书颁发过程:

A、B直接把公钥发送给对方,因为存在中间人攻击,所以谁也不敢信。后面就需要一个权威机构来进行担保。

A、B的公钥通过认证机构CA进行签名(私钥加密),签名完以后加入一些其他信息,比如有限期、说明信息等。这样就行成了一个证书。

例如A和B需要通信的时候,A就把自己的证书发送给通信的对方,B得到这个证书以后,通过CA公钥的解密得到了A的公钥。

根CA会给子CA颁发证书,子CA再给用户颁发证书。

例如:B想要解开A发送给他的证书,就需要拿到CA1的公钥,因为CA1的证书是根CA给的,所以根CA就有CA1的公钥。B利用根CA个CA1颁发的证书,间接就得到了CA1的公钥,就可以解开A的证书。

#任何一个主机(windows)都有最根上面的根CA的证书。(系统安装以后就自带的)

加密相关的一些安全协议

安全协议SSL\TLS

  • SSL:安全套接层,后来改名为TLS协议。

  • TLS: Transport Layer Security(传输层安全性协议),里面集成和很多功能。

  • TLS是一个通用的协议,可以实现各种不加密协议的加密。

  • TLS协议的作用:用于在两个通信应用程序之间提供保密性和数据完整性

HTTPS协议

http协议是不加密的,http协议+TLS协议就是https协议

HTTPS的通信过程:

服务端配置:会向指定CA组织申请证书

客户端发送https请求

服务器将自己的证书发送给客户端

客户端校验证书的有效性(是否是权威CA颁发、是否过期等)

如果校验通过,客户端就使用服务端的公钥(服务端发送过来的证书中有)生成一个随机的key发送给服务端

服务端使用自己的私钥来解密得到这个key

后面双方就可以使用这个key(对称密钥来进行数据的传输)

openssl

  • openssl是一个开放源代码的软件库包。

  • 应用程序可以使用这个包来实现数据加密、身份确认等功能。

  • 这个包广泛被应用在互联网的网页服务器上

openssl软件包的组件:
libcrypto:用于实现加密和解密的库

libssl:用于实现ssl通信协议的安全库

openssl:多用途命令行工具  #最长用的一个组件,里面的核心工具:openssl

Base64编码

作用:实现编码转换的作用。实现把ascii码中不可见的字符转换为可见的字符

ascii中可见的字符有64个

ascii码可见的字符:aA-zZ 0-9 = / 26+26+10+2=64

openssl命令

  • 交互式(默认)

  • 批处理:

查看openssl的版本

交互式:
[root@ubuntu1804 ~]#openssl
OpenSSL> version 批处理式:
root@ubuntu2004:~# openssl version
openssl命令实现对称加密

enc:对称加密算法工具,实现对称加密和解密

#命令格式
openssl enc -e -des3 -a -salt -in 需要加密的文件 -out 加密后的文件 -e:表示加密 -des3:表示使用3des这种非对称加密算法 -a:表示使用Base64进行编码转换 -salt:表示加盐 -in:表示需要加密的文件 -out:后面存放加密生成的结果的文件 解密:把-e换成-d就行了
openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile -d:表示解密
openssl实现单向哈希加密

dgst:用于数据摘要,摘要就是使用哈希算法单项加密得到的。

#格式
openssl 使用的加密算法 需要加密的文件 #dgst可以省略 例如:openssl sha512 filename #或者使用sha1sum| sha256sum | sha512sum filename 得到的值是一样的,因为他们使用的算法是一样的。 [root@vms88 ~]# sha1sum aa
f572d396fae9206628714fb2ce00f72e94f2258f aa
[root@vms88 ~]# openssl sha1 aa
SHA1(aa)= f572d396fae9206628714fb2ce00f72e94f2258f 哈希算法:md5, sha1, sha256,sha512…
openssl 命令生成用户密码

passwd:生成散列密码。生成各种口令密文

格式:
openssl passwd --help 例如: openssl passwd -6 #会要求输入两次密码且会自动添加对应的盐,也可以人为指定盐 #CentOS7也可以使用python来生成sha512加密的口令: -6:表示采用sha512这种加密算吗(Centos7上面没有)
-5:sha256算法
-1:md5算法
openssl 生成随机数

rand:生成随机字节

/dev/random:结合硬件信息来生成字符。随机数用光了就会阻塞程序的执行

/dev/urandom:随机数也是来自硬件,随机数用光了会用软件模拟生成伪随机数。不会阻塞运行。
#使用rand子命令来实现随机数的生成。

格式:
openssl rand -base64|-hex NUM NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2 openssl rand -base64 10 随机生成一个10个字节的符号(字节不是3的整数倍就会出现等号的情况,=号是用来占位的,四个字节一组)
范例:随机生成十个用户,每个用户分配一个随机的密码。
#!/bin/bash
for i in {1..10};do #{1..10}表示生成1..10的一个数字列表
id user$i &> /dev/null || useradd user$i #使用id命令查看用户是否存在,不存在就创建这个用户
passwd=`openssl rand -base64 10` #获取到一个随机密码
echo $passwd | passwd user$i --stdin &> /dev/null #给生成的用户指定密码
echo user$i:$passwd >> user.txt #将密码保存到一个指定文件
done

openssl命令实现 PKI

PKI:Public Key Infrastructure 公共密钥加密体系

生成私钥:

openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE [指定的对称加密算法]  [NUM_BITS,默认2048]

-out:表示生成私钥的输出文件名

# 也可以给生成的私钥进行堆成加密

对称加密算法:man genrsa
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea

解密加密了的私钥

如果在生成私钥的时候采用堆成加密的方法加密了,解密的方法是:

#格式

openssl rsa -in 加密了的私钥文件 -out 解密后的文件
公钥是隐藏在私钥内部的,可以通过私钥的到公钥。
#从私钥中提取出公钥

openssl rsa -in 私钥文件 -pubout -out 提取出来保存的公钥文件

建立私有CA实现证书申请颁发

建立私有CA的工具:

  • OpenCA

  • openssl

openssl的配置文件

/etc/pki/tls/openssl.cnf

openssl的这个配置文件主要是配置CA证书颁发和申请的一些配置信息。

配置文件说明
[ ca ]
default_ca = CA_default # 默认使用的CA ####################################################################
[ CA_default ]
dir = /etc/pki/CA # 存放和CA相关的文件的目录(CentOS7这个文件默认存在)
certs = $dir/certs # 存放颁发的证书 Cert:证书
crl_dir = $dir/crl # 存放被吊销的证书
database = $dir/index.txt # 存放ca的索引(需要人为创建)
new_certs_dir = $dir/newcerts # 存放新证书的位置
certificate = $dir/cacert.pem # ca的自签名证书
serial = $dir/serial # 证书的编号(第一次需要人为创建并编号,后面会自动递增) serial:连续的
crlnumber = $dir/crlnumber # 证书吊销列表的编号
crl = $dir/crl.pem # 证书吊销列表的文件
private_key = $dir/private/cakey.pem# CA的私钥
x509_extensions = usr_cert # The extensions to add to the cert
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options policy = policy_match #指定使用的匹配策略 # For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional 三种策略:
match匹配:用户申请证书的时候必须和CA一致(国家,省份,组织)
optional可选
supplied提供

创建私有CA

  • 创建对应文件

  • 给自己颁发自签名证书

1.创建CA相关文件
#创建CA所需要的文件:数据库文件和证书索引文件
#database = $dir/index.txt # database index file.
#serial = $dir/serial # The current serial number #生成证书索引数据库文件 只需要创建文件就行,内容不需要手动维护
touch /etc/pki/CA/index.txt #指定第一个颁发证书的序列号
echo 01 > /etc/pki/CA/serial
2.给CA颁发自己的证书
(1)生成CA的私钥
#private_key     = $dir/private/cakey.pem# The private key
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)
(2)生成CA的自签名证书
#certificate     = $dir/cacert.pem
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem #选项说明
-new:生成新证书签署请求 -x509:表示证书的格式 -key:生成请求时用到的私钥文件 -days n:证书的有效期限 -out /PATH/TO/SOMECERTFILE: 证书的保存路径

范例:Centos8搭建私有CA

  • 1.根据openssl对应的配置文件创建对应的文件

  • 2.创建私钥文件

  • 3.生成自签名证书

#创建对应的文件(CentOS7上面默认存在)

[root@centos8 ~]#mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
#index.txt和serial文件在颁发证书时需要使用,所以需要提前创建

[root@centos8 ~]#touch /etc/pki/CA/index.txt
[root@centos8 ~]#echo 01 > /etc/pki/CA/serial
#在指定的位置创建CA的私钥

[root@centos8 ~]#cd /etc/pki/CA/
[root@centos8 CA]#(umask 066; openssl genrsa -out private/cakey.pem 2048)
#给CA自己颁发自签名的证书

[root@centos8 ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days
3650 -out /etc/pki/CA/cacert.pem
#需要交互输入国家、省、地区、组织等内容 #查看自签名证书的信息
[root@centos8 ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text -in:指定输入的文件 -noout:不输出为文件 -text:以文本方式来进行显示

用户实现证书的申请

  • 1.用户生成证书的私钥,然后利用这个私钥完成证书的申请

  • 2.利用这个私钥文件来生成证书申请文件(若是match这种策略。填写的 国家 省 组织必须一致)

  • 3.将生成的证书申请文件给CA,由CA颁发证书

采用match这种策略这三个选项必须保持一致,如果采用的是option这种策略的话就不用保持一致都可以
#生成私钥文件

[root@centos8 ~]#(umask 066; openssl genrsa -out /data/app1/app1.key 2048)
#私钥一般使用key作为后缀要标识
#利用私钥生成证书申请文件

[root@centos8 ~]#openssl req -new -key /data/app1/app1.key -out /data/app1/app1.csr

#证书申请文件的后缀一般都是以csr为后缀作为标识

#交互式输入信息的时候 国家 省 组织不需要保持一致,其他随意
#CA通过证书申请文件来颁发证书
[root@centos8 ~]#openssl ca -in /data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt -days 1000 -in:输入文件 -out:输出文件 #查看颁发的证书文件
openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -text [root@Centos8 CA]# tree /etc/pki/CA
/etc/pki/CA
├── cacert.pem
├── certs
│   └── app1.crt #生成的证书文件
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old #前一个文件的备份
├── newcerts
│   └── 01.pem #和app1.crt是同一个东西,自动生成的一个备份文件
├── private
│   └── cakey.pem
├── serial
└── serial.old #serial:存放的是下一个证书的证书编号
#查看证书的有效性
openssl ca -status 01 #01就是这个证书的标号
将证书相关文件发送到用户端使用
#cp /etc/pki/CA/certs/app1.crt /data/app1/ #放到用户端的指定位置
后缀规定:
.crt #证书文件的标识 .csr #证书申请文件的标识 证书申请完成后,这个证书申请文件就没啥用了 .key #私钥的标识 .pem也是私钥的标识,但是windows不是别pem结尾的文件

一个证书申请文件只能申请一次证书。

实现一个申请文件申请多个证书的方法;

[root@Centos8 CA]# cat index.txt.attr
unique_subject = yes #把yes变为no就可以了

证书的吊销

例如:
openssl ca -revoke /etc/pki/CA/newcerts/11.pem # 11.pem文件标识要吊销的证书文件。 #查看证书的状态 从index这个文件也能看出来 V:标识生效的 R:标识无效的证书
openssl ca -status 11

生成证书吊销列表文件

公开被吊销的文件。其他用户可以获取已经吊销了的证书文件列表

#需要创建一个clinumer文件才可以  吊销证书也需要一个吊销证书的number 类似于index.txt

#这个文件默认不存在,需要手动创建出来

echo 01 > /etc/pki/CA/crlnumber

openssl ca -gencrl -out /etc/pki/CA/crl.pem   #证书吊销文件的路径是约定好的

Linux 加密安全和私有CA的搭建方法的更多相关文章

  1. Linux操作系统安全-局域网私有CA(Certificate Authority)证书服务器实战篇

    Linux操作系统安全-局域网私有CA(Certificate Authority)证书服务器实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.试验架构说明 node101 ...

  2. linux中yum本地私有仓库安装搭建《全面解析》

    目录 一:yum本地仓库安装 1.yum简介 2.yum安装解析 二:yum安装的生命周期 三:yum私有仓库作用与必要性 四:搭建yum私有仓库 本地版本 1.下载必须的软件包 2.创建软件仓库(就 ...

  3. KPI 私有CA

    openssl总结及私有CA的搭建 搭建CA服务器 CA(证书颁发机构)服务器配置图解过程(1) 私有CA服务器的搭建 搭建CA服务器 使用OpenSSL搭建CA Linux加密和解密.openssl ...

  4. Linux系统搭建私有CA证书服务器

    一.CA简介 CA是什么?CA是Certificate Authority的简写,从字面意思翻译过来是凭证管理中心,认证授权.它有点类似我们生活中的身份证颁发机构,这里的CA就相当于生活中颁发身份证的 ...

  5. linux下安装EJBCA 搭建私有CA服务器

    linux下安装EJBCA 搭建私有CA服务器 EJBCA是一个全功能的JAVA的CA系统软件,我们可以用此搭建私有CA服务器: 一:首先我的测试环境: 1.  linux mint18.3 62位: ...

  6. linux基础之加密解密、PKI及SSL、创建私有CA

    加密解密基础 1. 对称加密: 加密和解密使用同一个密钥 常见的加密算法有:DES.3DES.AES.Blowfish.Twofish.IDEA.RC6.CAST5 特性: 1. 加密.解密使用同一个 ...

  7. Openssl与私有CA搭建

    转自:http://www.tuicool.com/articles/aURnim 随着网络技术的发展.internet的全球化,信息共享程度被进一步提高,各种基于互联网的应用如电子政务.电子商务日益 ...

  8. 搭建私有CA

    一.实验目的 搭建私有CA并使其可以实现公司内部的的签名服务. 二.实验环境: 系统架构:Centos7(服务器).Centos6(需要申请证书的服务器)需要的软件包:openssl.openssl- ...

  9. 搭建私有CA并基于OpenSSL实现双向身份认证

    0x00 前言 互联网上的Web应用由于用户数目广泛,都是采用单向身份认证的,只需要客户端验证服务端的身份.但如果是企业内部的应用对接,客户端数量有限,可能就会要求对客户端也做身份验证,这时就需要一个 ...

随机推荐

  1. vuepress搭建UI组件库文档踩坑篇

    为了实现组件效果预览及代码展示可折叠功能,使用了插件vuepress-plugin-demo-container 相关配置可参考官网说明文档 第一步 安装插件 npm i - D vuepress-p ...

  2. SyntaxError: Non-UTF-8 code starting with '\xef' in file(已解决)

    错误原因: python代码中出现了中文字符 解决方案: 在python代码文件的第一行(必须是第一行)添加如下代码(随编码不同自行修改): #coding=utf-8

  3. 微信小程序开发 记录

    采坑了 微信小程序--TabBar不出现的一种原因 学习微信小程序中,遇到底部的TabBar不出现的问题.经过多番尝试,终于解决问题.在此记录问题产生的原因和对策.下面先描述错误现象,接着指出错误原因 ...

  4. nvm安装与使用及乱码问题

    前端开发工作中经常负责多个项目(新项目.多年的老项目及团队合作项目),经常会遇到npm install安装依赖包或者启动本地服务时依赖报错的情况,大多数是因为NodeJS和npm与依赖之间版本的问题, ...

  5. Docker容器固定ip

    Docker容器固定IP 必须停止docker服务才能创建网桥 查看docker服务状态 停止docker服务 启动docker服务 [root@docker Tools]# systemctl st ...

  6. .NET中检测文件是否被其他进程占用

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 一.检测文件是否被进程占用的几种方式 在.NET中主要有以下方式进行检测文件是否被进程占用的几种方式: 通过直接打开文件等 ...

  7. JavaGUI——Java图形用户界面

    1.Java GUI 概述 GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对 ...

  8. 华为AppLinking中统一链接的创建和使用

    ​ 运营的同学近期在准备海外做一波线下投放,涉及到海外的Google Play,iOS设备的App Store,以及华为渠道的AppGallery. 其中运营希望我们能够将三个平台的下载整合到一个链接 ...

  9. 又拍云 Redis 的改进之路

    作为推出国内首创可编程 CDN 服务的专业云服务提供商,又拍云利用 CDN 边缘网络规模和性能,允许客户自定义编写规则来满足常用业务场景.而为了保证这些源数据,如边缘重定向.请求限速.自定义错误页面. ...

  10. 无语怎么这么简单!——python实现中文字幕雨+源代码(源码可赠)

    大家好鸭,我是小熊猫 最近浏览了很多关于用Python和Pygame实现代码雨的案例,发现很多都是没有深入讲解代码的整个实现过程,从0到1教会你制作中文文字雨(其实啥字好像都可以). 然后在介绍的过程 ...