2011年10月DocID022106第1版1/38AN3967应用笔记STM32F417xx微控制器的安全套接字层(SSL)1前言STM32F417xx微控制器的特点是具有完整的10/100Mb/s以太网外设,可支持介质独立接口(MII)和精简的介质独立接口(RMII),通过这些接口可以连接物理层(PHY);此外还支持IP、UDP、TCP及ICMP协议的硬件校验.
STM32F417xx的高级特性之一是采用硬件加密处理器,用于实现AES/128/192/256、三重DES、DES、SHA-1、MD5和RNG.
它支持安全套接字层(SSL)与传输层安全性(TLS)密码协议,可确保网络(如Internet)通信安全,使得客户端和服务器应用程序能够以私密、安全的方式通信.
本应用笔记的目的在于提供以免费SSL/TLS库(即PolarSSL库)为基础创建的演示包.
本应用笔记的结构如下:第2节提供缩略语表.
第3节对SSL/TLS进行了综合介绍.
第4节介绍了PolarSSL库.
第5节介绍了STM32F417xx硬件加密处理器.
最后,第6节介绍STM32F417xx的演示包.
注:本应用笔记仅适用于STM32F417xx器件并使用STM3241G-EVAL板作为硬件平台,因为在STM32F407xx器件中并未嵌入加速加密功能.
www.
st.
com目录AN39672/38DocID022106第1版目录1前言12缩写和定义63SSL/TLS协议概述73.
1SSL应用层73.
2SSL/TLS协议的历史83.
3SSL/TLS子协议83.
3.
1SSL握手协议93.
3.
2SSL记录协议113.
3.
3SSL报警协议123.
3.
4密码规格变更协议124PolarSSL库134.
1许可证135STM32F417xx硬件密码技术145.
1加密处理器145.
2随机数发生器145.
3散列处理器146演示包说明156.
1演示包目录和固件组成156.
1.
1演示包目录156.
1.
2固件组成166.
2演示设置176.
2.
1PHY接口配置176.
2.
2MAC地址和IP地址设置176.
2.
3STM3241G-EVAL设置186.
3如何使用演示程序186.
3.
1SSL客户端演示程序186.
3.
2SSL服务器演示程序216.
4SSL演示程序的存储器占用情况246.
4.
1SSL客户端演示程序24DocID022106第1版3/38AN3967目录36.
4.
2SSL服务器演示程序257结论268参考资料27附录A补充信息.
28A.
1流程图28A.
2项目配置30A.
2.
1LwIP配置30A.
2.
2PolarSSL配置.
31A.
2.
3FreeRTOS配置.
32A.
3使用Mozilla7.
0.
1运行SSL服务器演示程序33A.
4使用IE8运行SSL服务器演示程序359版本历史37表格索引AN39674/38DocID022106第1版表格索引表1.
缩写和定义6表2.
STM3241G-EVAL跳线配置18表3.
SSL客户端演示程序的存储器占用情况25表4.
SSL服务器演示程序存储器占用情况25表5.
SSL服务器演示程序的lwIP选项30表6.
SSL客户端演示程序的lwIP选项30表7.
PolarSSL选项:SSL服务器演示程序的config.
h文件31表8.
PolarSSL选项:SSL客户端演示程序的config.
h文件32表9.
SSL客户端演示程序的FreeRTOS配置.
32表10.
SSL服务器演示程序的FreeRTOS配置.
32表11.
文档版本历史37DocID022106第1版5/38AN3967图片索引5图片索引图1.
SSL应用架构8图2.
SSL子协议8图3.
SSL握手协议9图4.
恢复SSL会话的握手协议.
11图5.
SSL记录协议11图6.
演示包结构15图7.
PolarSSL与LwIP连接.
17图8.
SSL客户端演示程序架构19图9.
SSL客户端演示程序.
20图10.
ssl_server应用程序窗口.
20图11.
超级终端窗口21图12.
SSL服务器演示程序架构22图13.
SSL服务器演示程序.
23图14.
成功连接后显示的HTML页面23图15.
超级终端SSL服务器连接状态24图16.
SSL客户端任务流程图28图17.
SSL服务器任务流程图29图18.
不可信连接对话框133图19.
不可信连接对话框233图20.
AddSecurityException(添加安全例外)对话框34图21.
任务状态页面34图22.
"无法显示网页"错误消息.
35图23.
证书错误消息36图24.
任务状态页面36缩写和定义AN39676/38DocID022106第1版2缩写和定义表1.
缩写和定义缩写定义AES高级加密标准ANSI美国国家标准协会API应用程序编程接口ARC4所谓的Rivest密码4ARP地址解析协议CA证书颁发机构CBC密码块链接CTR计数器DES数据加密标准DHCP动态主机配置协议DHMDiffie—Hellman密钥交换ECB电子密码本FIPS联邦信息处理标准HAVEGE硬件易失性熵收集与扩展HMAC散列消息验证码HTTP超文本传输协议HTTPS安全超文本传输协议ICMPInternet控制消息协议IETFInternet工程任务组IGMPInternet组管理协议LwIP轻量级TCP/IP协议栈MAC消息验证码MAC地址介质访问控制地址MCO微控制器时钟输出MD2消息摘要算法2MII介质独立接口PPP点对点协议RMII精简的介质独立接口RNG随机数发生器RSARivest、Shamir和AdlemanSHA-1安全散列算法1SNMP简单网络管理协议DocID022106第1版7/38AN3967SSL/TLS协议概述373SSL/TLS协议概述安全套接字层(SSL)协议与传输层安全性(TLS)协议可确保Internet通信安全,使得客户端和服务器应用程序能够以私密、安全的方式通信.
这些协议层位于传输协议(如TCP/IP)之上.
SSL是用于在服务器与客户端间创建加密链路的标准安全技术.
此链路可确保所有通信数据的私密与安全.
SSL/TLS主要有如下目标:保持数据在通信应用程序双方之间的完整性.
保护服务器与客户端之间传送的信息安全.
验证与客户端通信的服务器.
允许客户端与服务器选择双方都支持的加密算法.
验证(可选)与服务器通信的客户端.
使用公钥加密技术生成共享密钥.
建立加密的SSL连接.
3.
1SSL应用层SSL/TLS应用包括以下五层:应用层:应用层指大多数应用程序进行网络通信所使用的高层级协议.
SSL/TLS层:SSL/TLS层确保Internet通信安全.
TCP层:传输层负责独立于底层网络的端到端消息传输以及差错控制、分段、流控制、拥塞控制和应用程序寻址.
IP层:Internet协议层负责主机寻址以及将数据包从源主机路由到目的主机.
物理层:物理层包含网络的基本硬件传输技术.
SSL安全套接字层TCP/IP传输控制协议/Internet协议TLS传输层安全性UDP用户数据报协议URL统一资源定位器USART通用同步和异步收发器表1.
缩写和定义(续)缩写定义SSL/TLS协议概述AN39678/38DocID022106第1版图1.
SSL应用架构3.
2SSL/TLS协议的历史1994年,Netscape开发了SSL用于确保Internet通信安全.
不久之后,Internet工程任务组(IETF)开始开发具有相同功能的标准协议.
SSL1.
0(Netscape,1993):Netscape内部设计.
SSL2.
0(Netscape,1994):该版本存在大量安全性缺陷.
SSL3.
0(Netscape,1996):所有Internet浏览器都支持该版本的协议.
TLS1.
0(IETF,1999):该版本在RFC2246中被定义为SSL3.
0的升级版.
"尽管TLS1.
0与SSL3.
0区别不大,但它们显然不支持相互操作":[1]:RFC2246:TLS协议1.
0版注:本文档中将"SSL/TLS"协议称为"SSL".
3.
3SSL/TLS子协议SSL协议包括四个子协议:SSL记录协议、SSL握手协议、SSL报警协议和SSL密码规格变更协议.
图2.
SSL子协议66/76/7&3,3069DocID022106第1版9/38AN3967SSL/TLS协议概述373.
3.
1SSL握手协议SSL会话状态由SSL握手协议控制.
当SSL服务器与SSL客户端首次进行通信时,此协议即使用SSL记录协议在它们之间交换一系列消息.
这种信息交换的目的是为了推进以下动作:确定协议版本是SSL3.
0还是TLS1.
0允许客户端与服务器选择双方均支持的加密算法或密码文件验证与客户端通信的服务器验证(可选)与服务器通信的客户端使用公钥加密技术生成共享密钥建立加密的SSL连接图3.
SSL握手协议SSL/TLS协议概述AN396710/38DocID022106第1版如下是SSL握手协议的操作步骤:1.
首先,客户端发送一条ClientHello消息,其中包含支持的SSL协议最高版本(SSL3.
0版或TLS1.
0版)、一个随机数、支持的密码组合和压缩方法列表.
2.
服务器以一条ServerHello消息响应,其中包含所选的协议版本、另一个随机数、从客户端提供的列表中选择的密码组合和压缩方法以及会话ID.
注:客户端与服务器必须支持至少一个公用密码组合,否则握手协议失败.
服务器通常选择双方都支持的最强公用密码组合.
3.
服务器以可选证书消息形式发送数字证书,例如,服务器使用X.
509数字证书.
4.
如果未发送证书,服务器将发送一条可选的ServerKeyExchange消息,其中包含服务器的公用信息.
5.
如果服务器需要数字证书对客户端进行认证,则附加一条可选的CertificateRequest消息.
6.
服务器发送一条ServerHelloDone消息表示这一阶段的协商结束.
7.
如果服务器发送了CertificateRequest消息,则客户端必须在Certificate消息中发送其X.
509客户端证书.
8.
客户端发送一条ClientKeyExchange消息.
此消息包含用于生成对称加密密钥和消息认证码(MAC)密钥的预备主密码随机数.
客户端使用服务器公钥加密预备主密码随机数.
注:公钥由服务器在数字证书或ServerKeyExchange消息中发送.
9.
如果客户端已将数字证书发送到服务器,客户端还将发送一条签有客户端私钥的CertificateVerify消息.
通过验证此消息的签名,服务器可以明确验证客户端数字证书的所有关系.
10.
客户端发送一条ChangeCipherSpec消息说明已加载新参数(加密方法和密钥).
11.
客户端发送一条Finished消息,此消息是以新加密方法和密钥加密的第一条消息.
12.
服务器端以ChangeCipherSpec和Finished消息进行响应.
13.
SSL握手协议结束,可以开始加密交换应用数据.
恢复SSL会话当客户端与服务器决定恢复之前的会话或重复现有会话(取代协商新安全参数)时,其消息发送流程如下:1.
客户端以要恢复会话的会话ID发送一条ClientHello消息.
2.
服务器检查其会话缓存以进行匹配.
如果存在匹配的会话ID,并且服务器希望在指定的会话状态下重新建立连接,则以相同的会话ID值发送一条ServerHello消息.
3.
客户端与服务器都必须发送ChangeCipherSpec消息并直接进行到Finished消息.
4.
连接重建过程完成后,客户端和服务器可以开始交换加密的应用数据.
注:如果未找到匹配的会话ID,服务器将生成新会话ID,而客户端与服务器将执行整个握手协议[1]:RFC2246:TLS协议1.
0版.
DocID022106第1版11/38AN3967SSL/TLS协议概述37图4.
恢复SSL会话的握手协议3.
3.
2SSL记录协议记录协议提取要传输的消息、将数据分段为可处理的块、压缩数据(可选)、应用MAC、加密和传输处理后的结果.
接收到的数据经过解密、验证、解压和重组后,再传送到更高层级的客户端.
图5.
SSL记录协议)))Q偠MS18971V1SSL/TLS协议概述AN396712/38DocID022106第1版3.
3.
3SSL报警协议SSL报警协议提示SSL会话中存在的问题,这些问题涉及简单的警告(未知证书、废除的证书、过期证书)直至导致SSL连结立即终止的致命错误消息.
3.
3.
4密码规格变更协议SSL密码规格变更协议由一条消息组成,通过该消息指示SSL握手协议结束.
注:有关SSL协议的详细信息,请参见[1]:RFC2246:TLS协议1.
0版.
DocID022106第1版13/38AN3967PolarSSL库374PolarSSL库PolarSSL是一个以C语言编写的轻量级开源密码库与SSL/TLS库.
该库中含有实现SSL/TLS服务器或客户端应用所需的所有函数.
它还包含一系列散列函数和加密算法.
特性:SSL3.
0和TLS1.
0客户端/服务器支持X.
509数字证书对称加密算法:AES、三重DES、DES、ARC4和Camellia等散列函数:MD2、MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512消息验证码:HMACMD2、HMACMD4、HMACMD5、HMACSHA-1软件随机数发生器:HAVEGE公钥密码技术:RSA与Diffie-Hellman(DHM)密钥交换PolarSSL库的源代码可从此链接下载:http://polarssl.
org/download_overview4.
1许可证用户使用PolarSSL需符合双许可模型的要求.
即PolarSSL用户须取得开源GPL第二版许可证以及闭源项目的商用许可证.
有关许可的详细信息,请参见PolarSSL许可网页http://polarssl.
org/licensing.
STM32F417xx硬件密码技术AN396714/38DocID022106第1版5STM32F417xx硬件密码技术如第4节所述,PolarSSL库含有一系列对称加密算法(AES128/192/256、三重DES)、散列函数(MD5、SHA-1)和一个软件随机数发生器(HAVEGE).
要实现SSL/TLS应用,需要使用所有这些函数和算法.
为使CPU从处理加密/解密、散列和RNG(随机数发生器)的任务中解脱出来,所有这些函数和算法可通过STM32F417xx内置的硬件加速AES128/192/256、三重DES、MD5、SHA-1和模拟RNG功能来实现.
5.
1加密处理器借助加密处理器,可使用三重DES或AES算法对数据进行加密或解密.
加密处理器完全兼容下列标准:联邦信息处理标准出版物"FIPSPUB46-3,1999年10月25日"规定的数据加密标准(DES)和三重DES(TDES).
它遵循美国国家标准协会(ANSI)X9.
52标准.
联邦信息处理标准出版物"FIPSPUB197,2001年11月26日"规定的高级加密标准(AES)CRYP处理器可用于电子密码本(ECB)模式、密码块链接(CBC)模式或计数器(CTR)模式(仅在AES中存在)下的加密与解密操作.
5.
2随机数发生器RNG处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个32位的随机数.
5.
3散列处理器散列处理器完全兼容安全散列算法(SHA-1)、MD5(消息摘要算法5)散列算法以及适合多种应用程序的HMAC(散列消息验证码)算法.
对于长达(264-1)的消息,散列处理器将计算消息摘要(SHA-1算法为160位,MD5算法为128位),而HMAC算法则通过散列函数提供验证消息的方法.
HMAC算法涉及两次调用SHA-1或MD5散列函数.
注:有关详细信息,请参见[2]:RM0090:STM32F405xx、STM32F407xx、STM32F415xx和STM32F417xx微控制器系列参考手册的CRYP、HASH和RNG小节.
DocID022106第1版15/38AN3967演示包说明376演示包说明演示包含有基于PolarSSL库及LwIP堆栈运行的两个演示程序:SSL客户端演示程序:此演示程序证明STM32F417xx器件具有通过TCP/IP上的SSL连接与服务器交换消息的能力.
借助此演示程序,可以通过SSL协议将STM3241G-EVAL板连接到安全web服务器.
SSL服务器演示程序:SSL服务器通过HTTP与SSL协议的组合来实现服务器的加密和安全识别.
借助此演示程序,可以使用SSL协议从网络浏览器连接到STM3241G-EVAL板.
6.
1演示包目录和固件组成6.
1.
1演示包目录演示包含有下面列出的五个主要文件夹:Libraries:此文件夹包含用于组成STM32F4xx标准外设库核心的所有子目录和文件.
Project:此文件夹包含演示头文件和源文件.
FreeRTOS:此文件夹包含实时内核源码和与调度程序源码相关的所有目录.
—include:包含调度程序头文件.
—portable:包含STM32特定代码、编译器的调度程序端口层和内存管理文件.
LwIP:此文件夹包含TCP/IP堆栈的头文件和源文件.
PolarSSL:此文件夹包含PolarSSL-1.
0.
0库的头文件和源文件.
图6.
演示包结构演示包说明AN396716/38DocID022106第1版6.
1.
2固件组成这两个演示程序均基于以下三个软件模块:LwIP-1.
3.
2(免费TCP/IP协议栈)、PolarSSL-1.
0.
0(免费SSL/TLS库)和FreeRTOS-6.
1.
0(免费实时内核).
下面对这些模块加以说明.
LwIP协议栈LwIP是瑞典计算机科学研究所(SICS)的AdamDunkels开发的免费TCP/IP协议栈,需要有BSD许可证才能使用.
它的源代码可从此链接下载:http://download.
savannah.
gnu.
org/releases/lwip/lwIPTCP/IP协议栈支持以下协议:IPv4、IPv6、UDP、TCP、ICMP、IGMP、SNMP、ARP和PPP.
它不包括应用层的协议,如HTTP或HTTPS.
lwIP提供三类API(应用程序编程接口):原始API:适合在无操作系统时使用的原生API.
协议栈的核心部分使用此API进行各种协议间的交互.
NetconnAPI:比原始API抽象程度更高的顺序API.
要使用NetconnAPI,需要有操作系统支持.
所有数据包的处理(输入和输出)都在专用线程(TCP/IP线程)内完成.
应用程序线程使用消息和信号量与此核心线程进行通信.
套接字API:基于Berkeley套接字接口(BSD套接字).
要使用套接字API,需要有操作系统支持.
PolarSSL库PolarSSL是一种免费库,用于基于SSL/TLS协议实现安全应用.
此库的官方版未给任何微控制器提供任何端口:用户需解决.
PolarSSL库随附net.
c文件,用作PolarSSL库与LwIP协议栈的接口.
要使用PolarSSL库,需修改此文件以支持指定的协议栈.
net.
c含有确保PolarSSL库与lwIP协议栈间能够传输帧的函数.
其主要函数有:net_recv,准备好从协议栈读取数据包时应调用此函数.
net_send,准备好向协议栈发送数据包时应调用此函数.
PolarSSL的连接层使用套接字API与TCP/IP协议栈进行通信.
注:用于演示程序的API是套接字API,PolarSSL与LwIP协议栈共享此套接字API.
FreeRTOSFreeRTOS是用于嵌入式器件的迷你开源实时内核.
它的源代码可从此链接下载:http://www.
freertos.
org/特性:调度程序操作:—抢占式:总是运行优先级最高的可用任务.
—合作式:只有发生任务阻塞或明确调用YIELD()(用于强制执行上下文切换的宏)任务时,执行上下文切换.
进程间通信:通过消息队列和二进制信号量实现任务间通信.
必要时可更改可用的任务优先级数目.
DocID022106第1版17/38AN3967演示包说明37图7.
PolarSSL与LwIP连接6.
2演示设置6.
2.
1PHY接口配置演示固件用于连接支持MII和RMII这两种模式的PHY接口.
要选择想使用的PHY接口模式,请转至main.
h文件并选择以下两个定义之一:#defineMII_MODE#defineRMII_MODE如果main.
h文件中同时定义了MII_MODE和PHY_CLOCK_MCO,则对于MII模式,PHY时钟可来自外部晶振或者由STM32通过MCO引脚提供.
注:对于RMII模式,必须通过在位于CN3下方的U3封装中焊接一个50MHz的振荡器(参见SM7745HEV-50.
0M或相应手册)并断开JP5上的跳线来提供50MHz的时钟.
这个振荡器并未随电路板一同提供.
有关详细信息,请参见STM3240G-EVAL评估板用户手册UM1461.
6.
2.
2MAC地址和IP地址设置默认MAC地址固定为00:00:00:00:00:01.
要更改此地址,可以修改main.
h文件中定义的六字节形式.
在SSL客户端演示中,IP地址设置为静态地址,main.
h文件中定义的默认IP地址是192.
168.
0.
8.
在SSL服务器演示中,IP地址既可设置为静态地址192.
168.
0.
8,也可设置为由DHCP服务器分配的动态地址.
在main.
h文件中选择IP地址的配置模式:取消注释#defineUSE_DHCP可通过DHCP配置IP地址注释#defineUSE_DHCP可使用静态地址(192.
168.
0.
8)注:如果选择通过DHCP配置IP地址,但应用程序没有找到它之前在网络中所连接的DHCP服务器,则IP地址将自动设置为静态地址(192.
168.
0.
8).
演示包说明AN396718/38DocID022106第1版6.
2.
3STM3241G-EVAL设置完成设置PHY接口模式、MAC地址和IP地址后,需要按下表所示配置STM3241G-EVAL评估板.
6.
3如何使用演示程序6.
3.
1SSL客户端演示程序此演示程序使用STM3241G-EVAL板作为客户端,连接到提供SSL握手协议的安全服务器.
演示程序架构如图8所示,SSL客户端演示程序包括四项任务:LED任务:LED4每200ms闪烁一次.
以太网任务:更低层经过设置以检测中断请求帧的接收情况.
从而以太网控制器接收到有效帧时便产生中断.
在此中断的处理函数中,需创建一个二进制信号量来唤醒以太网任务.
此任务将输入帧传送到TCP/IP协议栈.
TCP/IP任务:所有数据包的处理(输入和输出)均在此线程内完成.
应用程序线程使用消息框和信号量与此线程进行通信.
SSL客户端任务:该任务处理SSL握手协议.
它连接到SSL服务器并执行以下操作:—初始化SSL结构(SSL上下文、SSL会话、SSLRNG).
—连接到SSL服务器.
—建立SSL会话.
—处理SSL握手协议.
—向服务器写入消息.
—读取来自服务器的消息.
—通过USART发送这些消息.
—关闭连接.
—清除全部SSL结构.
表2.
STM3241G-EVAL跳线配置跳线MII模式配置RMII模式配置JP51-2:通过外部晶振提供25MHz时钟2-3:通过PA8的MCO提供25MHz时钟不适用JP62-3:使能MII接口模式1-2:使能RMII接口模式JP8断开:选择MII接口模式接通:选择RMII接口模式JP221-2:使能RS232DocID022106第1版19/38AN3967演示包说明37图8.
SSL客户端演示程序架构如何使用演示程序首先,按如下说明连接STM3241G-EVAL板:以太网链路:连接到远程PC(通过交叉以太网电缆)或本地网络(通过直通以太网电缆).
RS232链路(用于像超级终端那样的显示调试消息的应用程序):在DB9连接器CN16(USART3)与PC串口间,连接零调制解调器母头/母头RS232电缆.
要运行SSL客户端示例程序,请执行下列操作:将SSL客户端代码编译并编程到STM32F417Flash中.
在远程PC上运行SSL服务器应用程序,并运行Utilities\PC_Software\Server下的ssl_server.
exe.
此应用程序将等待https端口443的客户端连接.
启动STM3241G-EVAL板.
在SSL服务器应用程序窗口和超级终端窗口中监视连接状态.
注:1请确保远程PC的IP地址与ssl_client.
c文件定义的IP地址(#defineSSL_SERVER_NAME"192.
168.
0.
1")一致.
2如果使用了防火墙,必须确保ssl_server应用程序能够接受连接请求.
如果不能,防火墙将拒绝客户端请求.
演示包说明AN396720/38DocID022106第1版图9.
SSL客户端演示程序ssl_server.
exe应用程序窗口如图10所示.
SSL服务器应用程序窗口显示连接请求的状态,并且显示服务器与客户端间交换的所有消息.
图10.
ssl_server应用程序窗口超级终端图11:超级终端窗口显示了在STM32F417xx器件上运行的SSL客户端应用程序的状态(写消息与读消息):—SSL结构(SSL上下文、SSL会话、SSLRNG)的状态—客户端对服务器的请求:"GET"—接收到的消息包含握手协议的结果:例如"Successfulconnectionusing:SSL_EDH_RSA_AES_256_SHA"(使用SSL_EDH_RSA_AES_256_SHA已成功连接).
DocID022106第1版21/38AN3967演示包说明37图11.
超级终端窗口6.
3.
2SSL服务器演示程序此演示程序将STM3241G-EVAL板设置成SSL服务器,等待SSL客户端发出连接请求.
演示程序架构SSL服务器演示程序包含五项任务:LED、以太网和TCP_IP任务与SSL客户端演示程序的任务相同.
SSL服务器任务:此任务创建SSL连接并等待客户端发来安全连接建立请求.
建立连接后,客户端发出Get请求以加载html页面.
此页面包含关于此演示中的任务运行信息.
SSL服务器任务也通过USART发送连接状态.
DHCP_Client任务:此任务用于通过DHCP配置IP地址.
为启用DHCP客户端,需取消注释main.
h文件中的USE_DHCP定义.
演示包说明AN396722/38DocID022106第1版图12.
SSL服务器演示程序架构如何使用演示程序首先,按如下说明连接STM3241G-EVAL板:以太网链路:连接到远程PC(通过交叉以太网电缆)或本地网络(通过直通以太网电缆).
RS232链路(用于像超级终端那样的显示调试消息的应用程序):在DB9连接器CN16(USART3)与PC串口间,连接零调制解调器母头/母头RS232电缆.
要运行SSL服务器演示程序:将SSL服务器代码编译并编程到STM32F417Flash中.
启动STM3241G-EVAL板.
打开网络浏览器如InternetExplorer或Firefox,然后在浏览器中输入评估板的IP地址,如https//192.
168.
0.
8.
注:如果使用了防火墙,必须确保HTTPS端口能够接受连接请求.
如果不能,防火墙将拒绝此连接.
DocID022106第1版23/38AN3967演示包说明37图13.
SSL服务器演示程序成功连接后,出现一个页面显示运行中的任务及其状态.
该页面还会显示页面命中数目和连接中使用的密码组合列表.
图14.
成功连接后显示的HTML页面演示包说明AN396724/38DocID022106第1版使用超级终端窗口可以监视在STM32F417xx器件上运行的SSL服务器应用程序的连接状态.
此窗口(图15)显示:连接、SSL结构和握手协议的状态,客户端发出的请求消息的大小,服务器响应的消息大小(html页面).
图15.
超级终端SSL服务器连接状态注:首次连接到服务器时,用户将从浏览器收到一条有关所提供证书的警告消息.
如果浏览器无法识别证书颁发机构签发的证书,或者该证书发到了其他网址,则会出现此警告消息.
这是因为SSL服务器应用程序使用自签名测试证书.
跳过此警告仍然安全(请参见第28页的附录A).
6.
4SSL演示程序的存储器占用情况6.
4.
1SSL客户端演示程序表3:SSL客户端演示程序的存储器占用情况列出了客户端演示程序的存储器占用信息,这是基于以下配置得到的计算结果:2个1500字节的缓冲区构成lwIP缓冲池.
这些参数在lwipopts.
h文件中通过PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE定义.
2KB专用于lwIP堆,在lwipopts.
h文件中通过MEM_SIZE定义.
5个1520字节专用于以太网驱动程序的缓冲区,在stm32f4x7_eth_conf.
h文件中定义.
这些值仅供演示目的.
若想将当前程序包用于用户自己的应用,则应根据需要对上述参数进行调整.
DocID022106第1版25/38AN3967演示包说明37注:软件使用IAREWARMv6.
21.
3进行编译,并对代码长度进行了高度优化.
6.
4.
2SSL服务器演示程序下表列出服务器演示程序的存储器占用信息,这是基于以下配置得到的计算结果:4个1500字节的缓冲区构成lwIP缓冲池.
这些参数在lwipopts.
h文件中通过PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE定义.
5KB专用于lwIP堆,在lwipopts.
h文件中通过MEM_SIZE定义.
6个1520字节专用于以太网驱动程序的缓冲区,在stm32f4x7_eth_conf.
h文件中定义.
这些值仅供演示目的.
若想将当前程序包用于用户自己的应用,则应根据需要对上述参数进行调整.
注:软件使用IAREWARMv6.
21.
3进行编译,并对代码长度进行了高度优化.
表3.
SSL客户端演示程序的存储器占用情况模块Flash(字节)SRAM(字节)Ro代码Ro数据Rw数据以太网驱动程序和接口234007816lwIP存储器管理和IP模块18894167088PolarSSL630042755748FreeRTOS30506413636应用程序模块:主程序和系统初始化273602285STM32F4xx标准外设库驱动程序2750616STM324xG-EVAL板1942457644其它(栈、堆等)2161010044732总计116326751776365表4.
SSL服务器演示程序存储器占用情况模块Flash(字节)SRAM(字节)Ro代码Ro数据Rw数据以太网驱动程序和接口234009372lwIP存储器管理和IP模块217941013888PolarSSL656747820696FreeRTOS33101314712应用程序模块:主程序和系统初始化40364652953STM32F4xx标准外设库驱动程序2750116STM324xG-EVAL板1982456344其它(栈、堆等)216405650620总计1235261292892301结论AN396726/38DocID022106第1版7结论本应用笔记介绍两个实施PolarSSL库的STM32F417xx演示程序.
第一个演示程序证明STM32F417xx器件具有通过SSL连接与服务器交换消息的能力.
借助该演示程序,可以将STM3241G-EVAL板连接到安全web服务器.
第二个演示程序通过HTTP与SSL协议的组合来实现服务器的加密和安全识别.
借助该演示程序,可以使用SSL协议从网络浏览器连接到STM3241G-EVAL板.
DocID022106第1版27/38AN3967参考资料378参考资料[1]:RFC2246:TLS协议1.
0版[2]:RM0090:STM32F405xx、STM32F407xx、STM32F415xx和STM32F417xx微控制器系列参考手册补充信息AN396728/38DocID022106第1版附录A补充信息A.
1流程图图16.
SSL客户端任务流程图069memset()EXIhavege_init()51*UHW0ret=ssl_write()ret=ssl_read()+773net_close()ssl_free()ぎUHW0UHW!
0ret=ssl_init()66/ret=net_connect()DocID022106第1版29/38AN3967补充信息37图17.
SSL服务器任务流程图069ッret=ssl_read()+773ret=ssl_write()net_close()ssl_free()ぎUHW0UHW!
0кKWWSVッㄝッ51*ret=ssl_handshake()补充信息AN396730/38DocID022106第1版A.
2项目配置A.
2.
1LwIP配置表5列出lwIP软件配置.
可修改lwipopts.
h文件执行LwIP配置:表5.
SSL服务器演示程序的lwIP选项选项值说明MEM_SIZE5*1024堆存储器的大小MEMP_NUM_PBUF5已发送但未复制的缓冲区数量MEMP_NUM_UDP_PCB4同时活动的UDP"连接"数MEMP_NUM_TCP_PCB5同时活动的TCP连接数MEMP_NUM_TCP_PCB_LISTEN5侦听的TCP连接数PBUF_POOL_SIZE4数据包缓冲区个数PBUF_POOL_BUFSIZE1500pbuf池中每个pbuf的大小LWIP_ICMP1使能ICMP协议LWIP_DHCP1使能DHCP协议LWIP_UDP1使能UDP协议LWIP_TCP1使能TCP协议TCP_MSS1460TCP最大段长度TCP_WND2*TCP_MSSTCP窗口大小:接收缓冲空间(以字节计)TCP_SND_BUF2*TCP_MSSTCP发送方缓冲空间表6.
SSL客户端演示程序的lwIP选项选项值说明MEM_SIZE2*1024堆存储器的大小MEMP_NUM_PBUF2已发送但未复制的缓冲区数量MEMP_NUM_UDP_PCB2同时活动的UDP"连接"数MEMP_NUM_TCP_PCB2同时活动的TCP连接数MEMP_NUM_TCP_PCB_LISTEN6侦听的TCP连接数PBUF_POOL_SIZE2数据包缓冲区个数PBUF_POOL_BUFSIZE1500pbuf池中每个pbuf的大小LWIP_ICMP1使能ICMP协议LWIP_DHCP1使能DHCP协议LWIP_UDP1使能UDP协议DocID022106第1版31/38AN3967补充信息37A.
2.
2PolarSSL配置PolarSSL配置可通过修改config.
h文件来完成;可通过注释或取消注释具体的行来使能/禁止软件组成元素.
为了减小存储器大小,应注释未使用的模块.
LWIP_TCP1使能TCP协议TCP_MSS1460TCP最大段长度TCP_WND2*TCP_MSSTCP窗口大小:接收缓冲空间(以字节计)TCP_SND_BUF2*TCP_MSSTCP发送方缓冲空间表6.
SSL客户端演示程序的lwIP选项(续)选项值说明表7.
PolarSSL选项:SSL服务器演示程序的config.
h文件选项说明POLARSSL_DEBUG_MSG启用所有SSL/TLS调试消息.
POLARSSL_AES_C启用下列密码组合:SSL_RSA_AES_128_SHASSL_RSA_AES_256_SHASSL_EDH_RSA_AES_256_SHAPOLARSSL_ARC4_C启用下列密码组合:SSL_RSA_RC4_128_MD5SSL_RSA_RC4_128_SHAPOLARSSL_CAMELLIA_C启用下列密码组合:SSL_RSA_CAMELLIA_128_SHASSL_RSA_CAMELLIA_256_SHASSL_EDH_RSA_CAMELLIA_256_SHAPOLARSSL_DES_C启用下列密码组合:SSL_RSA_DES_168_SHASSL_EDH_RSA_DES_168_SHAPOLARSSL_DHM_C启用下列密码组合:SSL_EDH_RSA_DES_168_SHASSL_EDH_RSA_AES_256_SHASSL_EDH_RSA_CAMELLIA_256_SHAPOLARSSL_SSL_SRV_C启用SSL/TLS服务器模式补充信息AN396732/38DocID022106第1版A.
2.
3FreeRTOS配置可修改FreeRTOSconfig.
h文件完成FreeRTOS配置.
表8.
PolarSSL选项:SSL客户端演示程序的config.
h文件选项说明POLARSSL_DEBUG_MSG启用所有SSL/TLS调试消息.
POLARSSL_AES_C启用下列密码组合:SSL_RSA_AES_128_SHASSL_RSA_AES_256_SHASSL_EDH_RSA_AES_256_SHAPOLARSSL_ARC4_C启用下列密码组合:SSL_RSA_RC4_128_MD5SSL_RSA_RC4_128_SHAPOLARSSL_CAMELLIA_C启用下列密码组合:SSL_RSA_CAMELLIA_128_SHASSL_RSA_CAMELLIA_256_SHASSL_EDH_RSA_CAMELLIA_256_SHAPOLARSSL_DES_C启用下列密码组合:SSL_RSA_DES_168_SHASSL_EDH_RSA_DES_168_SHAPOLARSSL_DHM_C启用下列密码组合:SSL_EDH_RSA_DES_168_SHASSL_EDH_RSA_AES_256_SHASSL_EDH_RSA_CAMELLIA_256_SHAPOLARSSL_SSL_CLI_C启用SSL/TLS客户端模式表9.
SSL客户端演示程序的FreeRTOS配置参数值说明configMAX_PRIORITIES7优先级最大值configMAX_TASK_NAME_LEN16任务名称的最大长度configMINIMAL_STACK_SIZE128分配给Idle任务的栈大小configTOTAL_HEAP_SIZE13*1024总FreeRTOS堆大小表10.
SSL服务器演示程序的FreeRTOS配置参数值说明configMAX_PRIORITIES7优先级最大值configMAX_TASK_NAME_LEN16任务名称的最大长度configMINIMAL_STACK_SIZE128分配给Idle任务的栈大小configTOTAL_HEAP_SIZE14*1024总FreeRTOS堆大小DocID022106第1版33/38AN3967补充信息37A.
3使用Mozilla7.
0.
1运行SSL服务器演示程序下面是使用Mozilla7.
0.
1运行SSL服务器演示程序的步骤.
1.
打开浏览器并输入URL,如https://192.
168.
0.
53.
浏览器显示一条如图18所示的警告消息.
图18.
不可信连接对话框12.
选择IUnderstandtheRisks(我了解此风险),将显示如图19所示的另一条消息.
图19.
不可信连接对话框23.
单击AddException(添加例外).
浏览器下载(CA)证书颁发机构颁发的证书.
补充信息AN396734/38DocID022106第1版图20.
AddSecurityException(添加安全例外)对话框4.
单击ConfirmSecurityException(确认安全例外)启动安全连接,如图20所示.
成功连接后,出现图21:任务状态页面,显示运行中的任务及其状态.
该窗口还显示页面命中数目.
图21.
任务状态页面DocID022106第1版35/38AN3967补充信息37A.
4使用IE8运行SSL服务器演示程序下面是使用IE8(WindowsInternetExplorer8)运行SSL服务器演示程序的步骤.
1.
打开浏览器并输入URL,如https://192.
168.
0.
8.
浏览器显示一条警告消息.
图22.
"无法显示网页"错误消息2.
刷新当前页面.
补充信息AN396736/38DocID022106第1版图23.
证书错误消息3.
选择Continuetothiswebsite(notrecommended)[继续访问该网站(不推荐)]:如果连接成功,应可看到下列网页,如图24:任务状态页面所示.
图24.
任务状态页面DocID022106第1版37/38AN3967版本历史379版本历史表11.
文档版本历史日期版本变更2011年10月31日1初始版本AN396738/38DocID022106第1版请仔细阅读:中文翻译仅为方便阅读之目的.
该翻译也许不是对本文档最新版本的翻译,如有任何不同,以最新版本的英文原版文档为准.
本文档中信息的提供仅与ST产品有关.
意法半导体公司及其子公司("ST")保留随时对本文档及本文所述产品与服务进行变更、更正、修改或改进的权利,恕不另行通知.
所有ST产品均根据ST的销售条款出售.
买方自行负责对本文所述ST产品和服务的选择和使用,ST概不承担与选择或使用本文所述ST产品和服务相关的任何责任.
无论之前是否有过任何形式的表示,本文档不以任何方式对任何知识产权进行任何明示或默示的授权或许可.
如果本文档任何部分涉及任何第三方产品或服务,不应被视为ST授权使用此类第三方产品或服务,或许可其中的任何知识产权,或者被视为涉及以任何方式使用任何此类第三方产品或服务或其中任何知识产权的保证.
除非在ST的销售条款中另有说明,否则,ST对ST产品的使用和/或销售不做任何明示或默示的保证,包括但不限于有关适销性、适合特定用途(及其依据任何司法管辖区的法律的对应情况),或侵犯任何专利、版权或其他知识产权的默示保证.
意法半导体的产品不得应用于武器.
此外,意法半导体产品也不是为下列用途而设计并不得应用于下列用途:(A)对安全性有特别要求的应用,例如,生命支持、主动植入设备或对产品功能安全有要求的系统;(B)航空应用;(C)汽车应用或汽车环境,且/或(D)航天应用或航天环境.
如果意法半导体产品不是为前述应用设计的,而采购商擅自将其用于前述应用,即使采购商向意法半导体发出了书面通知,采购商仍将独自承担因此而导致的任何风险,意法半导体的产品设计规格明确指定的汽车、汽车安全或医疗工业领域专用产品除外.
根据相关政府主管部门的规定,ESCC、QML或JAN正式认证产品适用于航天应用.
经销的ST产品如有不同于本文档中提出的声明和/或技术特点的规定,将立即导致ST针对本文所述ST产品或服务授予的任何保证失效,并且不应以任何形式造成或扩大ST的任何责任.
ST和ST徽标是ST在各个国家或地区的商标或注册商标.
本文档中的信息取代之前提供的所有信息.
ST徽标是意法半导体公司的注册商标.
其他所有名称是其各自所有者的财产.
简介华圣云 HuaSaint是阿里云国际版一级分销商(诚招募二级代理),专业为全球企业客户与个人开发者提供阿里云国际版开户注册、认证、充值等服务,通过HuaSaint开通阿里云国际版只需要一个邮箱,不需要PayPal信用卡,不需要买海外电话卡,绝对的零门槛,零风险官方网站:www.huasaint.com企业名:huaSaint Tech Limited阿里云国际版都有什么优势?阿里云国际版的产品...
ucloud6.18推出全球大促活动,针对新老用户(个人/企业)提供云服务器促销产品,其中最低配快杰云服务器月付5元起,中国香港快杰型云服务器月付13元起,最高可购3年,有AMD/Intel系列。当然这都是针对新用户的优惠。注意,UCloud全球有31个数据中心,29条专线,覆盖五大洲,基本上你想要的都能找到。注意:以上ucloud 618优惠都是新用户专享,老用户就随便看看!点击进入:uclou...
Hostio是一家成立于2006年的国外主机商,提供基于KVM架构的VPS主机,AMD EPYC CPU,NVMe硬盘,1-10Gbps带宽,最低月付5欧元起。商家采用自己的网络AS208258,宿主机采用2 x AMD Epyc 7452 32C/64T 2.3Ghz CPU,16*32GB内存,4个Samsung PM983 NVMe SSD,提供IPv4+IPv6。下面列出几款主机配置信息。...