网络安全通信:
为了不让自己的隐私,信息等随随便便就能让获取,所以需要对数据进行加密处理,保证数据在传输的过程中不被别人获取,网络通信安全需要达到以下三个目的:
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
原文地址:http://lanxianting.blog.51cto.com/7394580/1761924