0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

雅特力AT32 MCU基于mbed TLS的HTTPS服务器

雅特力 AT32 MCU 2024-01-06 08:14 次阅读

HTTPS概述

HTTPS的安全性是基于Transport Layer Security (TLS), TLS是一种网络加密通信的方式,作为Secure Sockets Layer (SSL)的接续协议,TLS允许客户端与服务端的互相验证。TLS以凭证为概念,凭证包含:公钥、服务器身份、凭证颁发单位的签名。对应的私钥永远不会公开,任何使用私钥加密的密钥数据只能用公钥来解密,反之亦然。整个加密通信流程,可以透过图1来简单描述:1.客户端发起hello交握:给服务器的讯息有:

  • 包含时间戳的32位随机数字client_random
  • 加密协定
  • 客户端支持的加密方式

2. 服务端必须要有一套证书,可以自制或向组织申请。自己颁发的证书需要客户端验证通过,才可以继续访问,使用受信任单位申请的证书不会弹出提示页面。3. 一对公钥和私钥,可以想象成一把钥匙(私钥)和一个锁头(公钥),把锁头给客户端将重要的数据锁起来,客户端将锁好的数据传给服务器,只有服务器有开锁的钥匙可以解开,所以即使传送过程被截取也无法破解。4. 对于客户端的hello交握,服务端响应以下讯息给客户端:

  • 另一个包含时间戳的32位随机数字server_random
  • 加密协定
  • 加密方式
  • 服务器证书:包含拥有者名称、网站地址、证书公钥、证书颁发机构数字签名、过期时间等。

5. 客户端验证服务器传来的凭证是否有效?例如颁发机构、过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。(本应用笔记不是使用第三方证书授权中心(CA)签发的凭证,而是使用自己颁发的凭证,所以客户端必须先取得签发机构的公钥(下一节的kvm5.pem)来验证颁发机构签名,才不会弹出警告框)6. 在此之前的所有TLS交握讯息都是明文传送,现在收到服务器的证书且验证没问题,则客户端先产生PreMaster_Secret

  • 使用加密算法,例如:RSA, Diffie-Hellman,对server_random运算产生。
  • 或称PreMaster_Key
  • 是一个48个位的Key,前2个字节是协议版本号,后46字节是用在对称加密密钥的随机数字。

7. 客户端用服务端送来的公钥加密PreMaster_Secret。8. 客户端将加密的PreMaster_Secret传送给服务端,目的是让服务端可以像客户端用一样随机值产生Master_Secret。9. 服务端用私钥解密PreMaster_Secret。

  • 此时客户端与服服务端都有一份相同的PreMaster_Secret和随机数client_random, server_random。
  • 使用client_random及server_random当种子,结合PreMaster_Secret,客户端和服务端将计算出同样的Master_Secret。
  • 作为资料加解密相关的Key Material。

10. 作为资料加解密相关的Key Material。11. 作为资料加解密相关的Key Material。图1. HTTPS原理9945cd70-ac28-11ee-aa22-92fbcf53809c.png

例 HTTPS服务器

功能简介

本示例需要使用到EMAC的功能,搭配LwIP协议栈,此协议栈有提供HTTPS的API, 但会使用到mbed TLS的加密功能,这包库从Keil的官方网站或是透过Keil内的Pack Installer可以获得。图2. 透过Run-Time管理器加入mbed TLS99530666-ac28-11ee-aa22-92fbcf53809c.png

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD2) 软件环境at32f4xx\project\mdk_v5

软件设计

1) 配置流程

  • 配置EMAC功能
  • 初始化LwIP协议栈
  • 配置私钥及CA凭证给服务器
  • 初始化HTTPS服务器

2) 代码介绍

  • ssl_server函数代码描述

996325d2-ac28-11ee-aa22-92fbcf53809c.png

使用OpenSSL建立自签凭证

在本应用笔记中,我们将使用自签凭证来建立TLS联机,而发行自签凭证会使用到OpenSSL这个工具,以下会简单介绍在Windows上及在Linux Ubuntu上,如何安装OpenSSL。

  • Windows

因为OpenSSL未提供可执行的安装档,因此我们透过Git for Windows来达到安装OpenSSL的目的;当安装完成后,默认执行文件路径为C:\ProgramFiles\Git\usr\bin\openssl.exe,你可以将C:\Program Files\Git\usr\bin路径加入到PATH环境变量之中,以后就可以直接输入openssl来执行此工具。

  • Ubuntu

只需要在终端机中下命令997e9826-ac28-11ee-aa22-92fbcf53809c.png在确定PC上有OpenSSL这个工具后,基本上只要按照以下步骤,就一定可以建立出合法的自签凭证:1. 建立ssl.conf配置文件9988a118-ac28-11ee-aa22-92fbcf53809c.png上述配置文件内容的[dn]区段(Distinguished Name)为凭证的相关信息,你可以自由调整为你想设定的内容,其中O(Organization)是公司名称,OU(Organization Unit)是部门名称,而CN(Common Name)则是凭证名称,你可以设定任意名称,设定中文也可以,但请记得档案要以UTF-8编码存盘,且不能有BOM字符。配置文件的[alt_names]区段,则是用来设定SSL凭证的域名,这部分设定相当重要,如果没有设定的话,许多浏览器都会将凭证视为无效凭证。这部分你要设定几组域名都可以,基本上没有什么上限,因为自签凭证主要目的是用来开发测试之用,因此建议可以把可能会用到的本机域名(localhost)或是局域网络的IP地址都加上去,以便后续进行远程联机测试。2. 打开终端机工具后,切换到存放ssl.conf的目录下后,透过OpenSSL命令产生出自签凭证与相对应的私钥,输入以下命令就可以建立出私钥(server.key)与凭证档案(server.crt):99aa4d22-ac28-11ee-aa22-92fbcf53809c.png生成的私钥与凭证档案会跟ssl.conf在同一个目录下。3. 汇入自签凭证到「受信任的跟证书授权单位」光是建立好自签凭证还是不够的,网站服务器也设定正确才行,这毕竟是一个PKI基础架构,你还必须让所有需要安全联机的端点都能互相信任才行,因此你还须将建立好的自签凭证安装到「受信任的跟证书授权单位」之中,这样子你的操作系统或浏览器才能将你的自签凭证视为「可信任的联机」。以下为手动汇入的步骤:

  • 开启档案总管,并鼠标双击server.crt档案
  • 点击「安装凭证」按钮
  • 选取「目前使用者」并按「下一步」继续
  • 选取「将所有凭证放入以下的存放区」并按下「浏览」按钮
  • 选取「受信任的跟证书授权单位」并按下「确定」
  • 按「下一步」继续
  • 按「完成」继续
  • 在安全性警告窗口按下「是(Y)」即可完成设定

4.将私钥及凭证汇入到TLS serverTLS server负责解密数据,在本应用笔记中就是MCU端,分别将私钥及凭证填入demo code中的mbedtls_test_srv_key及mbedtls_test_srv_crt即可。

实验效果

  • 浏览器的网址以HTTPS开头,且锁头图示为上锁的状态

图3. HTTPS页面99b4e304-ac28-11ee-aa22-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343607
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82509
  • https
    +关注

    关注

    0

    文章

    48

    浏览量

    5842
  • 雅特力
    +关注

    关注

    0

    文章

    135

    浏览量

    7768
收藏 人收藏

    评论

    相关推荐

    国产MCU做得越来越好了 在车用电子领域再度突破

    `在车用电子领域再度突破,AT32 MCU大量应用于ADAS环视系统随着城市化进程的迅猛发展,人民生活水平的日益提高,城市机动车数量飞
    发表于 11-30 21:58

    「ICCAD 2020」即将参展中国集成电路设计业2020年会

    还将展示微型打印机、三轴手持稳定、指纹识别、扫地机器人、BMS电池管理、DVR等多款终端设备应用。精彩主题演讲主题:
    发表于 12-01 17:58

    AT32F407/407A系列MCU,可轻松替换STM32F107/207/407

    网关, 串口服务器, 微打印机, 舞台灯光, 工控, 安防, LED显示屏, 工业机器人, 5G应用>>32位MCU
    发表于 01-22 14:36

    Cortex-M4高性能AT32F413系列MCU,优势替换STM32F103

    应用,电机控制,OBD应用>>32位MCU AT32与Sxx32/Gx32替换对照表( 参照
    发表于 01-22 14:40

    FAQ0093 AT32更换外部晶振后BSP修改方法

    AT32_New_Clock_Configuration 工具的使用以及 AT32 时钟配置流程、代码解析等详细介绍,请参考各型号的 AN,下表所列 AN 均可从官网获取。 类
    发表于 02-19 21:23

    mbed TLS的目标是什么

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证2.0版(与GPLv2许可也可)。网站上指出,m
    发表于 07-19 06:11

    FAQ0090 AT32F4xx系列独立PWM输出数量

    FAQ0090 AT32F4xx系列独立PWM输出数量Questions: AT32F4xx 系列不同封装型号可以输出最多独立 PWM 数量Answer:AT32F4 系列不同封装型号可以输出
    发表于 05-11 19:44

    如何基于HTTP Web服务器示例实现TLS HTTPS服务器

    我正在尝试基于此 HTTP Web 服务器示例实现 TLS HTTPS 服务器https://github.com/STMicroelec
    发表于 01-04 06:23

    AT32 EMAC客户端和服务器

    AT32 EMAC client and server本文以的AT32F407系列,演示了一系列的范例
    发表于 10-24 07:39

    AT32 EMAC iperf相关资料

    AT32 EMAC iperf本文以的AT32F407系列,演示了一系列的范例
    发表于 10-24 06:54

    AT32 MCU QSPI应用说明

    AT32 MCU QSPI Application Note主要介绍以下几部分内容:1. 基于提供的V2.x.x 的BSP 板级支持包
    发表于 10-25 06:18

    AT32 MCU SDIO入门指南

    AT32 MCU SDIO入门指南本应用入门指南主要介绍以下几部分内容:1.基于提供V2.x.x 的BSP板级支持包来进行SD 存储卡
    发表于 10-25 08:08

    AT32基于mbed TLSHTTPS服务器

    AT32基于mbed TLSHTTPS服务器介绍如何使用mbed
    发表于 10-26 08:24

    如何配置服务器使用 HTTPS

    SSL 安装 —— 如何配置服务器使用 HTTPS
    的头像 发表于 02-09 15:17 7196次阅读
    如何配置<b class='flag-5'>服务器</b>使用 <b class='flag-5'>HTTPS</b>

    HTTPS是如何做安全认证的

    (传输层安全)协议来实现安全连接。 TLS 可以通过单向或双向的证书验证来实现。在单向中,服务器分享其公共证书,以便客户可以验证它是一个受信任的服务器。另一个选择是双向验证。客户端和服务器
    的头像 发表于 10-09 15:54 634次阅读