mbedtls | 10 - 数字证书及 X.509 证书标准

最新更新时间:2021-07-30来源: eefocus关键字:STM32

一、X.509证书标准

X.509是数字证书的一种标准格式,由国际电信联盟的标准化部分定义。

1. X.509证书的结构

X.509证书主要包括12个字段,如下表:

名称字段意义
Version版本证书版本
Serial number序列号证书的唯一序列号
Signature签名算法CA对证书进行签名所使用的签名算法
Issuer发行商名称标识对证书进行签名并颁发的实体
Validity有效期标识证书的生效日期和终止日期
Subject证书主体名称标识获得证书的主体
Subject public key infomation公钥用于指示使用者公钥信息
Issure unique ID颁发者唯一标识用于标识证书签发机构
subject unique ID使用者唯一标识用于标识证书使用者实体
Extensions扩展一个或多个扩展域
signature Algorithm签名算法标识CA对证书签名所使用的签名算法和参数
signature Value签名值CA对证书的签名结果

2. 获取证书示例(百度)

下面以百度的证书为例讲解X.509证书标准。

使用浏览器访问百度首页:https://www.baidu.com/,点击域名旁边的【小绿锁】,点击【证书】。

点击之后即可查看到百度的证书:

① 点击【证书路径】,将一级证书(根证书)导出:

点击【详细信息】,将此证书内容【复制到文件】:
、
进入证书导出向导:

选择使用【Base64编码】导出:

选择导出文件路径:

导出成功:
② 同样的方法,将二级证书导出为baidu_2.cer:

③ 同样的方法,将三级证书导出为baidu_3.cer:

三份证书如图:

使用记事本打开任意一份,可以看到该证书内容:
新建一个空文件baidu_ca.txt,将三份内容按照次序复制到该文件中,后续使用。

3. 查看百度证书内容

使用openssl工具查看刚刚获取的百度证书内容:

openssl x509 -text -in baidu_3.cer -noout1.

① 证书颁发者和使用者信息:

② 公钥算法和公钥内容:

③ 签名算法和内容:

同样的方法可以查看百度二级证书和百度一级证书(根证书)的内容。

二、X509证书解析验证功能的配置与使用

1. 配置宏

/**

 * def MBEDTLS_PK_C

 *

 * Enable the generic public (asymetric) key layer.

 *

 * Module:  library/pk.c

 * Caller:  library/ssl_tls.c

 *          library/ssl_cli.c

 *          library/ssl_srv.c

 *

 * Requires: MBEDTLS_RSA_C or MBEDTLS_ECP_C

 *

 * Uncomment to enable generic public key wrappers.

 */

#define MBEDTLS_PK_C



/**

 * def MBEDTLS_PK_PARSE_C

 *

 * Enable the generic public (asymetric) key parser.

 *

 * Module:  library/pkparse.c

 * Caller:  library/x509_crt.c

 *          library/x509_csr.c

 *

 * Requires: MBEDTLS_PK_C

 *

 * Uncomment to enable generic public key parse functions.

 */

#define MBEDTLS_PK_PARSE_C



/**

 * def MBEDTLS_ASN1_PARSE_C

 *

 * Enable the generic ASN1 parser.

 *

 * Module:  library/asn1.c

 * Caller:  library/x509.c

 *          library/dhm.c

 *          library/pkcs12.c

 *          library/pkcs5.c

 *          library/pkparse.c

 */

#define MBEDTLS_ASN1_PARSE_C



/**

 * def MBEDTLS_ASN1_WRITE_C

 *

 * Enable the generic ASN1 writer.

 *

 * Module:  library/asn1write.c

 * Caller:  library/ecdsa.c

 *          library/pkwrite.c

 *          library/x509_create.c

 *          library/x509write_crt.c

 *          library/x509write_csr.c

 */

#define MBEDTLS_ASN1_WRITE_C



/**

 * def MBEDTLS_X509_USE_C

 *

 * Enable X.509 core for using certificates.

 *

 * Module:  library/x509.c

 * Caller:  library/x509_crl.c

 *          library/x509_crt.c

 *          library/x509_csr.c

 *

 * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C,

 *           MBEDTLS_PK_PARSE_C

 *

 * This module is required for the X.509 parsing modules.

 */

#define MBEDTLS_X509_USE_C



/**

 * def MBEDTLS_BASE64_C

 *

 * Enable the Base64 module.

 *

 * Module:  library/base64.c

 * Caller:  library/pem.c

 *

 * This module is required for PEM support (required by X.509).

 */

#define MBEDTLS_BASE64_C



/**

 * def MBEDTLS_PEM_PARSE_C

 *

 * Enable PEM decoding / parsing.

 *

 * Module:  library/pem.c

 * Caller:  library/dhm.c

 *          library/pkparse.c

 *          library/x509_crl.c

 *          library/x509_crt.c

 *          library/x509_csr.c

 *

 * Requires: MBEDTLS_BASE64_C

 *

 * This modules adds support for decoding / parsing PEM files.

 */

#define MBEDTLS_PEM_PARSE_C



/**

 * def MBEDTLS_X509_CRT_PARSE_C

 *

 * Enable X.509 certificate parsing.

 *

 * Module:  library/x509_crt.c

 * Caller:  library/ssl_cli.c

 *          library/ssl_srv.c

 *          library/ssl_tls.c

 *

 * Requires: MBEDTLS_X509_USE_C

 *

 * This module is required for X.509 certificate parsing.

 */

#define MBEDTLS_X509_CRT_PARSE_C


新建配置文件mbedtls_config_x509.h,编辑以下内容:


/**

 * @brief   Minimal configuration for X509 Function

 * @author  mculover666

 * @date    2020/10/04

*/


#ifndef _MBEDTLS_CONFIG_X509_H_

#define _MBEDTLS_CONFIG_X509_H_


/* System support */

#define MBEDTLS_HAVE_ASM

//#define MBEDTLS_HAVE_TIME


/* mbed feature support */

#define MBEDTLS_ENTROPY_HARDWARE_ALT

//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES

#define MBEDTLS_NO_PLATFORM_ENTROPY


/* mbed modules */

#define MBEDTLS_SHA1_C

#define MBEDTLS_SHA256_C

#define MBEDTLS_MD_C

#define MBEDTLS_BIGNUM_C

#define MBEDTLS_OID_C

#define MBEDTLS_RSA_C

#define MBEDTLS_PKCS1_V21

#define MBEDTLS_PK_C

#define MBEDTLS_PK_PARSE_C

#define MBEDTLS_ASN1_PARSE_C

#define MBEDTLS_ASN1_WRITE_C

#define MBEDTLS_X509_USE_C

#define MBEDTLS_BASE64_C

#define MBEDTLS_PEM_PARSE_C

#define MBEDTLS_X509_CRT_PARSE_C


#include "mbedtls/check_config.h"


#endif /* _MBEDTLS_CONFIG_X509_H_ */


在MDK中配置使用该文件:

2. API说明

使用时需要包含头文件:


#include "mbedtls/x509_crt.h"

1.

① 初始化证书结构体


/**

 * brief          Initialize a certificate (chain)

 *

 * param crt      Certificate chain to initialize

 */

void mbedtls_x509_crt_init( mbedtls_x509_crt *crt );


② 证书解析


/**

 * brief          Parse one DER-encoded or one or more concatenated PEM-encoded

 *                 certificates and add them to the chained list.

 *

 *                 For CRTs in PEM encoding, the function parses permissively:

 *                 if at least one certificate can be parsed, the function

 *                 returns the number of certificates for which parsing failed

 *                 (hence c 0 if all certificates were parsed successfully).

 *                 If no certificate could be parsed, the function returns

 *                 the first (negative) error encountered during parsing.

 *

 *                 PEM encoded certificates may be interleaved by other data

 *                 such as human readable descriptions of their content, as

 *                 long as the certificates are enclosed in the PEM specific

 *                 '-----{BEGIN/END} CERTIFICATE-----' delimiters.

 *

 * param chain    The chain to which to add the parsed certificates.

 * param buf      The buffer holding the certificate data in PEM or DER format.

 *                 For certificates in PEM encoding, this may be a concatenation

 *                 of multiple certificates; for DER encoding, the buffer must

 *                 comprise exactly one certificate.

 * param buflen   The size of p buf, including the terminating c NULL byte

 *                 in case of PEM encoded data.

 *

 * return         c 0 if all certificates were parsed successfully.

 * return         The (positive) number of certificates that couldn't

 *                 be parsed if parsing was partly successful (see above).

 * return         A negative X509 or PEM error code otherwise.

 *

 */

int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen );


③ 获取证书信息


/**

 * brief          Returns an informational string about the

 *                 certificate.

 *

 * param buf      Buffer to write to

 * param size     Maximum size of buffer

 * param prefix   A line prefix

 * param crt      The X509 certificate to represent

 *

 * return         The length of the string written (not including the

 *                 terminated nul byte), or a negative error code.

 */

int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix,

                   const mbedtls_x509_crt *crt );


④ 获取证书认证信息:


/**

 * brief          Returns an informational string about the

 *                 verification status of a certificate.

 *

 * param buf      Buffer to write to

 * param size     Maximum size of buffer

 * param prefix   A line prefix

 * param flags    Verification flags created by mbedtls_x509_crt_verify()

 *

 * return         The length of the string written (not including the

 *                 terminated nul byte), or a negative error code.

 */

int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix,

[1] [2] [3]
关键字:STM32 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic543343.html

上一篇:mbedtls | 09 - 数字签名算法的配置与使用
下一篇:STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Cepton将参加IAA Mobility和AutoSens 展示其车规级激光雷达Vista®-X90
据外媒报道,汽车激光雷达解决方案供应商Cepton将于9月参加在欧洲举行的两个贸易展,并将展示其激光雷达技术。Cepton将在德国慕尼黑IAA Mobility 2021和比利时布鲁塞尔的AutoSens设立展位。展会期间,Cepton代表将展示可应用于智能出行应用的激光雷达产品,包括高级驾驶辅助系统(ADAS)、自动驾驶汽车(AV)和智能基础设施。特别的是,Cepton将首次向欧洲客户展示其车规级远程激光雷达Vista®-X90。(图片来源:Cepton)Vista-X90由Cepton的专利MMT提供支持,具有高性能、车规级可靠性和低成本等特点,可满足大众市场激光雷达在消费车辆中采用ADAS的关键要求。Vista-X90采用
发表于 2021-09-02
Cepton将参加IAA Mobility和AutoSens 展示其车规级激光雷达Vista®-<font color='red'>X</font>90
ZDS2022示波器百集实操特辑之10:X-Y模式的应用
大家好,本期视频我们来介绍下在X-Y模式最常用的李萨如测量法。首先我们将同频异相的两个正弦波信号分别接到通道1和通道2。一键捕获波形,大家可以看到此时两信号相位差为0度。图1相位相差0度(Y-T)我们将时基模式设为X-Y模式,可以看到X-Y模式中的合成波形为一个正45度的线段。图2X-Y模式接下来将两信号相位差调为45度时,可以看见X-Y模式中的波形为一个椭圆。图3相位相差45度(Y-T)图4X-Y模式相位差为90度时,在X-Y模式中的波形为一个圆形。图5相位相差90度(Y-T)图6X-Y模式相位差为180度时,X-Y模式中是负45度线。图7相位相差180度(X-Y)图8X-Y模式图9X-Y模式示意图这就是我们常用的李萨如法,主要
发表于 2021-08-31
ZDS2022示波器百集实操特辑之10:<font color='red'>X</font>-Y模式的应用
ZDS2022示波器百集实操特辑之9:X-Y模式
在前面的视频中,我们已经介绍了水平时基中的ROLL模式,现在我们来看一下水平时基中的X-Y模式,它到底是怎么回事呢?在前面的视频中,我们已经介绍了水平时基中的ROLL模式,现在我们来看一下水平时基中的X-Y模式,它到底是怎么回事呢?图1 X-Y模式下示波器的屏幕显示简单来说,X-Y模式就是将电压-时间显示转换成电压-电压显示,事实上,在ZDS2022示波器中,CH1通道输入的Y轴变量转换成X-Y模式下的X轴变量,故通道1幅度在 X 轴上绘制,通道2幅度在 Y 轴上绘制,如图2所示。开启此模式后,示波器固定为两个通道运行。图2 李萨如图形起源示意图在X-Y模式中,我们经常会用到利萨如法进行相关测量,关于利萨如法,这里跟大家分享个小
发表于 2021-08-30
ZDS2022示波器百集实操特辑之9:<font color='red'>X</font>-Y模式
vivo V1官宣:蓝厂自研影像芯片 将于X70上使用
      8月27日上午消息,vivo执行副总裁胡柏山今天跟媒体进行了沟通,针对近日传闻颇多的自研芯片一事做了说明。他明确了“vivo V1”的存在,这是一颗vivo自研的影像芯片,将在九月发布的X70系列手机上使用。  此前,已经有人爆料vivo V1的存在。今天胡柏山证实了这一消息,这是一颗自研专业影像芯片。之所以从影像入手,一方面确实因为Soc(也就是处理器集成芯片)要求较高;另外一个重要原因,胡柏山说,是vivo要“聚焦赛道”,影像是vivo一直关注的领域,并且是用户很关注的需求。目前手机跟专业相机比差距主要是手机空间有限,光学性能需要算法补足,vivo看到其中可发挥空间非常大
发表于 2021-08-29
基于飞凌FETMX8MP-C核心板实现的商用车智能驾驶终端
,同时,更低的成本和更丰富的功能也成为车厂进行产品技术迭代的方向。在嵌入式ARM架构处理器性能日趋强大的今天,基于ARM平台开发的商用车智能驾驶终端,成为越来越多车厂和相关设备供应商的选择。  02 用户需求:国内某重型车车厂,需要对现有X86架构商用车智能驾驶终端进行迭代,以达到降低成本的同时提升运行稳定性的目的。用户在设备主控架构选型阶段,综合评估认为此应用下ARM更具优势。在具体的处理器选型阶段,用户提出以下需求: 1. 双千兆网络,连接网络摄像头和激光雷达2. 双路摄像头3. 功耗低,可实现长时间稳定运行4. 4G/5G网络,与服务器进行通讯5. HDMI接口,外接显示屏进行调试6. 需要一定
发表于 2021-08-25
基于飞凌FETMX8MP-C核心板实现的商用车智能驾驶终端
TCL X12正式上市,为用户打造更智能的人机交互
近日,TCL X12 8K Mini LED 领曜智屏(以下简称 TCL X12 )正式上市。作为 TCL Mini LED 旗舰级产品,除了为消费者带来顶级的音画质,还基于地平线旭日 3 芯片及算法方案打造了更为自然的人机交互体验,可谓一款真正秀外“慧”中的智能电视。 作为 TCL 推出的高端电视产品,TCL X12 售价高达 99999 元,在音画质的表现均达到了行业顶尖水平。在视觉显示方面,X12 智屏搭载了 96000 颗 LED 芯片和 1920 个物理分区,实现了高达 3000nits 的亮度;在音质方面,TCL X12 搭载安桥 5.1.2Hi-Fi 音响,匹配 8 声道 25 单元音响,可为用户带来极致
发表于 2021-08-24
TCL <font color='red'>X</font>12正式上市,为用户打造更智能的人机交互
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved