转载自:https://www.cnblogs.com/linianhui/p/security-https-workflow.htmlhtml
在前面两篇博客中介绍了密码相关的一些基本工具,包括(对称密码,公钥密码,密码散列函数,混合密码系统,消息认证码码,数字签名,伪随机数,数字证书)这几个。其中它们之间也是互相依赖的,咱们来简单的梳理一下它们的依赖关系。git
这篇要介绍的HTTPS,则把以上这些全都派上场了。github
在早期HTTP诞生的这几年间,1990年~·1994年,HTTP做为一个应用层协议,它是这样工做的:windows
后来网景公司开发了SSL(Secure Sockets Layer)技术,而后它就变成了这样的HTTP,也就是HTTPS了:函数
后来爆发了与IE的世纪大战,网景败北,SSL移交给了IETF(Internat Engineering Task Force)互联网工程任务组,标准化以后变成了如今的TLS,如今通常会把它们两个放在一块儿称为SSL/TLS。本篇并不关注SSL/TLS具体是如何工做的,只是抽象的解释下HTTPS的一个工做流程。工具
简单总结下,HTTPS是使用了证书的一个混合密码系统,其中证书的做用在于传递会话密钥,以及验证网站的真实性;而HTTPS真正的加密操做是由对称密码这个工具负责的(有兴趣的能够找找每一个步骤中都用到了密码工具箱中的那些工具)。在windows系统中,能够配置一个名为 SSLKEYLOGFILE 的环境变量,Chrome和Firefox在访问HTTPS站点的时候,会把第4步生成的会话密钥以及其余附属信息,写入到这个文件中:网站
好比下图:ui
具体的格式能够参考MDN的一个说明https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format。加密
以上只是一个抽象的HTTPS的一个工做流程,实际上SSL/TLS所作的工做远不止这这些,更详细的解释请参考这篇文章:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser。操作系统
SSL/TLS:https://en.wikipedia.org/wiki/Transport_Layer_Security
IETF:https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force
HTTPS:https://en.wikipedia.org/wiki/HTTPS
HTTPS 链接最初的若干毫秒:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser
HTTPS on Stack Overflow: The End of a Long Road:https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow/
SSL/TLS部署最佳实践:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
HTTP Over TLS:https://tools.ietf.org/html/rfc2818
SSLKEYLOGFILE:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format