通过OpenSSL获取证书扩展属性之一:“基本约束”
来源:互联网 发布:大数据专业 编辑:程序博客网 时间:2024/05/17 18:48
前面通过一系列文章,讲述了如使用OpenSSL解析证书的基本项,现在我们来看看如何获取证书的扩展项。
目前CA中心颁发的证书,都有一些扩展项属性,用来限定证书的用途、提供颁发者信息、以及CRL的下载地址等等。在下图中,红色区域内的属性都为证书的扩展属性。
在OpenSSL中,提供了函数X509_get_ext_d2i(),可以通过指定属性的NID来返回对应的结构体。该函数的定义如下:
void*X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);其中:
第一个参数x,为证书结构体X509指针;
第二个参数nid,为要获取的扩展对象NID,“基本约束”的NID为NID_basic_constraints;
第三个参数crit,为返回参数,表明该扩展属性是否为关键扩展;
第四个参数idx,为可选返回参数,表明该扩展的序号,可以传NULL。
在OpenSSL中,“基本约束”扩展属性的结构体定义如下:
typedef struct BASIC_CONSTRAINTS_st {int ca;ASN1_INTEGER *pathlen;} BASIC_CONSTRAINTS;其中:
第一个成员ca,表明该证书可否作为CA证书签发下一级证书,一般用户证书该值都为0。
第二个参数pathlen,只有当ca=1时才有效,表明具体可以签发的证书级别。
使用OpenSSL获取“基本约束”扩展属性的完整函数代码如下:
ULONG COpenSSLCertificate::_GetExtBasicConstraints(X509 *pX509Cert, LPSTR lpscProperty, ULONG* pulLen){int crit = 0;char value[512] = {0};BASIC_CONSTRAINTS *bcons = NULL;if (!m_pX509){return CERT_ERR_INVILIDCALL;}if (!pulLen){return CERT_ERR_INVALIDPARAM;}bcons = (BASIC_CONSTRAINTS*)X509_get_ext_d2i(m_pX509, NID_basic_constraints, &crit, NULL);if (!bcons){return CERT_ERR_ATTR_NOTEXIST;}if (!bcons->ca){strcat_s(value, 512, "Subject Type=End Entity; ");strcat_s(value, 512, "Path Length Constraint=None");}else{char temp[128] = {0};sprintf_s(temp, 128, "Path Length Constraint=%d", bcons->pathlen);strcat_s(value, 512, "Subject Type=CA; ");strcat_s(value, 512, temp);}BASIC_CONSTRAINTS_free(bcons);if (!lpscProperty){*pulLen = strlen(value) + 1;}if (*pulLen < (strlen(value) + 1)){return CERT_ERR_BUFFER_TOO_SMALL;}strcpy_s(lpscProperty, *pulLen, value);return CERT_ERR_OK;}
0 0
- 通过OpenSSL获取证书扩展属性之一:“基本约束”
- 使用CryptoAPI获取证书扩展属性之一:“基本约束”
- 通过OpenSSL获取证书扩展属性之二:“密钥用法”和"增强型密钥用法"
- 通过OpenSSL获取证书扩展属性之三:“颁发机构密钥标识”和"使用者密钥标识"
- 通过OpenSSL获取证书扩展属性之四:“CRL 分发点”和"颁发机构信息访问"
- 通过OpenSSL解析X509证书基本项
- 通过OpenSSL获取X509证书的HASH(指纹)值
- openssl 获取base64编码证书
- OpenSSL 中文手册 之一 OpenSSL 简介-证书
- 通过OpenSSL解码X509证书文件
- CentOS通过OpenSSL生成自签名证书
- 通过OPENSSL建立证书以及CSR证书签名过程
- 通过OPENSSL建立证书以及CSR证书签名过程
- Windows2000 下apache+OpenSSL+ModSSL+获取证书
- 获取 X509 证书的 Version 信息 (openssl)
- 获取 X509 证书 serial (openssl)
- openssl 获取x509.pem 证书信息
- Openssl编程获取X509证书的DNS
- Office 365 IT Professional——利用PowerShell设置Password 永不过期
- iOS自动化常用命令集合
- HeapAlloc 和 GlobalAlloc 以及 VirtualAlloc 三者之间的关系
- Unable to open debugger port : java.net.BindException "Address already in use: JVM_Bind
- ListView,GridView和ScrollView设置初始间距不影响滚动。
- 通过OpenSSL获取证书扩展属性之一:“基本约束”
- 将Gradle项目发布到maven仓库
- 模糊背景处理--当前界面背景
- 【HDU4725】【建模dij】【新建虚拟节点 每层一个出口和入口】
- 8.2.1.7 Use of Index Extensions 索引扩展使用
- Extjs grid select 选取行内容
- UVA_10271_Chopsticks
- Linux常用指令
- IOS集成支付宝回调的坑