您的位置:首页 > 运维架构 > Linux

Linux中加密和解密技术及CA认证

2016-04-08 21:48 579 查看
网络安全通信:

为了不让自己的隐私,信息等随随便便就能让获取,所以需要对数据进行加密处理,保证数据在传输的过程中不被别人获取,网络通信安全需要达到以下三个目的:
1、数据的保密性
2、数据的完整性
3、来源的合法性
解决网络安全通信的方案:
SSL:Secure Sockets Layer 安全的套接层,位于应用层和传输层之间,为数据通信提供安全支持,可在服务端和客户端同时支持一种加密算法。目前版本SSLV2,SSLV3(常用)。
HTTP调用SSL协议就变成HTTPS,多了层加密解密功能。
SSL协议分为两层: 1、 SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据分装、压缩、加密等基本功能的支持。 2、 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。加密解密技术: 对于传统的加密方法:比如替代加密算法、置换加密方法 对于现代的加密方法:现代块加密方法 加密:明文通过一定算法和密钥转换成密文 解密:密文通过一定算法和密钥还原成明文也可通过安全服务来防止别人获取: 认证机制:比如CA 访问控制机制一、先说一说加密技术: 密钥是什么:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数,“秘密的钥匙” 1)、对称加密: 加密解密使用的都是同一个密钥, 将原始数据分隔成固定大小的块来进行逐个加密,可以实现数据传输的完整性。 缺陷:导致密钥过多,密钥分发困难 用到的算法:
DES,3DES,AES,Blowfish,twofish 2)、公钥加密:密钥被分为公钥和私钥,并成对出现。用公钥加密的数据,只能用与之配对的私钥解密,反之亦然,可以实现数据的保密性 公钥:从私钥中提取,可公开给所有人 私钥:通过工具创建,使用者自己留存,必须保证其私密性
用到的算法: RSA:既能签名又能解密 DSA:数字签名标准,不能加解密 用途: 数字签名:主要在于让接收方确认发送方的身份 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方 数据加密: 3)、单向加密: 只能加密、不能解密,即提取出数据的特征码,可以实现数据的完整性。 特性:定长输出,雪崩效应(微小变化产生巨大反应) 只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的. 用到的算法: MD5,128bits sha1, sha224,sha256,sha384,sha514
那这些加密技术如何在互联网上应用呢?

C表示要传输的数据; B表示用单向加密得到的特征码,并用公钥加密技术,Clien端用自己的私钥再去加密这段特征码,生成数字签名; A表示对称加密所得的密钥,使用一大串随机数配合对称加密技术转成密钥; D表示对称密钥 ,Clinet使用Server的公钥去加密这段密钥 B和D都实现了身份验证的功能,B还完成了数据完整性的校验。 如果Server端能用Clinet的公钥去解开B,那就表示数据确实是Client传送过来的,并使用单向加密技术在对这段数据进行提取特征码,然后对比确认数据的完整性。如果Server能用自己的私钥去解密D,那么表示接收端确实是Server. 具体实现过程: 加密:先对数据(C)进行单向加密,取出其特征码,并用Clinet端的私钥去加密这段特征码(B),附加在数据的前面或者后面,然后使用对称加密算法去加密整段的数据和特征码,得到一个密钥(A),使用Server端的公钥去加密这段密钥,得到一个对称密钥(D),然后发送给Server端。 解密:先用自己的私钥去解密对称密钥(D),然后使用密钥去解开A,在使用Client的公钥去解密B,如果能解密,表示确实是Client发送过来的,实现了身份验证功能,对这段数据提取特征码,如果相同,数据完整性也得到了校验。 那双方如何获取对方的公钥呢?并确定公钥就是对方的,而不是别人冒充?这就需要一个信赖的认证机构去(CA)帮助双方存放公钥并发送给对方。 CA会先用自己的私钥生成一个自签证书。如果Client端需要属于自己的证书,那么就像CA机构申请,CA会分配一个公钥并绑定身份和地址等信息,然后把CA的自签证书绑定在分配给Client的证书上,如果Client能够用CA的公钥去解密CA的证书,证明CA不是冒充的。如果Server端想知道发送端的公钥,发送端就会发送自己的证书给服务端,服务端用CA的公钥去解密自签证书,如果能解开,那就表示该证书是有效的,里面的公钥那就是发送端的公钥了。
SSL的四次握手:


PKI : 公钥设施基础 支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施,提供一个公钥加密和数字签名的服务的系统或平台。 结构: 签证机构:CA 注册机构:RA
证书吊销列表:CRL
证书存取库:

通过Openssl去构建私有CA的步骤:
先了解下Openssl生成文件名后缀的格式:
.key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
Openssl的组成部分:
libencrpto:用于加密解密的库 主要由开发者使用
libssl: 用于实现SSL安全通信的库 主要由开发者使用
openssl多用途命令行工具:
众多子命令,分为三类:
标准命令
消息摘要命令(dgst子命令)
加密命令(enc)
如何用Openssl命令来加解密数据:
1、对称加密:
工具:openssl enc 算法:DES,DES3
[root@localhost tmp]# openssl enc -e -des3 -a -salt -in fstab -out fstab.key
enter des-ede3-cbc encryption password:                  //加密密码
Verifying - enter des-ede3-cbc encryption password:
[root@localhost tmp]# cat fstab.key
U2FsdGVkX1/qLxuSRmTs4zQq+jOozKNyXSTiwtMwFumbx/g0Xc+73Xa5WfdHKAfu
iVM89DgSmU4G14thDfUIKi5mfkjT8dQq5Ulkd62qDBSwAAaMpjl2PnlN0M6wlyEr
B9VJZgqH0s9c32nFVbxJK1MrXf+cZTcpjTtf+tSKNYft/zsEBQ9NEGq+bim86w8z
QkAWftAhUf/K2KK/yBsOV4/X+MankdPZLnOAkhx3N2nkqMmjP3aTIxGurqh8mizK

# openssl enc:加解密工具  -e:表示加密 -des3:指明算法 -in:指明要加密的文件  -out:指明要加密后保存的文件
[root@localhost tmp]# openssl enc -d -des3 -a -salt -in fstab.key -out fstab.cobb
enter des-ede3-cbc decryption password:                 //输入刚才设置的密码
[root@localhost tmp]# cat fstab.cobb

#
# /etc/fstab
# Created by anaconda on Fri Mar 11 17:27:56 2016
#

# openssl enc:加解密工具  -d:表示解密 -des3:指明算法 -in:指明要解密的文件  -out:指明要解密后保存的文件
2、单向加密

工具:openssl dgst,md5sum,sha1sum,sha224sum,...
[root@localhost tmp]# openssl dgst -md5 fstab      //提取文件的特征码
MD5(fstab)= 4934acd8fee79d5768d6954f0affe1c6
3、公钥加密:
三种功能:
加密解密
支持算法:RSA,ELGamal
工具:openssl rsautl,gpg
数字签名
算法:RSA,DSA,ELGamal
工具:openssl rsautl,gpg
密钥交换
算法:DH
生成私钥:
[root@localhost tmp]# (umask 077;openssl genrsa -out fstab 1024)   //用openssl生成私钥
Generating RSA private key, 1024 bit long modulus         // -out:表示私钥存放位置
.......................................++++++          //也可以重定向  >/path/to/somefile
.......++++++
e is 65537 (0x10001)                                   // 1024指定加密多少字节,只能是2^n
[root@localhost tmp]# cat fstab
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCectC07s6vPFpCwyJecnNMEBuoMgPExIQK20jCwGzY+wq7B5pX
dDag9XjGQ2dwyPLqQOzzZBit4u37Hn/nt+UpY2jJwwhvLOzuQiETp046U4D28GiD

注意:私钥的权限只限自己读取,属组或者其他都没有任何权限,()表示是在子shell中运行,不影响当前shell的umask值。
[root@localhost tmp]# (umask 077;openssl genrsa -des3 -out fstab 1024)
Generating RSA private key, 1024 bit long modulus      //生成私钥后对其使用单向加密
...++++++
.......++++++
e is 65537 (0x10001)
Enter pass phrase for fstab:
Verifying - Enter pass phrase for fstab:
[root@localhost tmp]# cat fstab
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED        //文件已加密
DEK-Info: DES-EDE3-CBC,FDE6A2F33BFB7396
提取公钥:
[root@localhost tmp]# openssl rsa -in fstab -pubout   //也可重定向至某文件
writing RSA key
-----BEGIN PUBLIC KEY-----     //提取到的公钥
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDswswyZk/S6FVaCf8/UbXVnv+5
构建私有CA:
配置文件:/etc/pki/tls/openssl.cnf

[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /etc/pki/CA           # 默认CA路径
certs           = $dir/certs            # 当前CA证书的存放路径
crl_dir         = $dir/crl              # 证书撤销后的存放路径
database        = $dir/index.txt        # 数据库文件,保存证书信息
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# CA生成的私钥
RANDFILE        = $dir/private/.rand    # 私钥随机数文件
构建私有CA:
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可
步骤:
1、生成CA自己的私钥:
[root@localhost tls]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.........................................................................................+++
..+++
e is 65537 (0x10001)
[root@localhost tls]# cat /etc/pki/CA/private/cakey.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwX7V+fzlLQKADdmsVpi5KFKHOorUm5pgfCqZjNXRficelcYz
2、为CA提供所需的目录及文件
mdkir /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo 01 >/etc/pki/CA/serial

3、生成自签证书,CA给自己创建证书
[root@localhost tls]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650      //
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) []:beijing              //哪个地区
Locality Name (eg, city) [Default City]:beijing            //哪个城市
Organization Name (eg, company) [Default Company Ltd]:magedu   //公司名
Organizational Unit Name (eg, section) []:OPS                  //岗位
Common Name (eg, your name or your server's hostname) []:ca.magedu.com   //个人或者主机名
Email Address []:             //可以为空

-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书
-days:证书的有效期
注意:如果是提供Web服务的话主机名要填写Web地址。。。。
到此CA自签证书已经创建完成,如果服务器需要安全通信,那得像CA请求签署证书:
步骤:(已httpd为例)
1、用到证书的主机生成私钥
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
[root@localhost ssl]# (unask 077; openssl genrsa -out httpd.key 1024) //生成私钥
-bash: (unask: command not found
Generating RSA private key, 1024 bit long modulus
....................................................................................................++++++
...........................................++++++
e is 65537 (0x10001)
2、生成证书签署请求

[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr -days 365
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) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:Magedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:
//一定要跟互联网的访问地址一致
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:        //是否需要加密
An optional company name []:
3、将签署请求发送给CA主机
[root@localhost ssl]#scp httpd.csr root@172.18.0.1:/tmp/
4、在CA主机上签署证书
[root@CA tmp]#  openssl ca -in httpd.csr -out /etc/pki/CA/certs/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: 2 (0x2)
Validity
Not Before: Apr  7 10:20:39 2016 GMT
Not After : Apr  7 10:20:39 2017 GMT
Subject:
countryName               = CN
stateOrProvinceName       = beijing
organizationName          = magedu
organizationalUnitName    = OPS
commonName                = www.magedu.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
98:B1:6E:03:88:9D:33:27:25:05:3F:3A:4C:DF:E2:33:99:1D:D3:D8
X509v3 Authority Key Identifier:
keyid:18:AB:EB:D9:A1:1A:10:7C:42:2E:E0:51:34:F4:E9:46:7B:3B:CB:BC

Certificate is to be certified until Apr  7 10:20:39 2017 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
5、把签署证书发给web服务器
[root@localhost ssl]#scp /etc/pki/CA/certs/httpd.crt root@172.18.0.2:/etc/httpd/ssl/
6、 查看证书签署信息
[root@localhost ssl]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
serial=02
subject= /C=CN/ST=beijing/O=magedu/OU=OPS/CN=www.magedu.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息