openssl怎样加载内存中的证书链
时间: 2023-11-09 16:09:48 浏览: 141
openssl1.1.1 动态库
要将内存中的证书链加载到OpenSSL中,可以使用以下代码:
1. 创建一个X509_STORE对象:
```c
X509_STORE *store = X509_STORE_new();
```
2. 创建一个X509_STORE_CTX对象:
```c
X509_STORE_CTX *ctx = X509_STORE_CTX_new();
```
3. 将证书链添加到X509_STORE对象中:
```c
X509_STORE_add_cert(store, cert);
```
其中cert是一个X509结构体指针,表示证书链中的一个证书。
4. 设置X509_STORE_CTX对象的验证参数:
```c
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_STORE_CTX_set0_param(ctx, param);
```
5. 将要验证的证书添加到X509_STORE_CTX对象中:
```c
X509_STORE_CTX_set_cert(ctx, cert);
```
6. 调用X509_verify_cert函数进行验证:
```c
int ret = X509_verify_cert(ctx);
```
完整的代码示例:
```c
X509_STORE *store = X509_STORE_new();
X509_STORE_CTX *ctx = X509_STORE_CTX_new();
X509_STORE_add_cert(store, cert);
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_STORE_CTX_set0_param(ctx, param);
X509_STORE_CTX_set_cert(ctx, cert);
int ret = X509_verify_cert(ctx);
if (ret == 1) {
printf("Certificate chain is valid\n");
} else {
printf("Certificate chain is invalid\n");
}
X509_STORE_CTX_free(ctx);
X509_STORE_free(store);
```
值得注意的是,此处的证书链应该是PEM格式的字符串,需要使用OpenSSL的PEM_read_bio_X509函数将其转换为X509结构体指针。
阅读全文