对称加密在对称加密中,加密和解密使用同一个密钥,加密和解密速度快,算法公开,计算量小。采用对称加密,交易双方使用同一个密钥,安全性得不到保证;一对用户每次使用对称加密算法时,都需要使用别人不知道的唯一密钥,这会使发送方和接收方拥有的密钥数量成倍增加,密钥管理成为用户的负担。对称加密算法很难在分布式网络系统中使用,主要是因为密钥管理困难,使用成本高。常见的对称加密算法:DES(数据加密标准)3DESAES(高级加密标准)密钥长度可选128/192/258/384/512位RC2、RC4、RC5、Blowfish等非对称加密出现,一公一私。公钥(publickey)是对所有人公开的,而私钥是自己保管的,必须保证其私密性,比如对私钥进行加密或者设置权限。Bob用Alice的公钥加密信息发送给Alice,Alice用私钥解密加密文件。非对称加密也可以验证身份。爱丽丝用她的私钥加密信息。如果Bob可以用Alice的公钥解密,则身份认证成功。非对称加密的三种用途:数字签名:用来让接收方确认发送方的身份,确认数据没有被篡改密钥交换:发送方用对方的公钥加密一个对称密钥,发送给对方进行数据加密常见的非对称加密算法:RSA:加密、解密、签名DSA:签名中间人攻击Alice向Bob要他的公钥,Bob将他的公钥发给Alice,此时Mallory拦截Mallory收到Bob的公钥并将她自己的公钥发送给Alice。爱丽丝认为马洛里的公钥就是鲍勃的公钥。Alice用Mallory的公钥加密消息并将消息发送给Bob。Mallory拦截Alice的消息并解密Mallory的消息。查看或修改后,使用之前截获的Bob公钥再次加密发送给Bob。Bob收到消息后,认为这是Alice发来的信息。单向加密只能加密,不能解密。它也称为提取数据。指纹。单向加密的作用是保证数据的完整性。单向加密将输入固定长度。当原始数据改变时,输出将完全改变,这也称为雪崩效应。常见的单向加密算法:md5:128bit,由4位二进制组合成16进制数,结果是32个16进制数组成的数字串sha1:160bitsha224,sha256,sha384,sha512PKI公钥基础设施PKI公钥基础设施是一种防止中间人攻击的认证技术,该方法是PKI的相互认证机制。只要公钥能够安全传输,就可以避免中间人攻击。为确保公钥不被替换,需要可信的证书颁发机构对公钥进行公证。PKI的主要四个组成部分:签证结构:CA,生成数字证书注册机构:RA,接收证书申请,验证申请者身份,相当于CA的前端代理证书吊销列表:CRL,保存证书颁发机构CA已吊销证书序列号和撤销日期PKI访问库:存储和管理用户申请、证书、密钥、CRL和日志信息。CA是一个可信的认证中心。申请者将其公钥和个人(站点)信息发送给CA,请求对其进行认证。CA验证后,利用申请人的信息和公钥,通过Hash算法提取消息摘要,CA再用自己的私钥对消息摘要进行加密,形成数字签名。CA将申请者的个人信息和申请者的公钥加上数字签名形成数字证书,发送给申请者。X.509定义了证书结构和认证协议标准,目前正在使用第三版。发送方在发送信息的同时,也发送了自己的数字证书。接收方收到信息和数字证书后,利用Hash算法从证书中的个人信息和公钥中提取指纹,再用CA的公钥与数字证书进行比对。对签名进行解密,将自己生成的消息摘要与解密后的数字签名进行比较。如果它们一致,则发送方的公钥可用。CA本身也有证书来证明自己的身份,CA是一个树形结构。高级CA将背书低级CA。操作系统和浏览器内置顶级CA证书。CA参与的安全通信过程:首先保证CA是通信双方认可的组织。通信双方向CA申请数字证书,证书中包含各自的公钥。加密(数字签名),将数字签名和个人信息组织成数字证书。通信双方下载CA颁发的数字证书。当发送方要发送信息时,它首先向接收方请求其数字证书。接收方使用CA公钥校验接收到的数字证书是否合法,获得接收方的公钥。发送方使用散列函数从明文数据中提取指纹,然后通过程序随机生成一个会话密钥,并使用这个会话密钥对明文数据进行对称加密。最后,发送方使用接收方的公钥对会话密钥进行非对称加密。发送方将自己的证书和加密文件(包括会话密钥)发送给接收方。接收方使用CA的公钥来验证发送方数字证书的合法性。真伪,包括用CA的公钥对数字证书进行解密,提取具有相同签名算法ID的指纹与签名进行比对,数字证书的有效期,证书的主题名称是否与签名相同被访问的主机名或人名,以及证书是否在吊销列表中间。如果合法,用自己的私钥解密会话密钥得到明文数据,然后用哈希函数从明文数据中提取指纹,将自己得到的指纹与发送方发送的指纹进行比较。篡改、安全通信完成。以上,对称加密和非对称加密解决数据机密性,单向加密解决数据完整性,使用PKI解决数据可用性或来源合法性。这建立了安全通信。SSL/TLS1994年,NetScape设计了SSL协议(SecureSocketsLayer)1.0版,但并未发布。设计SSL的目的是为了对http报文进行加密,随后先后发布了2.0和3.0。1999年,互联网标准化组织ISOC接替NetScape,发布了SSL的升级版本,TLS(TransportLayerSecurity)1.0版。TLS的当前版本是TLS1.3。SSL/TLS的作用在ISO/OSI参考模型中是表现层,在TCP/IP模型中是应用层。SSL协议分为两部分:握手协议和记录协议。握手协议用于在通信双方之间协商一个安全的会话密钥,用于后续的对称加密。RecordProtocol定义了传输的封装格式。SSL/TLS协议通信的一般过程:客户端向服务器端索取公钥(证书)并验证,双方协商生成“会话密钥”,然后使用“会话密钥”对通信进行加密。首先,客户端发送请求(ClientHello),将本地支持的密码套件(CipherSuit)列表,即本地支持的加密算法、支持的TLS版本、支持的压缩方式发送给服务端。另外,生成一个随机数发送给服务器,在本地保存一份,稍后用于生成会话密钥。然后服务端响应(ServerHello),将服务端的数字证书发送给客户端,确认加密通信协议的版本(即安全套件),服务端生成的随机数,加密算法用过的。其次,客户端收到服务器证书并根据证书链验证其真实性后,获得服务器的可信公钥,然后发送新的随机数和代码更改通知(后续信息将使用加密方法进行加密)和密钥发送),客户端握手结束通知。最后,服务器收到第三个随机数后,计算生成本次会话使用的会话密钥,然后发送代码更改通知和服务器握手结束通知。后续通信使用http协议,然后使用会话密钥加密。TLSSecurityCipherSuiteKeyExchangeAuthentication对称加密算法,Strength,GroupModeSignatureHashAlgorithm使用私有CA实现https站点建立私有CA1。安装openssl:yuminstallopenssl-y2。生成CA密钥对:(umask077;opensslgenrsa-out/etc/pki/CA/private/cakey.pem2048)3.生成自签名证书及相关文件:opensslreq-new-x509-key/etc/pki/CA/private/cakey.pem-out/etc/pki/CA/cacert.pem-days365req:生成证书签名请求-new:新请求-key...:指定私钥文件-out.../-x509:生成自签名证书位置和格式-days:有效天数4.初始化CA工作环境:touch/etc/pki/CA/{index.txt,serial};echo01/etc/pki/CA/serialandCA配置相关文件为/etc/pki/tls/openssl.cnf,index.txt为数据库索引文件,serial用于记录visa相关信息。站点申请证书1、安装openssl2。生成密钥保存在服务配置文件目录下mkdir/usr/nginx-1.14.2/conf/sslln-s/usr/nginx-1.14.2/conf/ssl//etc/nginx/ssl(umask077;opensslgenrsa-out/etc/nginx/ssl/nginx.key2048)3.生成证书签名请求:opensslreq-new-key/etc/nginx/ssl/nginx.key-out/etc/nginx/ssl/nginx.csr需要注意的是,填写的信息一定要和CA端一致,OrganizationName也要一致。4.发送签名请求文件nginx.csr到CAServiceCA签名请求文件1.签名请求文件:opensslca-in/tmp/nginx.csr-out/tmp/nginx.crt-days3652.发送证书到请求Client3.其他:CA吊销证书opensslca-revokenginx.crt站点部署证书,保存在/etc/nginx/ssl/目录下。由于之前编译安装的nginx默认没有编译ssl_module,所以需要重新编译编译nginxwiththesslmodule。回到Nginx源码目录,添加SSL模块,重新编译:./configure--prefix=/usr/nginx-1.14.2/--with-http_ssl_modulemake由于当前操作是升级操作,Nginx之前用过的配置文件等,无法覆盖,所以不能使用makeinstall。需要备份原来的nginx二进制文件,覆盖新的nginx二进制文件。cp/usr/nginx-1.14.2/sbin/nginx/usr/nginx-1.14.2/sbin/nginx.without_ssl.bakcp/tmp/nginx-1.14.2/objs/nginx/usr/nginx-1.14.2/sbin/nginxobjs/nginx是新编译的nginx程序,覆盖了原来的nginx程序,启动了nginx。修改nginx配置文件,开启httpsserver{listen443;#监听端口为443server_namedevops.yellowdog.com;SSL开启;#打开sslssl_certificate/etc/nginx/ssl/nginx.crt;#证书位置ssl_certificate_key/etc/nginx/ssl/nginx.key;#私钥位置ssl_session_timeout5m;ssl_protocolsSSLv2SSLv3TLSv1;#指定的密码是openssl支持的格式ssl_ciphersHIGH:!aNull:!MD5;#密码加密方式ssl_prefer_server_cipherson;#根据SSLv3和TLSv1协议的服务器密码会优先于客户端密码位置/{aliasdlib/;#根目录相对位置}}另外还设置了将80端口的访问重定向到443端口server{listen80;服务器名称devops.yellowdog.com;rewrite^(.*)$https://$server_name$1permanent;}小结部署一个https站点一般来说并不难,但是理解安全通信的原理很重要。推荐文章:图解openssl实现私有CA
