数据安全的相关术语:
NIST规定安全协议的应该具备的特性:
保密性:
数据保密性
隐私性
完整性:
数据完整性
系统完整性
可用性:
安全攻击:
被动攻击:窃听
主动攻击:伪装、重放、消息篡改、拒绝服务
安全机制:
加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
认证、
访问控制、
数据保密性、
链接保密性
无连接保密性
选择域保密性
流量保密性
数据完整性
不可否认性
密码算法和协议:
对称加密
公钥加密
单向加密
认证加密
所谓的数字签名就是事先用单向加密技术对数据加密,然后使用私钥对数据指纹进行加密,然后放在数据的尾部进行传送
linux系统上的两个实现加密的协议:openssl、gpg(pgp)
常见的加密算法和协议:
对称加密:加密和解密使用同一个秘钥
DES算法:data encryption standard
3DES算法:
AES:128bits,192bits,258bits,384bits,512bits
Blowfish
Twofish
IDEA
RC6
CAST5
对称加密特性:
1、加密解密使用同一个秘钥
2、将原始数据分割成固定大小的块,逐个进行加密
对称加密缺陷:
1、秘钥过多。需要不同的秘钥为每一次加密提供加密,
2、秘钥分发有困难。
公钥加密:(即非对称加密)
公钥:公开给所有人。pubkey
私钥:自己留存,必须保证其私密性。 secret key
特点:用公钥加密的数据,只能使用与之配对的私钥解密
身份认证(数字签名):
秘钥交换:发送方用对方的公钥加密一个对称秘钥,并发送给对方
数据加密:使用单向加密算法对数据进行加密
常见算法:RSA,DSA,ELGamal(商业算法)
单向加密:只能加密,不能解密,用来提取数据指纹
特性:定长输出、雪崩效应
算法:
md5:128bits
sha1:160bits
sha224:
sha256
sha384
sha512
功能:实现数据的完整性加密,主要用来提取数据指纹
秘钥交换:IKE
公钥加密
DH(deffie-hellman)算法
PKI:public key infrastructure 公钥基础设施,包含以下几个结构
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
x509:是目前证书的标准,定义了证书的格式以及认证协议标准
证书内容:版本号、序列号、签名算法ID、发行者名称、有效期限、主题名称(证书拥有者)、主体公钥、发行者唯一标示、主体唯一标识、扩展信息、发行者签名
SSL:secure socket layer 称为安全的套接字层是Netscape公司开发的,主要用于提高应用程序之间的数据安全系数
SSL协议主要提供三方面的服务:
一 用户和服务器的合法性认证。
二、加密数据已隐蔽被传送的数据。
三、保护数据的完整性。SSL涉及所有的TCP/IP应用程序,是一个保证任何安装了安全套接字层的客户和服务器之间安全的协议
TLS 1.0 :transport layer secure 相当于SSL 2.0 的增强版,安全的传输层协议,协议结构包括TLS记录协议和TLS握手协议。
用于两个同信的应用层之间提供保密性和数据完整性。TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。较低的层为TLS协议记录,位于某个可靠的传输协议(如TCP)上面。
注意:目前使用广泛的是TLS 1.2版本,LLS/TLS 建立会话是基于ip的而不能是主机名,因此一个应用层程序同时只能维持一个ssl会话。
建立ssl或者tls握手规则4步:
1.验证证书的发放者的证书的确是其自己的证书
2、验证ca的来源合法性
3、验证数据的完整性
4、验证证书的有效期限(就是验证证书是否已过期)
opessl程序包:是ssl协议的开源实现。
opessl包含三个组件:
openssl:多用途的命令行工具
libcrypto:公共加密库:(程序员使用)提供对外接口
libssl:库,实现了ssl和tls库,并提供对外接口(程序员使用)
[root@localhost lib64]# whereis libssl
libssl: /usr/lib64/libssl3.so /usr/lib64/libssl.so
[root@localhost lib64]# whereis libcrypto
libcrypto: /usr/lib64/libcrypto.so
查看当前系统的openssl组件的版本信息:openssl version
[root@localhost lib64]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
digest :摘要信息
algorithms:算法
symmetric:对称
encrypt:加密
decrypt:解密
openssl命令使用格式:
openssl command [ command_opts ] [ command_args ]
openssl 标准命令 消息摘要命令 加密命令 摘要算法 消息摘要算法 公钥算法
可使用openssl -h列出可供使用的命令:
标准命令、消息摘要命令、加密命令
对称加密:
工具:openssl enc、gpg
算法:des3、aes、blowfish、twofish
enc命令: openssl enc [-e] [-d] [-a/-base64][-salt] [-in filename] [-out filename]
[root@localhost ~]# openssl enc -e -des3 -a -in aa -out aa.cipher.txt
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@localhost ~]# cat aa.cipher.txt
U2FsdGVkX1/Ga1aIuR/VbIAIeP1UPYzH/jVXKWXR9DA/tLJjGWJ2xc9i9oojbYSd
[root@localhost ~]# openssl enc -d -des3 -a -salt -in aa.cipher.txt -out aa
单向加密:
工具:md5sum sha1sum sha224sum sha256sum sha284sum sha512sum shasum
单向加密是用来提取数据指纹的,不能解密
md5sum -t file 表示为file文件提取数据指纹,可以使用重定向到一个文件中
md5sum -c|--check file 表示检查文件中的数据指纹
dgst命令:
openssl dgst -md5 -out out_to_file file 也可以不指定-out而使用重定向到文件中,也可以使用sha1sum等
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:
CBC-MAC
HMAC:使用md5或sha1算法
passwd命令:用来手动生成用户密码
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
[-crypt] :使用crypt加密算法
[-1] :使用基于BSD风格的md5加密算法
[-apr1] :使用apr1加密算法
[-salt string] :表示加入的杂质,这个参数可以指定加入的杂事string,但是如果从终端输出密码,会加入随机的杂质,因此可以不直接指定-salt选项
[-in file] :表示可以从文件中取密码
[-stdin] :表示可以从表中输入读取密码,例如echo 1111 | openssl passwd
[-quiet] :表示静默模式,不输出警告信息
例:
[root@localhost ~]# sha1sum aa > aa.txt
[root@localhost ~]# cat aa.txt
f0a57a573e3d4932c986ff1eeea8d164f5ead5f7 aa
[root@localhost ~]# sha1sum -c aa.txt
[root@localhost ~]# openssl dgst -md5 -out aa.txt aa
[root@localhost ~]# cat aa.txt
MD5(aa)= 0c258093fdb6cce07bc0633fcc504b07
[root@localhost ~]# openssl passwd -salt xx -1
Password:
$1$xx$gnNqGXcSDxBnqB0EA8G3a/
[root@localhost ~]# openssl passwd -salt xx
Password:
xx5R6mlcGJ2K.
[root@localhost ~]# openssl passwd -salt xx -apr1
Password:
$apr1$xx$DkmE5ZyxWilgCxqivdw.q0
[root@localhost ~]# echo 111111 > aa
[root@localhost ~]# cat aa
111111
[root@localhost ~]# openssl passwd -salt ee -in aa
eeEwBNf04p1x6
[root@localhost ~]#
[root@localhost ~]# echo 111111 | openssl passwd -salt ee -1 -stdin
$1$ee$BwFFYsLTlJsb/wy1PTOna/
公钥加密:
算法:RSA ELGamal
工具:gpg,openssl rsautl
数字签名:
算法:RSA/DSA/ELGamal
秘钥交换:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
rsautl命令:本指令能够使用RSA算法签名,验证身份, 加密/解密数据
openssl rsautl [-in file] [-out file] [-inkey file]
[-pubin] [-certin] [-sign] [-verify] [-encrypt]
[-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump] [-asn1parse]
OPTIONS :
-in filename
指定输入文件名。缺省为标准输入。
-out filename
指定输入文件名, 缺省为标准输出。
-inkey file
指定我们的密钥文件, 格式必须是RSA密钥文件。(默认表示私钥)
-pubin
指定我们的公共密钥文件。说真的我还真不知道RSA的公共密钥文件有什么用,一般公共密钥都是放在证书里面的。
-certin
指定我们的证书文件了。
-sign
给输入的数据签名。需要我们的私有密钥文件。
-verify
对输入的数据进行验证。
-encrypt
用我们的公共密钥对输入的数据进行加密。
-decrypt
用RSA的私有密钥对输入的数据进行解密。
-pkcs, -oaep, -ssl, -raw
采用的填充模式, 上述四个值分别代表:PKCS#1.5(缺省值), PKCS#1 OAEP, SSLv2里面特定的填充模式,或者不填充。如果要签名,只有-pkcs和-raw可以使用.
-hexdump
用十六进制输出数据。
-asn1parse
对输出的数据进行ASN1分析。看看指令asn1parse吧。该指令一般和-verify一起用的时候威力大。
本指令加密数据的时候只能加密少量数据,要加密大量数据,估计要调API.我也没试过写RSA加密解密的程序来玩。
对一个文件进行数字签名(这个内容不能太大),然后对其进行验证
[root@localhost tmp]# openssl rsautl -in a.txt -sign -inkey b.txt -out d.txt
[root@localhost tmp]# openssl rsautl -verify -inkey b.txt -in d.txt
对一个文件进行加密和解密
先生成秘钥对(私钥)
[root@localhost ~]# openssl genrsa -out aa.txt 1024
从私钥中提取公钥
[root@localhost ~]# openssl rsa -in aa.txt -pubout
用公钥对文件进行加密
[root@localhost tmp]# openssl rsautl -in a.txt -out d.txt -pubin -inkey c.txt -encrypt
用私钥对加密后的文件进行解密
[root@localhost tmp]# openssl rsautl -decrypt -in d.txt -inkey b.txt
sdfasodif
生成秘钥对的工具:
gendsa命令:基于DSA算法
genrsa命令:基于RSA算法
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER]
[-in filename] [-passin arg] [-out filename] [-passout
arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout]
[-modulus] [-check] [-pubin] [-pubout] [-engine id] bits
[-in filename] :指定从文件中读取一个秘钥
-out file :指定创建后的私钥保存的位置而不是直接输出到屏幕
[-des] [-des3] [-idea] :为私钥加密
[-check] :检查私钥的
[-pubin]
注意:创建的公钥都是包含在私钥中的,需要使用命令从私钥中提取公钥
创建一个私钥并输出到文件中
[root@localhost ~]# openssl genrsa -out aa.txt 1024
[root@localhost ~]# cat aa.txt
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDFAqWF/3pozvJ3LDCcVbwn4O6NI5oqqyMNdiXK64lmiCeBm1FI
qv96/2vfBbI3OPV5y6He67zfGs1oC8Z2NHNUZzn7Hl2noGQK/PkECPfSEJ5NR6tP
V/5CfsuLOxPX9mgouqmT9cVxEERtP38dRjHasElI3LUQcYsElngBTsyuXwIDAQAB
AoGAVUn0BrK3d7A/37/Nu6CSOGF0ZL3I/DfikO1ZJyQY8751+/IVmnQM7l6tgHui
z61k+Dlj9nHv7lZYHncakAnc8yavBG86Jcy7oAg7/VjxIU2+sqc6HJXXAl3zZM4n
/QRF0BHyf8qPxzOffQ/llaFPN5/D+uGs8OLHrdVMMG0cgsECQQDqJ6vfc22FnUvw
cTlaFB/C1QglovTicEgOqCLl7VcO/ArTkVwCppEThkE0VnsW5LrYvfb2k25GtCUI
86TmsW+pAkEA12PZYqijgMucnldzS9SytgUI4M7AmYq6Zv29InheEqvHpSrmAu7I
25YRV1MsEN491/HeiMNf1TlmDv8hT/0SxwJBAIOaXG0wUOQB7kZrPJK2MMuuM/AD
UKNb/APQ2BxmcsHHQsZ6Mj6DI5LXqBokaPYLBEEBM6aOYjJ22UHYvluyalECQQDA
dAlDLCeb51Kz8LOmaBCervT12gchqmFPsR0T9bUovbCPljsbF70E55vrCPfwwoND
tmv+i4PPg4/7il97l0b1AkEAgBCO1Y4DhqBo5TTCbP8VuoEekIMRkt9s76higs3U
aMy0bo8pLKdTFnau/a8Ak/BPVvsDSWsYer7B5sKVe8w2Xw==
-----END RSA PRIVATE KEY-----
从指定的私钥中提取公钥
[root@localhost ~]# openssl rsa -in aa.txt -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFAqWF/3pozvJ3LDCcVbwn4O6N
I5oqqyMNdiXK64lmiCeBm1FIqv96/2vfBbI3OPV5y6He67zfGs1oC8Z2NHNUZzn7
Hl2noGQK/PkECPfSEJ5NR6tPV/5CfsuLOxPX9mgouqmT9cVxEERtP38dRjHasElI
3LUQcYsElngBTsyuXwIDAQAB
-----END PUBLIC KEY-----
[root@localhost ~]# openssl rsa -in aa.txt -pubout -out ab.txt
writing RSA key
[root@localhost ~]# cat ab.txt
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFAqWF/3pozvJ3LDCcVbwn4O6N
I5oqqyMNdiXK64lmiCeBm1FIqv96/2vfBbI3OPV5y6He67zfGs1oC8Z2NHNUZzn7
Hl2noGQK/PkECPfSEJ5NR6tPV/5CfsuLOxPX9mgouqmT9cVxEERtP38dRjHasElI
3LUQcYsElngBTsyuXwIDAQAB
-----END PUBLIC KEY-----
证书申请及签署步骤:
1、生成申请请求:
2、RA核验
3、CA签署:
4、获取证书,从CA的证书库中获取
如何创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
(1)创建所需要的文件或目录
#touch index.txt
#echo 01 > serial
#
(2)CA自签证书
#创建私钥
(umask 077;openssl genrsa -out /etc/pki/CA/privite/cakey.pem 2048)
#openssl req -new -x509 -key /etc/pki/CA/private/cakeu.pem -days 7300 -out /etc/pki/CA/cacert.pem
练习:
1、创建所需数据存放文件,以及存放序列号的文件
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 >serial
[root@localhost CA]# ls
cacert.pem certs crl index.txt newcerts private serial
2、创建ca的秘钥对
[root@localhost CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
..............................................+++
................+++
e is 65537 (0x10001)
3、CA自签证书
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:henan
Organization Name (eg, company) [Default Company Ltd]:henancom
Organizational Unit Name (eg, section) []:henancom
Common Name (eg, your name or your server‘s hostname) []:hostname
Email Address []:admin@lpw.com
[root@localhost CA]# ls
cacert.pem certs crl newcerts private
4、私有ca创建完成,接下来是需要使用证书的机构向ca申请签证
在另外一个主机上,加入为http服务器创建证书
首先、申请证书的服务器要有自己的秘钥对:手动生成
[root@localhost httpd]# (umask 077; openssl genrsa -out /etc/httpd/httpd.key 1024)
Generating RSA private key, 1024 bit long modulus
..........................................++++++
...........................................++++++
e is 65537 (0x10001)
[root@localhost httpd]# ls
conf conf.d httpd.key logs modules run
5、申请证书的主机向ca申请签证,首先生成待签证的证书请求
[root@localhost httpd]# openssl req -new -key /etc/httpd/httpd.key -days 365 -out /etc/httpd/httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:henan
Organization Name (eg, company) [Default Company Ltd]:henancom
Organizational Unit Name (eg, section) []:henancom
Common Name (eg, your name or your server‘s hostname) []:hostname
Email Address []:admin@lpw.com
Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:111111
An optional company name []:111111
[root@localhost httpd]# ls
conf conf.d httpd.csr httpd.key logs modules run
6、将待签证证书交给CA来签证
[root@localhost CA]# scp root@172.16.249.236:/etc/httpd/httpd.csr ./
root@172.16.249.236‘s password:
httpd.csr 100% 753 0.7KB/s 00:00
[root@localhost CA]# ls
cacert.pem crl index.txt private
certs httpd.csr newcerts serial
7、CA为处理签证请求
[root@localhost CA]# openssl ca -in ./httpd.csr -out ./httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 15 05:55:00 2015 GMT
Not After : Sep 14 05:55:00 2016 GMT
Subject:
countryName = CN
stateOrProvinceName = henan
organizationName = henancom
organizationalUnitName = henancom
commonName = hostname
emailAddress = admin@lpw.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
12:11:1A:53:D3:0A:EC:05:58:7B:DE:04:09:5D:0E:F5:CA:3A:5D:3D
X509v3 Authority Key Identifier:
keyid:8A:BA:AE:18:22:9C:C5:60:AE:70:43:55:51:81:16:A4:86:2A:D0:65
Certificate is to be certified until Sep 14 05:55:00 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost CA]#
8、将签好的证书交给申请者,或者申请者自己获取
[root@localhost httpd]# scp root@172.16.249.125:/etc/pki/CA/httpd.crt ./
root@172.16.249.125‘s password:
httpd.crt 100% 3831 3.7KB/s 00:00
[root@localhost httpd]# ls
conf conf.d httpd.crt httpd.key logs modules run
9、申请者的证书已注册好,可以在对外提供服务时提供自己的证书
10、证书吊销过程。
linux系统上有两个随机生成器
/dev/random : 仅从熵池中返回随机数,若熵池中随机数用完,就会阻塞,暂时不能继续取随机数
/dev/urandom :从熵池中返回随机数,若熵池中随机数用尽,则利用软件生成伪随机数,不会阻塞
生成随机数:rand命令
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
可以使用-out指定输出到某个文件中,而不是输出到屏幕
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
hex表示16进制数
[root@localhost ~]# openssl rand -base64 4
zYbwOA==
[root@localhost ~]# openssl rand -hex 4
1d224208
本文出自 “七颗星” 博客,请务必保留此出处http://qikexing.blog.51cto.com/7948843/1698792
原文地址:http://qikexing.blog.51cto.com/7948843/1698792