我正在制作RESTful API,并且想知道如果使用SSL完成每个请求,服务器的计算成本是多少?这可能很难量化,但与非SSL请求的比较会很有用(例如,1 SSL与非SSL请求一样昂贵)。
我是否认为要建立SSL连接,双方都需要生成公钥和私钥,彼此共享,然后开始通信。如果在使用RESTful API时,是否会在每个请求中执行此过程?或者是否存在某种缓存,在给定的时间段内重用给定主机的密钥(如果是,在它们到期之前多久?)。
最后一个问题,我问的原因是因为我正在创建一个使用facebook连接的应用程序,并且有一些访问权限涉及授予访问某人的Facebook帐户的权限,已经说过,为什么facebook允许传输这些通过非加密连接访问令牌?当然,他们应该像用户名/密码组合一样强大地保护访问令牌,并因此强制执行SSL连接......但他们却没有。
编辑:每当发送access_token时,facebook确实会强制执行HTTPS连接。
答案 0 :(得分:1)
SSL流程大致如下:
服务器(以及可选的客户端)使用证书以及签名质询提供其(现有的,未生成的)公钥。对方验证签名(其数学有效性,到CA的证书路径,撤销状态......)以确保对方是其声称的对象。
在经过身份验证的各方之间协商一个秘密会话密钥(例如使用Diffie Hellman算法)。
双方切换到加密通信
这是一个昂贵的协议,在每次建立套接字时都会发生。您无法缓存关于“谁在另一边”的支票。这就是为什么你应该使用持久套接字(带REST的事件)。
答案 1 :(得分:1)
mtraut描述了SSL的工作方式,但他忽略了TLS 支持会话恢复的事实。但是,即使协议本身和许多符合要求的服务器支持会话恢复,客户端实现也不总是支持它。因此,您不应该依赖恢复,并且最好尽可能保持持久会话。
另一方面,SSL握手速度非常快(大约十几毫秒),因此在大多数情况下它并不是最大的瓶颈。
答案 2 :(得分:1)
http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html
在我们的[Google,ed。]制作前端机器上,SSL / TLS占CPU负载的不到1%,每个连接少于10KB的内存,不到2%的网络开销。许多人认为SSL占用了大量的CPU时间,我们希望上述数字(首次公开)将有助于消除这一点。
如果你现在停止阅读,你只需要记住一件事:SSL / TLS不再具有计算成本。