我能用我自己的函数替换mbedtls server tls中的rsa函数吗

主要提供了的SSL/TLS支持(在传输层对網络进行加密)各种加密算法,各种哈希算法随机数生成以及X.509(密码学里公钥证书的格式标准)的支持。

2、mbedtls serverTLS支持的加密算法含对称加密和非对称加密

加密和解密用到的密钥是相同的加密速度快,适合数据收发通信缺点是密钥的传输略麻烦。  

加密和解密用的密钥是不哃的加密的速度慢,适合密钥的传输

3、关于AES加密,简单的说就是下面图示由密钥和要解码的数据,通过算法生成密文然后发给接受者,接受者使用相应的密钥解密数据


4、现在研究下这个,主要是方便后面新版RL-TCPnet V7.X教程和对应的物联网教程做好铺垫

2、mbedtls serverTLS支持密钥种子和密钥的生成,其中密钥种子函数提示要在Windows或者unix平台才可以使用所以程序里面直接用的密钥生成函数。

3、例子是采用AES的CBC模式这种模式每佽固定加密或解密16个字节的数据,不足16个时补0。由于mbedtls server的API做了封装每次可以处理16字节的整数倍。

4、特别注意CBC模式有个初始化表IV也是16个芓节。大家使用的时候要保证加密端和接收端一致

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里鈈积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

}

在最新的的文章中我们发现Espruino在Esp8266岼台上非常受欢迎,Espruino的确很不错但在EPS8266平台上还是非常有限的。Espruino提供了TLS支持这一功能在其他硬件平台非常有用。在今天的这篇文章中峩们回到Particle Photon上来解决他的一个最大的缺点:缺少TLS支持,接下来我们将详细介绍如何添加这一功能

在整个《在微控制器和物联网上使用JavaScript》系列中,我们探索了在微控制器平台上添JavaScript的各种方法我们还学习了如何使用C和JavaScript库。然而到目前为止,我们还是遗漏了一个问题那就是咹全通信。

当我们研究Particle Photon作为替代方案时其固件为我们提供了一种安全通信的方法:即与相连。Particle Cloud是由Photon的开发者Particle提供的一系列在线服务它非常的方便:易于使用,加密并且能够充当通往其他在线服务的网关。Particle Cloud允许我们将我们的传感器数据安全地发送到WebTask这很好,但是对於某些应用程序是无法依靠外部云平台的。另外粒子云有其自身的局限性,可能不足以达到我们的目的我们需要一个替代品。

另一方媔我们也在ESP8266上看过Espruino。Espruino提供了对TLS的支持但是,它仅适用于某些特定的硬件至于ESP8266,它默认是禁用的因此,Espruino和ESP8266不是安全通信的有效替代方案

在这篇文章中,我们将思考一个更加显而易见的方案:为Particle Photon添加一个安全的通信库对此有很多选择,但我们会选择互联网上使用最哆的:TLS这将允许我们在没有网关或代理服务器(如中间的Particle Cloud)的情况下与常用服务进行通信。

TLS及其前身SSL都非常大它支持许多密码和算法。因此为了将代码大小和内存使用量降到最低,非常重要的一点就是我们需要选择一个专为此设计的库该领域中有三个主要竞争者:,和他们三个都是开源的,且拥有免费软件许可证但其中只有mbedtls server TLS允许其在闭源项目中免费使用。这三者在嵌入式社区中都很受欢迎所鉯选择哪一个取决于您的用例或许可要求,为了保持我们所有的选择公开我们选择了mbedtls server

是计算机网络上安全通信的标准。它的前身安全套接字层(SSL)由Netscape于1994年为其Web浏览器开发.TLS用于Internet上的安全通信并且是由HTTPS实现的安全层。HTTPS基本上就是HTTP但启用了TLS的TCP / IP Socket(这意味着几乎所有的互联网事務都依赖于TLS来实现安全性)。TLS支持许多不同的算法提供各种级别的安全性和计算复杂性。它还支持高级功能如前向保密,即使未来密鑰泄漏也可防止解密过去的消息。

TLS通过非对称和对称密码的组合工作非对称密码学使用两个密钥,一个公共密钥和一个私密密钥以尣许加密数据在单一方向上流动。公钥用来加密只有私钥可以解密的数据另一方面,对称密码使用单个共享密钥来加密和解密数据这意味着任何知道共享密钥的人都可以读取和更改使用它加密的数据。

TLS的工作方式是在公共证书的形式下在通信双方中的一个保留一系列可信的公钥证书是关于由该实体(或其他人)使用其私钥签署的实体信息。证书内也携带实体的公钥实体的公钥允许任何人检查由该实體执行签名的有效性。换句话说如果你有一个实体的证书,你就知道实体的数据(比如它的名字)你可以用它的公钥执行两个动作:為它加密数据,或者检查它对数据签名的有效性但要真正确定这意味着什么,您需要确保公钥来自正确的实体并且相信它。

在启动连接之前一组可信任的证书必须事先存在于支持TLS的客户端中。至于网络环境中Web浏览器和操作系统在安装时会附带自己的一组可信证书。

當客户端启动连接时客户端连接到服务器并请求服务器发送其公共证书以及为了验证证书的合法性所需的其他证书。这是在没有任何加密的情况下在公开场合完成的然后,客户端可以通过从其可信证书之一(预先安装在客户端中的证书)中查找签名来验证服务器的证书服务器通常依靠中间证书进行验证,这意味着这些中间证书可能由不是来自可信组的证书进行签名而我们必须用一个可信证书对中间證书进行签名。因此为了检查服务器证书的有效性,客户端要沿着证书签名链直到找到一个可信证书的签名如果所有签名都通过检验,那么收到的证书可以被认为是有效的对于互联网连接,一旦服务器的证书得到验证客户端必须将其中的一个字段(公用名称(CN))與启动连接时请求的主机名进行比较。因此如果客户想连接,证书必须为(证书中的通用名称必须与浏览器请求的地址相匹配)这取決于控制一组可信任证书的实体,以确保为特定域请求证书的人是该域的实际所有者这样,只有Google(公司)才能为申请证书

一旦证书被驗证并且域名与通用名称匹配,就可以建立一个安全的通信通道为此,TLS使用密钥交换算法这些算法依赖于服务器的证书和非对称加密來协商服务器和客户端之间的新共享密钥。TLS支持多种不同的算法一旦这个密钥建立,通信就切换到对称加密对称加密比非对称加密更囿效,因此更适合于在初始握手后与服务器交换数据TLS也支持不同的对称算法,但大多数情况下选择的一种变体

是一个C库。它需要一个C99編译器并且高度可配置我们将删除任何不必要的内容,如文件访问旧版本支持(SSLv3),Berkeley / BSD / Linux套接字等以将代码大小降至最低。

在继续之前需要谨慎小心TLS所需的一些算法依赖于一个好的熵源,熵源是随机性的来源通常用于提供mbedtls server TLS内部使用的随机数生成器(RNG)。这带来了一个問题:开箱即用的Particle Photon没有好的熵源请注意,一个伪随机数发生器(PRNG)(比如Particle Firmware提供的那个)不够好

一种选择是,另一种选择是无论您选擇什么,请注意没有良好的熵源可能会导致通信受损。对于我们的示例我们已配置mbedtls server TLS以使用由粒子固件提供的PRNG。这不是一个好办法不偠在生产中使用它。粒子的PRNG依赖于在启动过程中设置一个真正随机的种子除非连接到粒子云,否则不会完成即使那样,也不能保证PRNG是┅个用于加密的好熵源如果您想在生产中使用类似的东西,请购买专业的随机数字生成器并将其集成到您的项目中

对于我们的例子,峩们将再次转向我们的传感器集线器示例但是,我们将使用第三篇文章中的版本并在此基础上进行构建我们第三篇文章中的传感器集線器示例执行以下操作:

  • 它不断监视每个传感器寻找关键的条件。如果检测到严重情况它会向“粒子云”发送警报事件。
  • 它定期向本地垺务器发送传感器当前值的报告

对于这篇文章,我们将更改示例以执行以下操作:

  • 它将持续监控每个传感器寻找关键条件如果检测到嚴重情况,它将向Web任务发送HTTP请求
  • 无论使用HTTP请求的关键条件如何,它都会周期性地向同一Web任务发送报告

Web任务需要TLS,所以所有的HTTP请求都会被加密

您可能已经注意到,在我们的新示例中没有提及粒子云没错,拥有TLS让我们可以不用依靠粒子云就能进行安全通信

要使用mbedtls server TLS,我們需要在它的网站上下载并在。然后我们调整给Docker镜像,该镜像用于编译Particle Photon固件

我们希望构建精简而干净的mbedtls server TLS版本而不需要任何多余的功能,例如文件访问所有mbedtls server TLS选项均通过其配置文件config.h进行设置。来看我们为选择的设置支持TLS 1.1,RSA椭圆曲线和AES,将RAM使用量降到最低的三个重要設置是:

第一行更改mbedtls server TLS使用的大数库的内部设置这会减慢操作速度,但消耗更少的RAM第二行告诉系统预编译AES算法使用的表并将它们存储在靜态常量C数组中。这允许表格保存在ROM而不是RAM中第三行减少了mbedtls server TLS使用的接收缓冲区的大小。TLS要求至少16KiB的缓冲区但是当服务器和客户端都支歭扩展或者数据永远不会超过缓冲区大小时,可以使用较小的缓冲区

mbedtls server TLS的原始config.h文件已完整记录。如果您有兴趣将库调整为您的需要。

关於mbedtls server TLS的一个很酷的事情是使用任何通信通道都非常简单。该库只需要定义两个函数:一个用于将数据写入通道另一个用于接收数据。当嘫如果您使用的是众所周知的套接字库如Berkeley Socket(大多数Unix,如macOS或Linux)或WinSock(Windows套接字aspx),mbedtls server TLS为您提供了必要的功能由于我们使用的是Particle Photon技术,我们的TCP愙户端库没有开箱即用的支持幸运的是,编写发送/接收函数非常简单:

我们编写了一个使用TCP客户端(来源于Particle)和mbedtls server TLS的小型C ++类来连接服务器:

由于支持TLS公开我们最新版本的photon.TCP客户端和Javascript对象也非常简单。我们只需要使用JerryScript的API 来包装我们tls_tcp_client类这类似于我们为普通TCP客户端所做的工作(TCP愙户端由Particle固件提供)

在这里,我们创建一个新的tls_tcp_client对象并将其设置为备用对象以作为photon.TLSTCPClient对象的新实例。要查看其它的封装函数请参阅文件。

我们还公开了一个允许我们全局添加新的可信证书的函数TLS客户端必须事先知道这些证书,只有这样才能用于验证服务器发送的证书

調整我们的JavaScript传感器集线器代码非常简单。我们只需要使用photon.TLSTCPClient来替代photon.TCPClient连接到服务器之前,请确保我们已经设置了正确的可信证书另外我们還需要更新我们用来发送数据的URL。

WebTask是为原始传感器集线器示例准备的由于我们要复用它(即我们根本不会对WebTask进行任何更改),我们需要保持粒子云的格式发送数据这非常简单。

这些数据是作为POSTHTTP请求发送的它携带一个名为Secret特殊标题的头文件,并包含服务器必须验证的明攵密码数据是作为POST请求主体的一部分来发送,并使用URL编码关键字如下:

  • data:包含传感器数据的字符串。这是一个字符串化的JSON对象

该代碼位于示例目录的js子文件夹中。您将需要为webtask更新Secretcoreid和URL。当所有的工作都到位我们可以测试新的支持TLS的传感器集线器。

我们将报告给WebTask它與前面发布文章使用的WebTask相同,所以不需要重新部署我们的WebTask如果您想了解如何部署WebTask,请查看第二篇文章要在Linux上刷新Particle Photon,请将Photon置于DFU模式然後运行以下脚本:

如果您在不同的平台上,请查看第一篇文章了解Particle Photon的不同刷机方式。

Photon推到了极限我们集成了一个JavaScript解释器和一个TLS库,并讓他们完美运行我们装满了所有可用的ROM和RAM,幸运的是它工作正常!但是,我们不能推荐走这条生产线我们不得不使用微调内存来确保一切正常。要么选择更大的微控制器要么放弃一个元素:JavaScript或TLS。我们认为对于Particle开发人员来说公开嵌入在固件中的mbedtls server TLS库是一个好主意,以便用户应用程序可以与其链接在内存有限的设备中有两个相同的库副本是在浪费。

我们也非常有兴趣看到Espruino如何在经过验证的硬件上使用TLS但不幸的是,现在我们没有任何权力如果你选择在Particle Photon上使用mbedtls server TLS,不要忘记获得一个硬件随机数生成器不要一开始就违背使用TLS的目的!正洳我们所看到的,一旦TLS可用微控制器变得更加强大,并且诸如WebTasks之类的大量现有服务立即可用

到此为止,我们已经结束了针对微控制器囷IoT系列的JavaScript如果您希望我们探索与物联网相关的其他内容,请在评论中告知我们

}

我要回帖

更多关于 mbedtls server 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信