openssl验证证书代码
时间: 2023-05-23 14:06:24 浏览: 122
以下是一个简单的 OpenSSL 验证证书的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/x509v3.h>
int main(int argc, char **argv)
{
/* 使用 BIO 读取证书文件 */
BIO *certbio = BIO_new(BIO_s_file());
BIO_read_filename(certbio, "cert.pem");
if (!certbio) {
printf("Failed to open cert file.\n");
return 1;
}
/* 使用 PEM_read_bio_X509() 解析证书 */
X509 *cert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
if (!cert) {
printf("Failed to parse cert.\n");
return 1;
}
/* 创建一个 X509_STORE 用于验证证书 */
X509_STORE *store = X509_STORE_new();
if (!store) {
printf("Failed to create X509 store.\n");
return 1;
}
/* 加载 CA 证书 */
BIO *cacertbio = BIO_new(BIO_s_file());
BIO_read_filename(cacertbio, "cacert.pem");
if (!cacertbio) {
printf("Failed to open ca cert file.\n");
return 1;
}
/* 使用 PEM_read_bio_X509() 解析 CA 证书 */
X509 *cacert = PEM_read_bio_X509(cacertbio, NULL, NULL, NULL);
if (!cacert) {
printf("Failed to parse ca cert.\n");
return 1;
}
/* 将 CA 证书加入到 X509_STORE 中 */
if (X509_STORE_add_cert(store, cacert) != 1) {
printf("Failed to add ca cert to store.\n");
return 1;
}
/* 使用 X509_verify_cert() 验证证书 */
X509_STORE_CTX *ctx = X509_STORE_CTX_new();
if (!ctx) {
printf("Failed to create X509 store context.\n");
return 1;
}
X509_STORE_CTX_init(ctx, store, cert, NULL);
int ret = X509_verify_cert(ctx);
if (ret != 1) {
printf("Cert verification failed.\n");
ERR_print_errors_fp(stdout);
return 1;
}
printf("Cert verification succeeded.\n");
/* 释放资源 */
X509_STORE_CTX_free(ctx);
X509_STORE_free(store);
BIO_free(cacertbio);
BIO_free(certbio);
X509_free(cert);
X509_free(cacert);
return 0;
}
```
此代码将从 "cert.pem" 文件中读取要验证的证书,从 "cacert.pem" 文件中读取 CA 证书,并创建一个 X509_STORE 用于验证证书。它解析证书并将 CA 证书添加到存储库中,然后使用 X509_verify_cert() 函数验证证书。如果验证失败,ERR_print_errors_fp() 函数将输出错误信息。最后,释放所有资源。