第一范文网 - 专业文章范例文档资料分享平台

PKI - 实验三 - 版本一

来源:用户分享 时间:2025/5/15 5:20:40 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

六、实验内容:

(1) 证书信息读取,通过程序指令显示用户证书的版本号、序列号、颁发者、拥有者、有效期限和用户的公钥

(2) 读取受信任的根证书、CA证书链、证书撤销列表和待验证的用户证书,并将其转换为X509结构体,最后验证该证书的合法性

七、实验器材(设备、元器件):

PC(Windows),VS2010,openssl配置环境

八、实验步骤:

在证书的使用过程中,需要获取证书的相关信息如序列号、颁发者的信息以及拥有者的信息,同时还需要验证证书的有效期、合法性以及证书信任链等。本实验分为两部分:证书信息读取和证书验证。

(一)证书信息读取

(1) 定义一些必须的变量,用以存储证书和证书的相关信息。参考代码如下:

unsigned char usrCertificate[4096]; //DER证书缓冲区 unsigned long usrCertificateLen; //证书长度 X509 *x509usrCert = NULL; //X509证书结构体

X509_NAME *issuer = NULL; //用于保存证书颁发者的信息 X509_NAME *subject = NULL; //用于保存证书拥有者的信息 X509_NAME_ENTRY *name_entry; //用于保存证书信息 ASN1_INTEGER *Serial = NULL; //用于保存证书序列号 ASN1_TIME *time; //用于保存证书有效期 EVP_PKEY *pubKey; //用于保存证书公钥 long Version; //用于保存证书版本

(2) 将用户的DER编码证书转化为X509结构体,并调用X509_get_***相关函数读取证书的相关信息,参考代码如下:

//调用d2i_X509函数,将用户的DER编码证书转化为X509结构体

X509usrCert = d2i_X509(NULL,&pTmp,usrCertificatelen); //读取证书版本

Version = X509_get_version(X509usrCert); //读取证书序列号

Serial = X509_get_serialNumber(X509usrCert);

//读取证书颁发者信息,包括国家、组织、部门、通用名、电子邮件地址等 issuer = X509_get_issuer_name(X509usrCert);

//读取证书拥有者信息,包括国家、组织、部门、通用名、电子邮件地址等 subject = X509_get_subject_name(X509usrCert); //读取证书的生效日期和失效日期

time = X509_get_notBefore(X509usrCert); time = X509_get_notBefore(X509usrCert); //读取证书公钥

pubKey = X509_get_pubkey(X509usrCert);

(3) 最后调用X509_free函数释放X509结构体内存。

证书信息读取的流程图如图1所示

开始开始加载根证书、CA证书、证书撤销列表和用户证书DER编码证书转换根证书、用户证书、证书撤销列表格式转换读取证书颁发者信息将根证书、证书撤销类列表添加到证书存储区读取证书拥有者信息将CA证书、用户证书添加到证书存储区读取证书有效期验证用户证书读取证书公钥释放内存释放内存 图1证书信息读取流程图 图2 证书验证流程图 (二)证书验证

(1) 定义一些必须的变量,用以存储CRL、根证书、待验证用户证书等。参

结束结束考代码如下:

unsigned char derusrCert[4096]; //DER证书缓冲区 unsigned long derusrCertLen; //证书长度

unsigned char derCrl[4096]; //DER证书撤销列表缓冲区 unsigned long derCrlLen; //证书撤销列表长度 unsigned char derRootCert[4096]; //DER根证书缓冲区 unsigned long derRootCertLen; //根证书长度 X509_STORE_CTX *ctx = NULL; //证书存储区 X509 *X509usrCert = NULL; //X509用户证书 X509 *X509CACert = NULL; //X509CA证书 X509 *X509RootCert = NULL; //X509根证书

X509_CRL *X509Crl = NULL; //X509证书撤销列表 STACK_OF(X509) *caCertStack = NULL; //CA证书链 X509_STORE *rootCertStore = NULL; //证书存储区

(2) 读取受信任的根证书、CA证书链、证书撤销列表和待验证的用户证书,并将其转换为X509结构体。参考代码如下:

//根证书转换

pTmp = derRootCert;

X509RootCert = d2i_X509(NULL,&pTmp,derRootCertLen); //用户证书转换 pTmp = derusrCert;

X509usrCert = d2i_X509(NULL,&pTmp,usrCertLen); //证书撤销列表转换 pTmp = derCrl;

X509Crl = d2i_X509(NULL,&pTmp, derCrlLen);

(3) 添加受信任的根证书和证书撤销列表到证书存储区。参考代码如下:

//新建X509证书存储区

rootCertStore = X509_Store_new(); //添加根证书

X509_STORE_add_cert(rootCertStore, X509RootCert); //设置证书撤销列表标志位

X509_STORE_set_flags(rootCertStore,X509_V_FLAG_CRL_CHECK); //添加证书撤销列表

X509_STORE_add_crl(rootCertStore,X509Crl); (4) 添加用户证书和CA证书链。参考代码如下:

ctx = X509_STORE_CTX_new();

X509_STORE_CTX_init(ctx,rootCertStore,X509usrCert, caCertStack); (5)验证证书。

X509_verify_cert(ctx); (6)释放内存。

九、实验数据及结果分析:

在实验一和二的基础上,对之前生成的证书进行读取和验证 (注:由于前两个实验结果疏于保存,所以这次试验选取的证书其实是助教给的两个“郭靖”“黄飞鸿”证书,之后的实验内容都是以此为基础)

首先是openssl环境配置;很麻烦,在Windows上面; 比如新建一个项目,没有添加路径是运行不了的。

幸好之前上学期做过openssl实验,所以只要在配置路径时加上引用的lib库,include库,以及配置链接器就可以正常引用openssl的相关函数。

搜索更多关于: PKI - 实验三 - 版本一 的文档
PKI - 实验三 - 版本一.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8wprf2zh742v3bu3zrbd_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top