openssl证书操作.ppt
第十一章openssl证书操作,现有的数字证书大都采用x.509规范,主要有以下信息组成:版本号、整数序列号(在同一个ca是唯一的)、有效期(证书生效和失效的时间)、拥有者信息(姓名、单位、组织、城市、国家等)、颁发者的信息、其他扩展信息(证书的扩展用法、ca自定义的扩展项等)、拥有者的公钥、ca对以上信息的签名。数字证书是各类实体在网上进行信息交流及行为的身份证明,在网上事务的各个环节,参与的各方都需验证对方证书的有效性,从容解决相互间的信任问题。Openssl1实现了对x.509数字证书的所有操作。包括签发数字证书、解析和验证证书等。在实际应用开发中,针对证书应用,这里主要是用到证书的验证(验证其证书链、有效期、吊销列表以及其他限制规则等)、证书的解析(获得证书的版本、公钥、拥有者的信息、颁发者信息、有效期)等操作。这些函数均定义在中。,11.1 函数介绍,涉及证书操作的主要函数有验证证书(验证证书链、有效期、CRL)、解析证书(获得证书的版本、序列号、颁发者信息、主题信息、公钥、有效期等),11.1.1 DER编码转换为内部结构体函数d2i_X509,功能:把一个DER编码的证书数据转化成openssl内部结构体,x509类型。函数定义:X509*d2i_X509(X509*cert,unsigned char*d,int len);参数说明:Cert:OUT X509结构体D:inder编码的证书数据指针地址。Len:in证书数据长度。返回值:编码后的X509结构体数据。,获得证书版本函数X509_get_version,函数功能:获得证书版本函数定义:#define X509_get_version(x)ASN1_INTEGER_get(x)-cert_info-version)参数说明:x:in X509*结构体数据类型。返回值:证书版本,数据类型“LONG”,获得证书序列号函数X509_get_serailNumber,函数功能:获得证书序列号。函数定义:ASN1_INTEGER*X509_get_serailNumber(X509*x)参数说明:x:in X509*类型数据,证书。返回值:整数序列号,数据类型“ASN1_INTEGER*”。,获得证书颁发者信息函数X509_get_issuer_name,函数功能:获得证书颁发者信息。函数定义:X509_get_issuer_name(x509*a)参数说明:a:inx509*类型数据,证书。,获得证书拥有者函数x509_get_subject_name,函数功能:获得证书使用者。函数定义:x509_get_subject_name(x509*a)参数说明:X:inx509*类型数据,证书。返回值:证书使用者信息,数据类型“x509_name”,获得证书有效期的起始函数函数x509_get_notbefore,函数功能:获得证书有效期的起始日期函数定义:#define x509_get_notbefore(x)参数说明:x:in x509*类型数据,证书。返回值:证书起始有效期,数据类型”asn1_time*”,获得证书有效期的起始函数函数x509_get_notafter,函数功能:获得证书有效期的终止日期函数定义:#define x509_get_notafter(x)参数说明:x:in x509*类型数据,证书。返回值:证书起始终止日期,数据类型”asn1_time*”,获得证书公钥函数x509_get_pubkey,函数功能:获得证书的公钥函数定义:EVP_PKEY*x509_get_pubkey(x509*x)参数说明:x:in x509*类型数据,证书。返回值:证书使用者公钥,11.2.9 创建和释放证书存储区函数x509_store_new、x509_store_free,函数功能:创建和释放一个x509_store结构体,主要用于验证证书。函数定义:X509_store*x508_store_new(void);Void x509_store_free(x509_store*v),11.2.10 向证书存储区添加证书函数x509_store_add_cert,函数功能:添加信任的根证书到证书存储区。函数定义:Int x509_store_add_cert(x509_store*ctx,x509*x)参数说明:X:inx509*类型数据,受信任的根证书Ctx:inx509_store类型数据,证书存储区。返回值:操作成功返回1,否则返回0。,11.2.11 向证书存储区添加证书吊销列表函数x509_store_add_crl,函数功能:添加CRL到证书存储区。函数定义:Int x509_store_add_crl(x509_store*ctx,x509_crl*x)参数说明:X:inx509_crl*类型数据,证书吊销列表Ctx:inx509_store类型数据,证书存储区。返回值:操作成功返回1,否则返回0。,11.2.12 创建证书存储区上下文环境函数x509_store_CTX_new,函数功能:为证书存储区上下文环境申请内存。函数定义:x509_store_CTX*x509_store_ctx_new(void)参数说明:返回值:操作成功返回证书存储区上下文环境指针,否则返回null。,11.2.13 释放证书存储区上下文环境函数x509_store_CTX_free,函数功能:为证书存储区上下文环境申请内存。函数定义:Void x509_store_CTX_free(x509_store_ctx*ctx)Ctx:in待释放的证书存储区上下文环境。参数说明:返回值:无。,11.2.14 初始化证书存储区上下文环境函数x509_store_CTX_init,函数功能:初始化证书存储区上下文环境,设置根证书,待验证的证书、ca证书链。函数定义:Int x509_store_CTX_init(x509_store_ctx*ctx,x509_store*store,x509*x509,stack_of(x09)*chain)参数说明:Ctx:in x509_store_CTX类型数据,上下文环境Store:in x509_store*类型数据,根证书存储区。Chain:instack_of(x509*)类型数据,证书链。返回值:操作成功返回1,否则返回0。,11.2.15 验证证书函数x509_verify_cert,函数功能:验证证书,检查证书链,一次验证上级颁发者对证书的签名,一直到根证书。检查证书是否过期,以及其他策略。如果设置了CRL,还会检查该证书是否在吊销列表中。此函数必须在调用了store_ctx_init后才能使用。函数定义:Int x509_verify_cert(x509_store_ctx*ctx,)参数说明:Ctx:in x509_store_CTX类型数据,上下文环境返回值:操作成功返回1,否则返回0。,11.3 实例应用,了解了x509证书的主要函数后,下面将通过一个实例来说明这些函数的用法。在实际应用中,常常需要验证证书的有效性(验证证书连、有效期等),获取证书有关信息(序列号、颁发者信息、拥有者信息等)。,流程图:,读取/加载根证书、ca证书Crl、待验证的用户证书,初始化证书存储区,添加信任的根证书和crl,初始化x509_store_ctx,设置信任根证书存储区Ca证书链、待验证证书,解析证书信息或其他操作,结束,开始,