27.1 概述
在线证书状态协议(OCSP, Online Certificate Status Protocol,rfc2560)用于实时表明证书状态。OCSP客户端通过查询OCSP服务来确定一个证书的状态。OCSP可以通过HTTP协议来实现。
27.2 Openssl实现
openssl在crypto/ocsp目录实现了ocsp模块,包括客户端和服务端各种函数
*ocsp_asn.c :ocsp消息的DER编解码实现,包括基本的new\free\i2d和d2i函数
*ocsp_cl.c:ocsp客户端函数实现,主要用于生成ocsp请求
*ocsp_srv.c:ocsp服务端思想,主要用于生成ocsp响应
*ocsp_err.c:oscp错误处理
*ocsp_ext.c:ocsp扩展项处理
*ocsp_ht.c:基于HTTP协议通信的OCSP实现
*ocsp_lib.c:通用库实现
*ocsp_prn :打印OCSP信息
*ocsp_vfy: 验证ocsp请求和响应
ocsp.h:定义ocsp请求和响应的各种数据结构和用户接口。
27.3 主要函数
功能
函数
d2i_OCSP_REQUEST_bio
将bio中的DER编码的数据转换为OCSP_REQUEST数据结构
d2i_OCSP_RESPONSE_bio
将bio中DER编码的数据转换为OCSP_RESPONSE数据结构
i2d_OCSP_RESPONES_bio
将OCSP_RESPONSE数据结构DER编码,并输出到BIO中
i2d_OCSP_REQUEST_bio
将OCSP_REQUEST数据结构DER编码,并输出到BIO中
PEM_read_bio_OCSP_REQUEST
读取PEM格式的OCSP_REQUESET信息,返回数据结构
PEM_read_bio_OCSP_RESPONSE
读取PEM格式的OCSP_RESPONSE信息,返回其数据结构
PEM_write_bio_OCSP_RESPONE
将OCSP_REQUEST结构写成PEM格式
PEM_write_bio_OCSP_REQUEST
将OCSP_REQUEST结构写成PEM格式
OCSP_REQUEST_sign
本函数由空来定义,他用于给OCSP_REQUEST数据结构签名。 签名的对象为DER编码的OCSP_REQINFO信息
OCSP_request_sign
本函数用于给OCSPQ请求消息签名
OCSP_BASICRESP_sign
对OCSP_BASICRESP结构进行签名,
签名的结构放在OCSP_BASICRESP的signature中,
摘要算法由输入参数指定
OCSP_REQUEST_verify
验证ocsp请求签名,公钥由公钥由输入参数指定
OCSP_request_verify
验证ocsp响应,该函数做全面的验证,
包括签名、证书目的以及证书链等
OCSP_basic_sign
并对brsp结构签名
OCSP_check_validity
时间检查计算,合法返回1,thisupd为本次更新时间,
nextupd为下次更新时间
OCSP_CERTID_dup
复制函数
OCSP_CERTSTATUS_dup
复制函数
OCSP_request_add0_id
本函数用于往请求消息中添加一个证书ID;
他将一个OCSP_CERTID信息存入OCSP_REQUEST结构,
返回内部生成的OCSP_ONEREQ指针
OCSP_request_set1_name
本函数用于设置下消息请求者的名字
OCSP_request_add1_cert
本函数往消息请求中添加一个证书
OCSP_response_status
本函数获取OCSP相应状态
OCSP_reponse_get1_basic
本函数从响应数据结构中获取OCSP_BASICERESP信息
OCSP_resp_count
本函数获取相应消息中包含的证书状态个数
OCSP_resp_get0
给定单个响应的序号,从堆栈中取出
OCSP_resp_find
根据ocsp证书ID查询对应的响应在堆栈中的位置,
last为所搜堆栈起始位置
OCSP_single_get0_status
获取单个证书状态,返回值为其状态,ocsp.h中定义
OCSP_resp_find_status
功能同OCSP_single_get0_status函数
OCSP_request_add1_nonce
添加nonce扩展项,val和len表明了nonce值
OCSP_check_nonce
检测nonce,用于防止重放攻击;
检查请求和响应的nonce扩展项,看他们是否相同;
OCSP_copy_nonce
将请求中都nonce拷贝到响应中
OCSP_crlID_new
根据crl的url,crl个数以及生成clr的时间生成X509_EXTENSION扩展项
OCSP_accept_response_new
根据多个oid的名字生成扩展项,其中oids指针数组,以NULL结尾。
OCSP_archive_cutoff_new
生成单个证书的Archive Cutoff扩展项
OCSP_url_svcloc_new
根据颁发这名字和一个或多个ul生成扩展项。扩展项内容为AuthorityInfoAccess。
OCSP_cert_to_id
根据摘要算法、持有者证书和颁发这证书生成OCSP_CERTIF数据结构
OCSP_cert_id_new
本函数根据摘要算法\颁发者名字、颁发这公钥DER编码以及证书持有者的证书序列好生成OCSP_CERTID;
奇怪的是serialNumber可以为空,无法识别需要铲鲟状态证书
OCSP_id_issuer_cmp
比较OCSP_CERTID,如果相等返回0,不想等返回ifei0
OCSP_id_cmp
比较OCSP_CERTID,本函数比较所有项,包括证书序列号
OCSP_parse_url
分析url,获取主机、端口、路径和协议等信息
OCSP_response_status_strl
根据OCSP相应码获取相应状态信息
OCSP_cert_status_str
根据证书状态吗获取证书状态信息
OCSP_REQUEST_print
将OCSP请求OCSP_REQUEST的信息输出到bp中,flags表明不支持扩展项
OCSP_RESPONSE_print
将OCSP请求OCSP_RESPONSE的信息输出到bp中,flags表明不支持到扩展项导出方式。
OCSP_request_onereq_get0
根据在堆栈中的位置获取OCSP_ONEREQ,OCSP_ONEREQ包含了单个证书信息
OCSP_onereq_get0_id
获取OCSP_ONEREQ中的证书ID信息
OCSP_id_get_info
从cid中获取颁发这名字摘要值、摘要算法、颁发这公钥摘要值以及持有者证书序列号
OCSP_request_is_signed
判断请求是否已签名,如果已签名
OCSP_basic_add1_status
根据输入参数证书ID、证书状态、撤销原因、撤销时间
ASN1_STRING_encode
本函数将数据进行DER编码,编码后的结果放在ASN1_STRING中,
兵返回ASN1_STRING.
OCSP_REQUEST_get_ext_by_NID
根据对象nid获取扩展项
OCSP_REQUEST_get_ext_by_OBJ
获取对象在x->tbsRequest->requestExtension中的位置
OCSP_REQUEST_get_ext
根据扩展项在堆栈中的位置获取扩展项
OCSP_REQUEST_get1_ext_d2i
根据扩展项nid获取扩展项信息,其中返回值为扩展项数据结构的指针地址,
crit返回是否时关键扩展,idx表明他在堆栈中的位置
OCSP_REQUEST_add_ext_i2d
将具体的扩展项添加到x中,成功则返回1。
OCSP_REQUEST_add_ext
将扩展项添加到堆栈中,loc表示堆栈位置
OCSP_basic_vverify
验证OCSP响应消息,成功返回1。验证内容有:验证OCSP签名、
验证OCSP签名者证书、检查每个证书状态信息的颁发者是否相同、
检查颁发者证书的扩展密钥用法中是否支持OCSP签名

27.openssl编程——OCSP相关推荐

  1. openssl 编程。 证书制作

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 写博客 发Chat 登录注册 么刚的专栏 RSS订阅 原 openssl证书制作及编程 2010年07月29日 ...

  2. OCSP介绍以及使用OpenSSL编程实现

    首先我们知道在PKI体系中,证书的生命周期如下所示, 对于一个可信任的 CA 机构颁发的有效证书,在证书到期之前,只要 CA 没有把其吊销,那么这个证书就是有效可信任的.有时,由于某些特殊原因(比如私 ...

  3. 《openssl 编程》之 RSA(转)

    17.1  RSA介绍 RSA算法是一个广泛使用的公钥算法.其密钥包括公钥和私钥.它能用于数字签名.身份认证以及密钥交换.RSA密钥长度一般使用1024位或者更高.RSA密钥信息主要包括[1]: Ø  ...

  4. 《openssl 编程》之错误处理

    第十四章   错误处理 14.1  概述 程序设计时,一般通过函数的返回值来判断是否调用成功.设计良好的函数以及好的错误处理能帮助调用者快速找到错误原因.错误处理应该尽可能多的包含各种信息,包括: Ø ...

  5. 《openssl 编程》之文本数据库

    第十章   文本数据库 10.1  概述 Openss实现了一个简单的文本数据库,它可以从文件读取数据和将数据写到文件中,并且可以根据关键字段来查询数据.Openssl的文本数据库供apps/目录下的 ...

  6. OPENSSL编程 第二十章 椭圆曲线

    20.1  ECC介绍 椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则.椭圆曲线在如下两个域中定义:Fp域和F2m域. Fp域,素数域,p为素数: F2m域:特征为2的有限域,称之为二 ...

  7. 笔记整理——使用openssl编程

    error: openssl 的所有解决方案 (2013/6/22 17:39:00) error: openssl/crypto.h: No such file or directory 解决方案 ...

  8. OpenSSL 编程 二:搭建 CA

    一.证书 证书 – 为公钥加上数字签名 二.证书标准规范X.509 证书是由认证机构颁发的,使用者需要对证书进行验证,因此如果证书的格式千奇百怪那就不方便了.于是,人们制定了证书的标准规范,其中使用最 ...

  9. 《openssl 编程》之 DH

    第十九章DH 19.1  DH算法介绍 DH算法是W.Diffie和M.Hellman提出的.此算法是最早的公钥算法.它实质是一个通信双方进行密钥协商的协议:两个实体中的任何一个使用自己的私钥和另一实 ...

最新文章

  1. 远程处理Remoting
  2. 学点Webpack吧
  3. linux pfn,ARM Linux下的page和pfn之间转换的宏。
  4. 【深度学习】图像特征提取与通道数问题(基于U型网络)
  5. SVN服务器搭建和使用教程
  6. 如何判断一个点是否在一个多边形内?
  7. facenet + Mtcnn 实现人脸识别(实现步骤)
  8. php array 如何访问,php – 如何访问$array [@key]值
  9. 拳王虚拟项目公社:虚拟资源知识付费怎么玩?如何做知识付费?知识付费如何赚钱?
  10. html 设计页面,HTML5网页设计
  11. BlackBerry 9850 应用:BBM, Windows Live Messenger (msn)
  12. FTP上传失败报错227 Entering Passive Model (222,111,8,111,10,40)
  13. Intel Realsense D455 D435i D415 T265 3D实感硬件对比
  14. 游戏设计模式阅读笔记18——优化模式(对象池模式)
  15. CCNA(十五)思科ACL、NAT配置命令
  16. eos的石墨烯技术是什么
  17. SAP BOM的类二维报表
  18. 排查maven中可以从远程下载下来jar包,但是却报错Failure to find was cached in the local repository, resolution will not
  19. Phonics 自然拼读法 c/k,e,h,r,m,d Teacher:Lamb
  20. 不可不知的操作系统知识

热门文章

  1. 已处理证书链,但是在不受信任提供程序信任的根证书中终止
  2. 工业与民用配电设计手册第四版_工业电气设计|超赞! 改进版配电柜 内部结构解析大全...
  3. 积极准备、谨慎行动——应对多核编程革命
  4. 社交平台数据提取:Social Phone Extractor
  5. 英语二的复习经验分享
  6. 360随身WiFi能免费上网吗?
  7. java【多线程】之同步下载图片
  8. Android携程高级用法,Android真正仿携程首页view实现
  9. k线符号图解大全_如何股票开户,麻烦朋友们介绍一个好点的证券公司?k线组合108式图解...
  10. 药品销售管理系统 系统开发 PB9.0