SSL的大部分复杂性来自高度模块化。客户端可以支持多个“密码套件”,服务器可以选择一个。数据可以被压缩。客户端可以通过呈现自己的证书并使用相应的私钥来验证自己。服务器公钥作为X.509证书发送,而X.509证书验证很复杂。
可以基本被硬编码的客户端选择简化SSL。例如,你决定你将只支持一个密码套件,例如TLS_RSA_WITH_AES_128_CBC_SHA256。没有压缩。您可以在客户端硬编码服务器公钥,并忽略服务器发送的证书。如果可能的话,使用TLS 1.2,对于以前的协议版本,需要使用单个散列函数(SHA-256)而不是两个(MD5和SHA-1)(TLS是SSL的标准名称; TLS 1.0是SSL 3.1) 。
我有(专业)来实现,其同时支持AES和3DES一个TLS客户端,并且执行初步X.509验证(仅RSA签名)。完整的代码适用于21 KB的ROM(对于ARM处理器,用拇指指令编译的C代码),并且只需要19 KB RAM,其中16 KB用于输入缓冲区(输入记录的最大尺寸为假设没有压缩,SSL约为16千字节)。所以SSL 可以对于微控制器来说足够小。
一旦通过客户机挑选的参数的先验选择简化SSL,会得到一个协议,该协议是约轻量级因为它可以得到:剩余复杂性是本征的。如果你试图让事情变得更简单,那么你最终会变得更弱。
至于现有实现方式中,至少PolarSSL旨在嵌入式设备,和下一个开源许可(GPL第二)是可用的。我不知道它有多小可以缩小。还有CyaSSL,它也可以根据GPLv2条款获得,并声称可编译为30 KByte代码(最小选项)。
刚刚在观看SSL协商的wireshark踪迹,我看到你对多个密码套件的含义。 Chrome广告多达21个! – Tim 2011-03-09 14:53:55
@Jim全套密码套件已经超过100套。 – 2011-03-09 14:59:11
太疯狂了!我的服务器是否支持绝大多数Chrome浏览器,或者至少绝大多数Chrome支持?我猜想我会选择一个与我的微控制器AES实现最兼容的产品。 – Tim 2011-03-09 22:03:41