很多人都提到了非对称加密速度慢,但这只是一个原因,但不是主要原因,甚至是微不足道的原因。

SSL协议到3.0后就已经到头了,取而代之的是TLS,相较于SSL的“安全套接字层”的命名,TLS的“传输层安全”这种定义更加严谨。毕竟传输安全的范畴要远大于套接字安全这种定义,这种定义偏技术层面,但安全不仅要解决技术层面的问题,也要解决人的问题以及由此带来的信任问题。因为加密只是安全的一部分,解决传输两端的信任,以及让整个算法摆脱人的因素,才是安全的核心。

诈骗电话之所以能让很多人上当,实际上是一种信任欺诈,即使你和骗子间的通信采用了量子加密,安全到连FBI、CIA、克格勃、摩萨德、朝阳大妈都无法破解的地步,这也只能确保你被骗的更加安全、更加保密而已。

腾讯即使能把你和潜在“炮友”的聊天加密到连你老婆都无法破解的地步,但还是无法确保你的聊天对象到底是男的还是女的,是个美女还是丑B,即使是无所不能的“剽窃惯犯”小马哥也做不到,做不到就是做不到,大马哥也做不到。

以下两个问题:

1、如何确保私钥的安全,如果一个公司的后台人员离职并把私钥带走,该怎么办?

私钥无论是配置到Tomcat还是Ngnix都需要后台人员的参与,甚至整个后台开发人员都知道私钥文件在哪,把私钥文件带走是so easy的事,即便这个私钥采用了p12格式进行了加密,但这个密码还是由后台开发人员掌握。当然,如果这个公司的所有事情都是老板亲自亲为,那就是另外一回事。

显然任何公司都不可能因为一个后台人员的离职,并由此产生潜在的私钥泄密风险而去重新申请SSL证书。一是解决不了根本问题; 二是费用的问题,三是总不能频繁发布公钥让吃瓜群众不停的更新。

回到题主的问题,如果客户端(客户端只有公钥)用公钥加密,私钥解密的话,显然受人为的因素,风险太大了。即便这个公司的老板很开明(也可是很糊涂),相信所有人都是可靠的,采用了公钥加密私钥解密,但也只是解决了单向传输的问题。

如果服务器向客户端发送数据,则需要私钥加密,公钥解密。那么真能用私钥加密么?

2、无论是openssl还是微软的CryptoAPI,都没有提供私钥的加密功能,而只是将私钥的加密功能限定在签名上,为什么不提供私钥加密API呢?
显然不是因为openssl做不到,也不是因为微软做不到。让私钥不提供加密接口是出于安全的目的,也就是要保护私钥。如果私钥频繁用于数据加密,公钥在解密的过程中很有可能会破解私钥,从而导致私钥泄漏。如果把私钥加密只是应用到签名上,也就是身份认证,则会大大降低由于私钥加密频繁导致的泄密风险,毕竟签名一次就够了。

当然openssl是开源的,你可以改造一下提供私钥加密的接口。

在SSL(TLS)中,RSA只是用于身份认证,即解决信任问题,确保你访问的网站是淘宝,而不是高仿的“陶宝”,让你在淘宝上买的是康师傅,而不是康帅傅而已。

最后总结一下,稍微说下openssl。
实际上openssl是对传输安全策略的设计,是一种思想,这种思想就是让安全策略尽可能的摆脱对人的信任依赖,在openssl中加密只是安全策略的一部分。基于这种思想来保障安全的数据传输,显然单靠RSA无法解决这个问题,openssl中采用的是组合方式,也就是加密套件,比如如下套件:TLS_RSA_WITH_AES_128_CBC_SHA。

TLS:表示协议;

RSA:表示数据加密秘钥的加密算法(比较拗口)和身份认证的算法;

AES_128_CBC:表示对称加密算法,这个是数据加密的真正算法;

SHA:表示mac校验的算法,也用于PRF产生的算法;

因此,数据加密的秘钥保护是核心,数据秘钥的产生要随机,要能即兴发挥的临时产生。
比如通过随机数产生PreMasterKey,算法可以复杂点,通信双方各自贡献PreMasterKey的参数,最后客户端对PreMasterKey进行RSA加密后传输给服务器,服务器解密后,根据规则产生真正的加密Master Key,这个MasterKey就是对称加密的秘钥。

即便如此,由于RSA参与了数据秘钥的加密过程,因此也会导致因私钥泄漏产生的不安全(正如上面所说,私钥文件要依赖人的安全),也就是说最好连非对称加密的秘钥对也能临时产生并用户动态交换,ECDHE就产生了。比如套件:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

这里的RSA仅仅是作为身份认证(即证明网站是可信的,确实是淘宝网站),RSA将不再对PreMaterKey进行加密,该值的产生有ECDHE算法负责,这样进一步减少了对人的依赖。因为一旦网站的数据被抓包留存,理论上就存在PreMasterKey被解密的可能,从而导致MasterKey的泄漏,以至于整个通信数据都不安全。

说的太多了,超出问题的范畴,就此打住。。。。。

附:我自己封装过TLS客户端通信,并用于自己的邮箱程序,见下文。

一只会铲史的猫:我的箱客户端程序Popmail,以及巴拉巴拉。。。

这是我封装的SSLite.dll,里面有如何使用该库进行HTTP网页的下载源码:

基于SSL(TLS)的HTTPS网页下载-网络安全文档类资源-CSDN下载
​

如果CSDN需要积分下载的话,也可以从这下载:

基于SSL(TLS)的HTTPS网页下载

https ssl(tls)为什么不直接用公钥加密数据?的更多相关文章

  1. HTTPS SSL TLS 相关理解

    1,在理解 HTTPS SSL TLS 之前先对常用的加密方式进行一个简述: (1),对称加密: 采用一个密钥,对明文进行加密生成密文,相反采用此密钥可对加密后的密文进行解密还原成明文. 代表算法有, ...

  2. 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) -- 学习

    在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) IS 7如何实现http重定向https HTTPS 升级指南

  3. 简而意赅 HTTP HTTPS SSL TLS 之间有什么不同

    HTTP HTTPS SSL TLS 之间有什么不同? SSL是Secure Sockets Layer的缩写.SSL的作用是为网络上的两台机器或设备提供了一个安全的通道. TLS是SSL的一个新的名 ...

  4. HTTPS(SSL/TLS) 原理之深入浅出

    注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合. 1. 必要的加密解密基础知识 1)对称加密算法:就是加密和解密使用同一个密钥的加密算法.因为加密方和解密方使用的 ...

  5. [skill][https][ssl/tls] HTTPS相关知识汇总

    结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA   DHE / ECDHE   PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...

  6. 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)

    某些安全性较高的网页,如网上支付或用户登陆页面,可能会使用到https(SSL/TLS)来提高安全性.本文介绍了如何在ASP.NET MVC中强制某action使用https和如何进行向https页面 ...

  7. HTTPS SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  8. HTTPS SSL & TLS

    HTTPS (HTTP Secure) is an adaptation of the Hypertext Transfer Protocol (HTTP) for secure communicat ...

  9. win10系统iis下部署搭建https (ssl/tls)本地测试环境

    有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建ht ...

随机推荐

  1. ZOJ3715 竞选班长求最小花费

    题意:       有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...

  2. 开源囧事4:你们这些卖代码的能不能留自己的QQ号?留我QQ号干嘛?

    缘起于开源项目 从 2017 年开始,陆陆续续写了一些开源项目放到开源网站里,都是一些实战项目,给大家练练手.有基础整合的demo,有 Spring Boot 博客项目,有 Spring Boot 商 ...

  3. 在IDEA配置tomcat

    springboot的项目写多了,导致都快忘记怎么在idea中配置tomcat 点击加号,而不是Templates 选择Tomcat 服务器的Local 服务器配置 部署配置,选择Artifact 到 ...

  4. (二)SQL语句

    语法规则 不区分大小写,但是建议关键字大写,表名.列名小写 SELECT * FROM user; 支持多行编写sql语言(在SQLyog中可以用F12来快速格式化语句) # 查询cno=20201/ ...

  5. 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!|JavaGuide|Guide哥

    这是一篇来自算法转Java后端的一位读者的投稿!文章主要分享了作者从迷茫崩溃到最终斩获腾讯.京东.百度等大厂 offer 的经历.文章内容很全面.真实,相信可以对正在准备面试的小伙伴有帮助! 看到公众 ...

  6. Visual Lab Online —— Alpha版本发布声明

    Visual Lab Online -- Alpha版本发布声明 项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:Alpha阶段发布声明 发布声明 目录 Visual Lab Onli ...

  7. API网关才是大势所趋?SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

  8. Linux 面试总结

    1. 统计指定目录的文件个数: find / -type f | wc –l 2.Linux 下常用目录 /boot:这个目录是用来存放与系统启动相关的文件/root:root用户的家目录/bin:存 ...

  9. 1.HTML入门

    1.1 初识HTML 1.1.1 概述 网络世界已经跟我们息息相关,当我们打开一个网站,首先映入眼帘的就是一个个华丽多彩的网页.这些网页,不仅呈现着基本的内容,还具备优雅的布局和丰富的动态效果,这一切 ...

  10. 基于Hadoop集群搭建Hive安装与配置(yum插件安装MySQL)---linux系统《小白篇》

    用到的安装包有: apache-hive-1.2.1-bin.tar.gz mysql-connector-java-5.1.49.tar.gz 百度网盘链接: 链接:https://pan.baid ...