Https网络安全传输详解
Posted 踩踩踩从踩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Https网络安全传输详解相关的知识,希望对你有一定的参考价值。
前言
本篇文章会主要介绍网络中数据安全传输,加密算法,Https如何保证数据传输安全,SSL证书解析,CA认证流程,OpenSSL,nginx中实现高性能Https。
数据加密技术
加密算法之对称加密(AES加密) 及在jdk中应用_踩踩踩从踩的博客-CSDN博客_jdk对称加密
加密算法之安全hash算法、RSA非对称加密算法分析_踩踩踩从踩的博客-CSDN博客
都是从原理上去分析几个加密技术,包括对称加密、一致性hash算法、非对称加密。
Http安全性能
HTTP
在浏览器中就能清晰的看到。
因此产生了对数据进行加密,加密技术 ;https的产生
摘要算法
- MD(Message Digest):消息摘要
- SHA(Secure Hash Algorithm):安全散列
- MAC(Message Authentication Code):消息认证码
可以用来保证内容不被篡改:密码加密、文件校验码
对称加密
非对称加密
用在不可信的环境下
Https协议
SSL/STL
- SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个 协议加密层。HTTP在传输数据时使用的是明文,是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。
- TLS(Transport Layer Security)即安全传输层协议,保障应用程序之间通信的安全性。SSL 3.0版本改名叫TLS,所以TLS是从SSl转过来的。
把明文变成密文进行加密。
Https协议架构组成
- 身份认证,认证用户或服务器,确保数据 发送到正确的客户机或服务器
- 内容加密,加密数据以防止数据中途被窃取,防止被窃取。
- 数据完整性,维护数据的完整性,确保数 据在传输过程中不被篡改
兼容不只是用在http上面。也包括ftp ,mqtt协议呀,redis协议等等。
- SSL/TLS在握手阶段依赖数字证书建立安全会话
-
数字证书包含一个非对称加密生成的公钥、一个对自己的数字签名
-
SSL/TLS在传输阶段使用对称加密
- 数字签名依赖非对称加解密、数字摘要
Https与Http的区别
- https协议需要到CA申请数字证书。
- http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是 443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、 身份认证的网络协议,比http协议安全
Https如何保证数据传输安全
SSL/TLS的握手过程—秘钥协商
- 在请求连接时,支持的协议版本,支持的加密和压缩算法,并产生随机数,给服务端;
- 服务端确定要加密协议版本和加密算法,服务器的证书,产生随机数 ,返回给客户端 生成私钥
- 公钥加密后的随机数 编码改变 握手结束
-
编码改变通知 ,三个随机数产生的密钥
-
对称加密进行数据传输
Https协议安全保证的原因
- 其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的,因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!
- 如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数能不能被破解。
SSL证书
CA和数字证书
浏览器CA认证流程
- 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证 书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了,认为是危险证书。
- 对于篡改的证书,使用CA的公钥对数字签名进行解密得到摘要A,然后 再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常, 若不相等则是被篡改过的。
- 证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。较新的 浏览器如Chrome、Firefox、Opera和Internet Explorer都实现了在线 证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。
1、2点是对伪造证书进行的,3是对于篡改后的证书验证,4是对于过期失效的验证。
OpenSSL
OpenSSL是个多功能命令行工具、他可以实现加密解密、甚至还可以当CA来用、可以让你创建证书、吊销证书。
制作证书
准备工具
安装keytool(jdk自带)、openssl、nginx、web服务
有两种方法生成数字证书,一种是用JDK带的keytool,另一种是用openssl。
大致流程为上面的。
Nginx中配置HTTPS
找到nginx运行的配置文件,将服务器证书servercert.pem、钥serverkey.pem、ca根证书cacert.pem放到配置目录下,修改内容如下
http {
# 配置https服务
server {
# 开启443端口,ssl安全协议
listen 443 ssl;
server_name localhost;
# 配置证书及服务器私钥
ssl_certificate servercert.pem;
ssl_certificate_key serverkey.pem;
ssl_client_certificate cacert.pem; # 根级证书公钥,用于验证各个二级client
ssl_verify_client on; #开启客户端证书验证
# 会话参数的缓存,所有工作进程之间共享的缓存
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 启用的密码
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
# SSLv3和TLS协议时,服务器密码优先于客户端密码
ssl_prefer_server_ciphers on;
location / {
root /data/www/;
index welcome.html;
}
}
}
Nginx https 双向认证 - i野老i - 博客园 (cnblogs.com)
这在官方核心文档中就有配置方式
Https服务的优化
- 1. 将工作进程的数量设置为等于处理器的数目,worker_processes
- 2. 启用维持生命的连接,keepalive_timeout
- 3. 启用共享会话缓存,禁用内置会话缓存,ssl_session_cache shared:SSL:10m; off,禁用、 none,客户端可重用服务端不缓存builtin,在openssl中重构缓存,`builtin`[:`size`] shared,在worker进程间共享的缓存,`shared`:`name`:`size`
- 4. 增加会话生存期(默认为5分钟),ssl_session_timeout
以上是关于Https网络安全传输详解的主要内容,如果未能解决你的问题,请参考以下文章